症状
使用 location 属性或 位置时。 "Microsoft Visual Basic for Applications" 宏中的垂直或水平分页符的地址,您可能会收到以下错误消息:
运行时错误 "9":下标超出范围
原因
如果满足以下条件,则可能会发生此问题:
-
活动单元格位于水平分页符上方或 HPageBreaks 或 VPageBreaks 索引所引用的垂直分页符左侧。
-
垂直或水平分页符位置位于可见窗口右侧或工作簿可见窗口下方的屏幕。
-
在 Microsoft Excel 中使用 Visual Basic for Applications 宏类似于以下代码:
Sub TestHorizontal() ActiveSheet.Range("CZ1000").Value = 1 MsgBox ActiveSheet.HPageBreaks.Count MsgBox ActiveSheet.HPageBreaks(1).Location.Address MsgBox ActiveSheet.HPageBreaks(2).Location.AddressEnd Sub Sub TestVertical() ActiveSheet.Range("CZ1000").Value = 1 MsgBox ActiveSheet.VPageBreaks.Count MsgBox ActiveSheet.VPageBreaks(1).Location.Address MsgBox ActiveSheet.VPageBreaks(2).Location.Address MsgBox ActiveSheet.VPageBreaks(3).Location.AddressEnd Sub
解决方法
Microsoft 提供的编程示例仅用于说明,没有任何明示或默示的保证。这包括但不限于对适销性或特定用途适用性的默示担保。本文假定你熟悉所演示的编程语言,以及用于创建和调试过程的工具。Microsoft 支持工程师可帮助解释特定过程的功能,但不会修改这些示例以提供额外的功能或构建过程来满足你的特定要求。 若要避免此问题,请在代码使用水平或垂直分页符的 Location 属性之前,添加代码以选择工作表中使用的最后一个单元格。 例如,使用以下代码选择结束单元格,使用 Location 属性,然后重新选择原始活动单元格:
Sub CheckPageBreaks() 'Set object "currcell" equal to active cell. Set currcell = ActiveCell 'Select the last cell on the worksheet that has data. Range("IV65536").Select 'Include code with Location property here. x = ActiveSheet.HPageBreaks(2).Location.Address MsgBox x 'Example sets x equal to address of second horizontal page break. 'Then message box displays the address of the page break. 'Select original active cell. currcell.SelectEnd Sub
计算 Location 属性后,您可以再次选择原始活动单元格。 如果使用代码在第一个和最后一个单元格之间滚动,或者选择最后一个单元格,然后立即重新选择起始单元格,则仍可能会出现该错误。 屏幕必须重绘并计算 Location 属性,才能使解决方法生效。 如果将上述代码与
Application.ScreenUpdating = False
若要防止屏幕重绘,仍然出现问题。
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。
更多信息
如果对VPageBreaks或HPageBreaks属性使用Count方法,则可能会收到零结果。 这会在 "原因" 部分中列出的条件下发生。 如果分页符可见, Count 方法可能会提供正确的答案。 如果分页符位于工作簿窗口的可见部分附近,则垂直或水平分页符的 Count 方法可能会提供预期的结果。 前面提供的解决方法可用于获取预期的计数。如果从窗口到分页符的距离小于分页符之间的距离的一半,则在工作簿窗口的右侧或工作簿窗口的正下方有一个分页符,可以启用 Count 方法来处理和分页。
参考
有关如何捕获宏中的错误的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
213637 如何使用 "On Error" 处理宏中的错误