/ / Sélectionner les cellules d'une page dans une zone d'impression - excel, vba, excel-vba, saut de page

Sélectionnez les cellules d'une page dans une zone d'impression - excel, vba, excel-vba, saut de page

J'ai un classeur avec plusieurs feuilles de calcul avecZones d'impression définies. Chaque zone d'impression comporte 0 ou plusieurs sauts de page définis. Comment procéder pour sélectionner uniquement les cellules de la page 1 uniquement ou les cellules de la page 2 uniquement de la zone d'impression. J'ai écrit du code pour sélectionner la page 1:

Dim wksht As Worksheet
Dim rng As Range
Dim prntArea As Range
Set wksht = ThisWorkbook.ActiveSheet
Set prntArea = wksht.Range(wksht.PageSetup.printArea)
"Select Page 1 of print area
"First cell of print area
Set rng = prntArea.Cells(1, 1)
"extend to one row above page break
Set rng = wksht.Range(rng.Address, wksht.HPageBreaks(1).Location.Offset(-1).Address)
"extend to last column of Print Area
Set rng = wksht.Range(rng.Address, wksht.Cells(prntArea.Cells(1, 1).Row, prntArea.Cells(prntArea.Count).Column).Address)
rng.Copy

Ensuite, je devrais écrire plus de code pour sélectionner une deuxième et une troisième page si elles existent, en passant d'un saut de page au suivant ou à la fin de la zone d'impression.

Existe-t-il un moyen plus simple de sélectionner une seule des pages de la zone d'impression?

Ce que j'essaie de faire:

L'utilisateur peut imprimer au format PDF actuellement en utilisantExportToFixedFormat, et qui utilise les zones d'impression. Ils veulent pouvoir imprimer sur PowerPoint et Word. Donc, je crée une nouvelle présentation PowerPoint et sélectionne les zones d'impression de la page, puis copiez et collez dans une nouvelle diapositive. J'ai tout fonctionne, sauf essayer de trouver un moyen plus facile de sélectionner les pages d'impression.

Réponses:

1 pour la réponse № 1

Vous devez utiliser le Worksheet.VPageBreaks (sauts de page verticaux) et Worksheet.HPageBreaks (horiz pagebreaks) propriétés de la collection comme vous vous en êtes rendu compte. Cependant, je vous suggère d'utiliser une approche similaire à celle ci-dessous plutôt que de supposer que la zone d'impression fait toujours 1 page).

Vous pouvez les analyser pour identifier les domaines couverts par chaque page.

Le code ci-dessous montre quelques façons de travailler avec etinteragir avec eux. Jetez un œil à leurs méthodes et propriétés, en particulier la propriété Location. Regardez le texte de débogage (assurez-vous que la fenêtre Immediates est visible) pour voir comment les .Locations correspondent aux sauts de page que vous pouvez voir sur la page.

Sub PageBreaksExample()
Dim ws As Worksheet
Dim hpb As HPageBreak
Dim vpb As VPageBreak

Set ws = ActiveSheet

For Each hpb In ws.HPageBreaks
Debug.Print "Horizontal pagebreak: " & hpb.Location.Address
Next hpb

For Each vpb In ws.VPageBreaks
Debug.Print "Vertical pagebreak:" & vpb.Location.Address
Next vpb

"You can get the first page range like: (adjust for second page etc)
Dim rng
Set rng = ws.Range( _
ws.HPageBreaks(1).Location.Offset(-1, 0), _
ws.VPageBreaks(1).Location.Offset(0, -1))
Debug.Print "Range of first page:" & rng.Address

End Sub

Notez que la première page est toujours trouvée paren regardant HPageBreaks (1) et VPageBreaks (1). Cependant, selon la façon dont la feuille de calcul est configurée pour imprimer les pages suivantes (vers le bas puis vers le haut contre vers le haut puis vers le bas) affecte la façon dont vous devez rechercher la deuxième page et les suivantes. Vous pouvez identifier la direction à suivre en consultant Worksheet.PageSetup.Order propriété (xlDownThenOver ou xlOverThenDown).


0 pour la réponse № 2

C’est finalement ce que j’ai trouvéce problème. Cela ne fonctionnera qu'avec les sauts de page horizontaux. Il est divisé en 3 sections. Tout d'abord, il n'y a pas de sauts de page et une seule page à imprimer. Le second est lorsqu'il y a un saut de page et deux pages à imprimer. Ensuite, la troisième section concerne 2 sauts de page ou plus, ce qui signifie qu'il y a 3 pages ou plus. Où tu vois ***** Travailler sur la gamme sélectionnée, cela signifie que le rng contient la page de la zone d'impression, c'est là que vous souhaitez effectuer une action sur la page de la zone d'impression.

Dim wksht as Worksheet
For Each wksht In ThisWorkbook.Worksheets
Dim prntArea As Range
Set prntArea = wksht.Range(wksht.PageSetup.printArea)


If wksht.HPageBreaks.Count = 0 Then "No Page Breaks in Print Area
Set rng = prntArea
"*****Work on selected range
End If


If wksht.HPageBreaks.Count = 1 Then "One Page Break = 2 Pages
" Page 1
Set rng = prntArea.Cells(1, 1)
Set rng = wksht.Range(rng.Address, wksht.HPageBreaks(1).Location.Offset(-1).Address)
Set rng = Application.Intersect(rng.EntireRow, prntArea)
"*****Work on Selected Range

" Page 2
Set rng = wksht.Range(wksht.HPageBreaks(1).Location.Address, prntArea.Cells(prntArea.Rows.Count, 1))
Set rng = Application.Intersect(rng.EntireRow, prntArea)
"*****Work on selected Range
End If


If wksht.HPageBreaks.Count > 1 Then   "2 or more Page Breaks = 3 or more pages
" Page 1
Set rng = prntArea.Cells(1, 1)
Set rng = wksht.Range(rng.Address, wksht.HPageBreaks(1).Location.Offset(-1).Address)
Set rng = wksht.Range(rng.Address, wksht.Cells(prntArea.Cells(1, 1).Row, prntArea.Cells(prntArea.Count).Column).Address)
"*****Work on Selected Range

" Pages 2 through (pages - 1)
Dim pgBreaks As Integer
For pgBreaks = 1 To wksht.HPageBreaks.Count - 1
Set rng = wksht.Range(wksht.HPageBreaks(pgBreaks).Location.Address, wksht.HPageBreaks(pgBreaks + 1).Location.Offset(-1).Address)
If rng.Columns.Count < prntArea.Columns.Count Then
Set rng = rng.Resize(rng.Rows.Count, prntArea.Columns.Count)
End If
"*****Work on Selected Range
Next pgBreaks

"Last Page
Set rng = wksht.Range(wksht.HPageBreaks(wksht.HPageBreaks.Count).Location.Address, prntArea.Cells(prntArea.Rows.Count, 1))
Set rng = Application.Intersect(rng.EntireRow, prntArea)
"*****Work on Selected Range
End If
Next wksht

-2 pour la réponse № 3

J'ai besoin d'une table des matières avec une feuille Excel basée sur le texte / le numéro de page de l'en-tête de saut de page comme lien pour la navigation dans la page