徵兆
當您在 Microsoft Visual Basic for Applications 巨集中使用 Location 屬性或 Location.Address 作為垂直或水平頁面切換時,您可能會收到以下錯誤訊息:
執行時錯誤 '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 SubSub 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 屬性前,新增程式碼選擇工作表中最後一個儲存格。 例如,使用以下程式碼選擇終端儲存格,使用位置屬性,然後重新選取原本的活動儲存格:
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
計算出位置屬性後,你可以再次選擇原本的活動儲存格。 如果你用程式碼在第一個和最後一個儲存格之間滾動,或選中最後一個儲存格後立刻重新選取起始儲存格,錯誤仍可能發生。 螢幕必須重新繪製,並計算位置屬性,才能有效解決這個替代方案。 如果你使用上述程式碼
Application.ScreenUpdating = False
為了防止螢幕重繪,問題仍然存在。
狀態
Microsoft 已確認<適用於>一節中所列的 Microsoft 產品確實有上述問題。
其他相關資訊
如果你使用 Count 方法搭配 VPageBreaks 或 HPageBreaks 屬性,可能會得到零的結果。 此情況依「原因」部分列出的條件發生。 若有分頁標示,計數法可能會給出正確答案。 對於垂直或水平分頁的計數方法,如果分頁位於工作簿視窗可見區域附近,可能會得到預期結果。 前述的變通方法可用來取得預期計數。若視窗右側或下方的分頁點,若視窗與分頁距離小於分頁距離的一半,則可啟用計數方法並找到該分頁點。
參考
欲了解更多如何在巨集中捕捉錯誤的資訊,請點擊以下文章編號以瀏覽 Microsoft 知識庫中的文章:
213637 如何使用「錯誤中」來處理巨集中的錯誤