Triệu chứng
Khi bạn sử dụng thuộc tính vị trí hoặc vị trí. địa chỉ của ngắt trang dọc hoặc ngang trong phần macro Microsoft Visual Basic for Applications, bạn có thể nhận được thông báo lỗi sau đây:
Lỗi thời gian chạy ' 9 ': chỉ số dưới của phạm vi
Nguyên nhân
Vấn đề này có thể xảy ra nếu các điều kiện sau đây là đúng:
-
Ô hiện hoạt nằm trên dấu ngắt trang ngang hoặc ở bên trái của dấu ngắt trang dọc được gọi là chỉ mục Hpagebreaks hoặc vpagebreaks .
-
Vị trí ngắt trang dọc hoặc ngang nằm ngoài màn hình ở bên phải cửa sổ nhìn thấy hoặc bên dưới cửa sổ hiển thị của sổ làm việc.
-
Bạn sử dụng macro Visual Basic for Applications trong Microsoft Excel tương tự như mã sau đây:
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
Cách giải quyết
Microsoft cung cấp các ví dụ về lập trình chỉ cho hình minh họa mà không có bảo hành nào được thể hiện hoặc ngụ ý. Điều này bao gồm nhưng không giới hạn, các bảo đảm ngụ ý về khả năng bán hoặc thể dục cho mục đích cụ thể. Bài viết này giả định rằng bạn đã quen thuộc với ngôn ngữ lập trình được thể hiện và các công cụ được sử dụng để tạo và thủ tục gỡ lỗi. Kỹ sư hỗ trợ của Microsoft có thể giúp giải thích về các chức năng của một thủ tục cụ thể nhưng chúng sẽ không sửa đổi các ví dụ này để cung cấp thêm chức năng hoặc thủ tục dựng thêm để đáp ứng các yêu cầu cụ thể của bạn. Để tránh vấn đề này, hãy thêm mã để chọn ô cuối cùng được dùng trong trang tính trước khi mã sử dụng thuộc tính vị trí của dấu ngắt trang ngang hoặc dọc. Ví dụ, sử dụng mã sau đây để chọn ô cuối cùng, sử dụng thuộc tính vị trí , rồi chọn lại ô hiện hoạt gốc:
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
Sau khi tính toán thuộc tính vị trí , bạn lại có thể chọn ô hiện hoạt gốc. Nếu bạn sử dụng mã để cuộn giữa ô đầu tiên và cuối cùng, hoặc chọn ô cuối cùng và ngay lập tức chọn lại ô bắt đầu, lỗi vẫn có thể xảy ra. Màn hình phải vẽ lại và thuộc tính vị trí được tính cho giải pháp thay thế để có hiệu lực. Nếu bạn sử dụng mã trên cùng với
Application.ScreenUpdating = False
để ngăn lại vẽ màn hình, vấn đề vẫn xảy ra.
Trạng thái
Microsoft đã xác nhận đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".
Thông tin Bổ sung
Nếu bạn dùng phương thức đếm với thuộc tính vpagebreaks hoặc hpagebreaks , bạn có thể nhận được kết quả bằng không. Điều này xảy ra trong các điều kiện được liệt kê trong phần "Cause". Nếu ngắt trang hiển thị, phương thức đếm có thể cung cấp câu trả lời đúng. Phương pháp đếm cho dấu ngắt trang dọc hoặc ngang có thể cho kết quả dự kiến nếu ngắt trang nằm gần phần có thể nhìn thấy được trong cửa sổ sổ làm việc. Giải pháp thay thế trước đây có thể được dùng để lấy số đếm dự kiến. Ngắt trang ở bên phải của cửa sổ sổ làm việc hoặc bên dưới cửa sổ sổ làm việc có thể cho phép phương thức đếm để làm việc và ngắt trang đó để được đặt, nếu khoảng cách từ cửa sổ đến dấu ngắt trang nhỏ hơn một nửa so với khoảng cách giữa các ngắt trang.
Tham khảo
Để biết thêm thông tin về cách bẫy lỗi trong macro, hãy bấm số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:
213637 Cách dùng "on Error" để xử lý lỗi trong macro