今天用到了,解决了个问题,呵呵。在这里做个记录吧 Function GetRngPage(Optional Sht As Worksheet, Optional TargetCell As Range) As Integer 'Optional参数可选 On Error Resume Next GetRngPage = -1 If Sht Is Nothing Then Set Sht = ActiveSheet '一下四句均为对输入参数判断,如果sheet和cell不指定,都默认为当前sheet or cell If TargetCell Is Nothing Then Set TargetCell = ActiveCell If Sht Is Nothing Or TargetCell Is Nothing Then Exit Function '都不指定则退出函数 If TargetCell.Columns > 1 Or TargetCell.Rows > 1 Then Exit Function Dim Rng As Range Dim hP, vP, i As Integer Set Rng = Sht.UsedRange '确定使用区域 If TargetCell.Row > Rng.Rows(Rng.Rows.Count).Row Or TargetCell.Column > Rng.Columns(Rng.Columns.Count).Column Then Exit Function '当前指定的单元格并不在打印区域内! hP = Sht.HPageBreaks.Count + 1 '看看sheet中有几个水平分隔符 vP = Sht.VPageBreaks.Count + 1 '几个垂直分隔符 For i = 1 To Sht.VPageBreaks.Count '遍历垂直分割符,判断位置 If Sht.VPageBreaks(i).Location.Column > TargetCell.Column Then '分隔符所在列与目标单元格所在列比较 vP = i: Exit For '找到目标单元格在哪个垂直分隔符内 End If Next For i = 1 To Sht.HPageBreaks.Count '遍历水平分隔符,判断位置,同上 If Sht.HPageBreaks(i).Location.Row > TargetCell.Row Then hP = i: Exit For End If Next GetRngPage = IIf(Sht.PageSetup.Order = xlDownThenOver, (vP - 1) * (Sht.HPageBreaks.Count + 1) + hP, (hP - 1) * (Sht.VPageBreaks.Count + 1) + vP) '.PageSetup.Order有两个值代表两种页面的排列方式,本例是先从上到下然后从左到右。对应不同的排列方式有两种计算方法。 End Function