استیو به دنبال راهی است تا در یک ماکرو VBA، تعداد صفحاتی که یک کاربرگ خواهد داشت، هنگام چاپ و شماره صفحه ای که یک سلول خاص روی آن چاپ می شود، تعیین کند. این کار آنطور که انتظار می رود آسان نیست، اما می توان آن را انجام داد.
به نظر می رسد بهترین راه برای رسیدگی به این موضوع استفاده از یک تابع قدیمی (اما هنوز در دسترس) Excel 4 برای تعیین تعداد کل صفحات چاپ شده در یک کاربرگ است. سپس می توانید از مجموعه های HPageBreaks و VPageBreaks استفاده کنید تا بفهمید سلول در کجای ماتریس صفحاتی که چاپ می شوند قرار می گیرد. در زیر نمونه ای از یک ماکرو است که از این موارد استفاده می کند:
Sub PageInfo()
Dim iPages As Integer
Dim iCol As Integer
Dim iCols As Integer
Dim lRows As Long
Dim lRow As Long
Dim x As Long
Dim y As Long
Dim iPage As Integer
iPages = ExecuteExcel4Macro("Get.Document(50)")
With ActiveSheet
y = ActiveCell.Column
iCols = .VPageBreaks.Count
x = 0
Do
x = x + 1
Loop Until x = iCols _
Or y < .VPageBreaks(x).Location.Column
iCol = x
If y >= .VPageBreaks(x).Location.Column Then
iCol = iCol + 1
End If
y = ActiveCell.Row
lRows = .HPageBreaks.Count
x = 0
Do
x = x + 1
Loop Until x = lRows _
Or y < .HPageBreaks(x).Location.Row
lRow = x
If y >= .HPageBreaks(x).Location.Row Then
lRow = lRow + 1
End If
If .PageSetup.Order = xlDownThenOver Then
iPage = (iCol - 1) * (lRows + 1) + lRow
Else
iPage = (lRow - 1) * (iCols + 1) + iCol
End If
End With
MsgBox "Cell " & ActiveCell.Address & _
" is on " & vbCrLf & "Page " & _
iPage & " of " & iPages & " pages"
End Sub
یکی از مواردی که باید با این ماکرو در نظر داشته باشید این است که مجموعه های HPageBreaks و VPageBreaks تنها در صورتی دقیق در نظر گرفته می شوند که کاربرگ را در پیش نمایش بریک صفحه (نمایش | پیش نمایش بریک صفحه) مشاهده می کنید. بنابراین، قبل از انتخاب سلول و اجرای ماکرو، باید مطمئن شوید که در آن حالت هستید.