Lỗi tự động hóa VBA

Hướng dẫn này sẽ giải thích Lỗi tự động hóa VBA có nghĩa là gì và nó xảy ra như thế nào.

Excel được tạo thành từ các đối tượng - đối tượng Sổ làm việc, đối tượng Trang tính, đối tượng Phạm vi và đối tượng Ô để đặt tên nhưng một số ít. Mỗi đối tượng có nhiều thuộc tính và phương thức mà hành vi của chúng có thể được kiểm soát bằng mã VBA. Nếu mã VBA không được lập trình chính xác, thì lỗi tự động hóa có thể xảy ra. Đó là một trong những lỗi khó chịu hơn trong VBA vì nó thường có thể bật lên mà không có lý do rõ ràng khi mã của bạn trông hoàn toàn ổn!

(Xem Hướng dẫn xử lý lỗi của chúng tôi để biết thêm thông tin về Lỗi VBA)

Tham chiếu đến một biến không còn hoạt động nữa

Lỗi Tự động hóa có thể xảy ra khi bạn đang tham chiếu đến sổ làm việc hoặc trang tính thông qua một biến, nhưng biến đó không còn hoạt động.

1234567891011 Sub TestAutomation ()Dim strFile As StringDim wb As Workbook'mở tệp và đặt biến sổ làm việcstrFile = Application.GetOpenFilenameĐặt wb = Workbooks.Open (strFile)'Đóng sổ làm việcwb.Close'cố gắng kích hoạt sổ làm việcwb.ActivateKết thúc Sub

Khi chúng tôi chạy đoạn mã trên, chúng tôi sẽ gặp lỗi tự động hóa. Điều này là do chúng ta đã mở một sổ làm việc và gán một biến cho sổ làm việc đó. Sau đó, chúng tôi đã đóng sổ làm việc nhưng trong dòng mã tiếp theo, chúng tôi cố gắng kích hoạt sổ làm việc đã đóng. Điều này sẽ gây ra lỗi vì biến không còn hoạt động.

Nếu chúng ta muốn kích hoạt sổ làm việc, trước tiên chúng ta cần mở sổ làm việc!

Quá tải bộ nhớ

Lỗi này đôi khi cũng có thể xảy ra nếu bạn có một vòng lặp và bạn quên xóa một đối tượng trong quá trình thực hiện vòng lặp. Tuy nhiên, nó có thể chỉ xảy ra đôi khi, chứ không phải những trường hợp khác - đó là một trong những lý do tại sao lỗi này có thể rất khó chịu.

Lấy ví dụ mã này dưới đây:

1234567891011121314151617 Sub InsertPicture ()Dim i As IntegerDim shp As ObjectĐối với i = 1 đến 100Với Worksheets ("Sheet1")'đặt biến đối tượngĐặt shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Cells (i, "A"). Left, Top: =. Cells ( i, "A"). Trên cùng, Chiều rộng: = 264, Chiều cao: = 124)Kết thúc vớiVới shp.Object.PictureSizeMode = 3'tải hình ảnh.Object.Picture = LoadPicture ("C: \ data \ image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0Kết thúc vớiTiếp theo tôiKết thúc Sub

Biến được khai báo là một Đối tượng, và sau đó BỘ từ khóa được sử dụng để gán một hình ảnh cho đối tượng. Sau đó, đối tượng được điền bằng một hình ảnh và được chèn vào trang tính Excel với một số định dạng diễn ra cùng một lúc. Sau đó, chúng tôi thêm một vòng lặp vào mã để chèn 100 hình ảnh vào trang tính Excel. Đôi khi điều này gây ra lỗi tự động hóa, nhưng đôi khi thì không - thật khó chịu, phải không?

Giải pháp cho vấn đề này là xóa biến đối tượng trong vòng lặp bằng cách đặt đối tượng thành KHÔNG CÓ GÌ - điều này sẽ giải phóng bộ nhớ và ngăn lỗi.

12345678910111213141516171819 Sub InsertPicture ()Dim i As IntegerDim shp As ObjectĐối với i = 1 đến 100Với Worksheets ("Sheet1")'đặt biến đối tượngĐặt shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Cells (i, "A"). Left, Top: =. Cells ( i, "A"). Trên cùng, Chiều rộng: = 264, Chiều cao: = 124)Kết thúc vớiVới shp.Object.PictureSizeMode = 3'tải hình ảnh.Object.Picture = LoadPicture ("C: \ data \ image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Kết thúc với'xóa biến đối tượngĐặt shp = Không có gìTiếp theo tôiKết thúc Sub

Lỗi DLL và cập nhật Windows

Đôi khi lỗi xảy ra và không thể thực hiện được gì trong mã VBA. Đăng ký lại DLL đang được sử dụng, đảm bảo rằng Windows của chúng tôi được cập nhật và là phương sách cuối cùng, chạy Kiểm tra sổ đăng ký đôi khi là cách duy nhất có thể hoạt động để xóa lỗi này.

Một cách tốt để tránh lỗi này là đảm bảo rằng các bẫy lỗi được đặt bằng cách sử dụng Khi có lỗi Chuyển đến hoặc Khi có lỗi Tiếp tục tiếp theo các thói quen.

wave wave wave wave wave