/ /印刷領域内の1ページのセルを選択-excel、vba、excel-vba、改ページ

印刷領域内の1ページのセルを選択 - Excel、Excel、Excel、Excel

私はいくつかのワークシートを含むワークブックを持っています定義された印刷領域。各印刷領域には、0個以上の改ページが定義されています。印刷領域のページ1のみのセルまたはページ2のセルのみを選択するにはどうすればよいでしょうか。 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

次に、2番目と3番目のページが存在する場合は、1つのページ区切りから次のページまたは印刷領域の終わりまで、選択するためのコードをさらに記述する必要があります。

印刷領域のページの1つだけを選択する簡単な方法はありますか?

私がやろうとしていること:

ユーザーは現在使用しているPDFに印刷できますExportToFixedFormat、および印刷領域を使用します。彼らは、PowerPointとWordに印刷できるようにしたいと考えています。そこで、新しいPowerPointプレゼンテーションを作成し、印刷ページ領域を選択してから、コピーして新しいスライドに貼り付けます。印刷ページを選択する簡単な方法を見つけることを除けば、すべてが機能しています。

回答:

回答№1は1

あなたは Worksheet.VPageBreaks (垂直改ページ)および Worksheet.HPageBreaks (水平改ページ)実現したコレクションのプロパティ。ただし、printareaが常に1ページ幅であると仮定するのではなく、以下のようなアプローチを使用することをお勧めします。

それらを分析して、各ページがカバーする領域を特定できます。

次のコードは、いくつかの操作方法とそれらと対話します。それらのメソッドとプロパティ、特にLocationプロパティを見てください。デバッグテキスト(イミディエイトウィンドウが表示されていることを確認してください)を見て、.Locationsがページで確認できる改ページにどのように対応しているかを確認します。

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

最初のページは常にHPageBreaks(1)およびVPageBreaks(1)を見てください。ただし、ワークシートが後続のページを印刷するように設定されている方法(下向き、上向き、下向き、下向き)によっては、2番目以降のページを見つける方法に影響します。あなたはそれを見ることによって、それがどの方向に進んでいるかを特定することができます Worksheet.PageSetup.Order プロパティ(xlDownThenOver または xlOverThenDown)。


回答№2の場合は0

これは最終的に私が思いついたことですこの問題。これは、水平改ページでのみ機能します。 3つのセクションに分かれています。 1つは、改ページがなく、印刷するページが1つしかない場合です。 2つ目は、1つの改ページと2つの印刷ページがある場合です。 3番目のセクションは2ページ以上の改ページ、つまり3ページ以上のページです。あなたが見るところ *****選択した範囲で作業する、つまり、rngには印刷領域のページが含まれます。これは、印刷領域のページでアクションを実行する場所です。

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の回答№3

ページナビゲーションのリンクとして、改ページ後のテキスト/ページ番号に基づく1つのExcelシートを含む目次が必要です