史蒂夫(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及更高版本)找到本技巧的版本: