VBA(Microsoft Excel)中的页码
史蒂夫(Steve)正在寻找一种在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集合是正确的。因此,在选择单元格并运行宏之前,您需要确保您处于该模式。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(3135)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: