【发布时间】:2014-04-19 03:55:39
【问题描述】:
在 Excel 2007 中,我有一个工作表,其中仅包含几个单元格中的数据(正好在一页宽/高之内)。举例来说,假设工作表仅包含单元格 A1 中的数据。如何使用 VBA 确定适合单个打印页面的列数?换句话说,我如何确定最右边的列,我可以在其中添加数据而不导致打印额外的工作表。几个额外的 cmets:
我没有设置打印区域。如果我是,那我就用同样的 范围...但我不是。
我不能使用
UsedRange,因为使用的范围比 实际适合打印页面的宽度/高度。我不能使用
ActiveWindow.VisibleRange,因为它不限于 单页宽度/高度。
我已经搜索和搜索,但找不到完成这个看似简单的任务的解决方案。我主要发现涉及UsedRange、VisibleRange 和打印区域的场景,但这些对我没有帮助。
编辑
这是我正在使用的函数的最终版本,对所选答案稍作调整。
Public Function GetLastColumnBeforeVPageBreak( _
ByRef ws As Worksheet, _
ByVal aVPageBreakNum As Long) As Long
Dim isMod As Boolean
isMod = False
On Error GoTo ErrorHandler
GetLastColumnBeforeVPageBreak = ws.VPageBreaks(aVPageBreakNum).Location.Column - 1
' If necessary, delete the last column with dummy data and reset UsedRange.
If isMod Then
ws.Cells(ws.Rows.Count, ws.Columns.Count).EntireColumn.Delete
r = ws.UsedRange.Rows.Count
End If
Exit Function
ErrorHandler:
If Err.Number = 9 Then
' Subscript out of range.
' Ensure there is more than one page by putting something in last cell.
isMod = True
ws.Cells(ws.Rows.Count, ws.Columns.Count).Value = 1
Err.Clear
Resume
Else
Err.Raise Err.Number
End If
End Function
【问题讨论】:
-
嗨@neizan,你有没有找到更好的方法来做到这一点?我现在有一个非常相似的问题。请在此处查看我的问题:stackoverflow.com/questions/23824898/… 我需要找到打印区域减去所有边距。我可以使用您的方法成功获得最后一列并自己计算出边界。它只是看起来不是一个体面的解决方案。如果您设法找到更好的方法来做到这一点,请您也告诉我。提前致谢!