کریستن یک کاربرگ دارد که حاوی هزاران ردیف داده است. در ستون B نام خانوادگی شخص در هر ردیف است و ردیف ها با استفاده از این نام خانوادگی به عنوان کلید اصلی مرتب می شوند. وقتی کریستن کاربرگ را چاپ می کند، خوب است اگر پاورقی بتواند نام خانوادگی آخرین فردی را که در آن صفحه چاپ شده است، در سمت راست نشان دهد. این به او این امکان را می دهد که پرینت را به دقت بررسی کند و به راحتی صفحه مورد نیاز خود را شناسایی کند.
هیچ قابلیت داخلی برای انجام این کار با اکسل وجود ندارد، اما می توانید یک ماکرو برای انجام آن ایجاد کنید. بخش دشوار این است که بفهمید صفحه بریکه در کجا قرار دارد تا ماکرو شما بتواند آخرین سلول ستون B را برای صفحه بگیرد. ماکرو زیر را در نظر بگیرید که یکی از راه های تشخیص بریک صفحه را پیاده سازی می کند:
Sub PrintNamesInRightFooter()
Dim iLNCol As Integer
Dim lPage As Long
Dim lPr As Long
Dim iFirstRow As Integer
Dim iLastRow As Integer
Dim sPrintArea As String
iLNCol = 2 Column from which to grab name
With ActiveSheet
sPrintArea = .PageSetup.PrintArea
For lPage = 1 To .PageSetup.Pages.Count
lPr = ((lPage - 1) Mod (.HPageBreaks.Count + 1))
If lPr = 0 Then
iFirstRow = 1
If sPrintArea > "" Then
iFirstRow = .Range(sPrintArea).Cells(1).Row
End If
Else
iFirstRow = .HPageBreaks(lPr).Location.Row
End If
If (lPr + 1) > .HPageBreaks.Count Then
iLastRow = .Cells(iFirstRow, iLNCol).End(xlDown).Row
Else
iLastRow = .HPageBreaks(lPr + 1).Location.Row - 1
End If
.PageSetup.RightFooter = .Cells(iLastRow, iLNCol)
.PrintOut From:=lPage, To:=lPage
Next
End With
End Sub
ماکرو از هر صفحه در کاربرگ فعال عبور می کند و آخرین ردیف را با استفاده از مجموعه .HPageBreaks محاسبه می کند. هر یک از اعضای مجموعه را می توان برای تعیین ردیف اول هر صفحه استفاده کرد، اما منطق در ماکرو از ردیف قبل از آن استفاده می کند تا نام مورد نظر را بگیرد و آن را در قسمت سمت راست پاورقی صفحه قرار دهد. از آنجایی که پاورقی برای هر صفحه در حال تغییر است، هر بار فقط یک صفحه از کاربرگ چاپ می شود.
لازم به ذکر است که در برخی شرایط استفاده از مجموعه .HPageBreaks می تواند باعث ایجاد خطا در VBA شود. مایکروسافت این موضوع را در این URL طولانی مضحک توضیح می دهد:
https://support.microsoft.com/en-us/topic/you-receive-a-subscript-out-of-range-error-message-when-you-use-hpagebreaks-or-vpagebreaks-location-in-excel-ec4a8e22-9b58-349d-b160-f7a4f561c809
اگر ماکرو را اجرا کنید و با خطا مواجه شدید (همان چیزی که در URL بالا توضیح داده شده است)، می توانید درست بعد از خط "With ActiveSheet" موارد زیر را اضافه کنید:
.Cells(.UsedRange.Rows.Count + .UsedRange.Row - 1, _
.UsedRange.Columns.Count + .UsedRange.Column - 1).Select