Triệu chứng
Khi bạn chạy mã Microsoft Visual Basic sử dụng tự động hóa để điều khiển Microsoft Word, bạn có thể nhận được một trong các thông báo lỗi sau đây:thông báo lỗi 1
Lỗi thời gian chạy '-2147023174 ' (800706ba) lỗi tự động hóa
Thông báo lỗi 2
Lỗi thời gian chạy ' 462 ': máy chủ từ xa không tồn tại hoặc không sẵn dùng
Nguyên nhân
Visual Basic đã thiết lập một tham chiếu đến Word do một dòng mã có cuộc gọi đối tượng, phương pháp hoặc thuộc tính của Word mà không có đủ điều kiện với biến đối tượng từ. Visual Basic không phát hành tham chiếu này cho đến khi bạn kết thúc chương trình. Tham chiếu sai sót này liên kết với mã tự động hóa khi mã được chạy nhiều hơn một lần.
Giải pháp
Sửa đổi mã để mỗi cuộc gọi đến một đối tượng Word, phương pháp hoặc thuộc tính có đủ điều kiện với biến đối tượng thích hợp.
Trạng thái
Hành vi này là do thiết kế.
Thông tin Bổ sung
Để tự động hóa Word, bạn đã thiết lập một biến số đối tượng thường tham chiếu đến đối tượng ứng dụng Word hoặc tài liệu. Sau đó, các biến đối tượng khác có thể được đặt để tham chiếu đến một vùng chọn, phạm vi hoặc các đối tượng khác trong mô hình đối tượng Word. Khi bạn viết mã để sử dụng một đối tượng Word, phương pháp hoặc thuộc tính, bạn nên luôn đứng trước cuộc gọi với biến thể đối tượng thích hợp. Nếu bạn không, Visual Basic sử dụng tham chiếu biến toàn cầu ẩn mà nó đặt thành ví dụ hiện đang chạy. Nếu Word đang tắt hoặc nếu biến đối tượng đã được phát hành, biến thể hiện toàn cầu ẩn sẽ tham chiếu đến đối tượng không hợp lệ (bị hủy). Khi chạy lại mã tự động, các cuộc gọi đến biến số đối tượng ẩn này sẽ không thành công với lỗi đã nói. Các bước sau đây minh họa cách tái tạo vấn đề này và cách sửa nó.
Các bước để tái tạo hành vi
-
Bắt đầu một dự án EXE tiêu chuẩn mới trong Visual Basic. Form1 được tạo theo mặc định.
-
Bấm tham chiếu từ menu dự án , rồi bấm vào một trong các tùy chọn sau:
-
Đối với Office Word 2007, hãy bấm Thư viện đối tượng Microsoft Word 12,0
-
Đối với Word 2003, hãy bấm Thư viện đối tượng Microsoft Word 11,0
-
Đối với Word 2003, hãy bấm Thư viện đối tượng Microsoft Word 10,0
-
Đối với Word 2000, bấm vào Thư viện đối tượng Microsoft Word 9,0.
-
Đối với Word 97, bấm vào Thư viện đối tượng Microsoft Word 8,0.
-
-
Đặt một nút Commanda trên Form1.
-
Sao chép mã sau đây vào cửa sổ mã của Form1:
Option Explicit Private Sub Command1_Click() Dim oWord As Word.Application Dim oDoc As Word.Document Dim oRange as Word.Range Set oWord = CreateObject("Word.Application") With oWord .Visible = True .Activate .WindowState = wdWindowStateNormal End With Set oDoc = oWord.Documents.Add MsgBox "Document open", vbMsgBoxSetForeground With oDoc .PageSetup.LeftMargin = InchesToPoints(1.25) End With ' This example inserts text at the end of section one. Set oRange = ActiveDocument.Sections(1).Range With oRange .MoveEnd Unit:=wdCharacter, Count:= -1 .Collapse Direction:=wdCollapseEnd .InsertParagraphAfter .InsertAfter "End of section." End With With oDoc .Saved = True End With Set oRange = Nothing Set oDoc = Nothing oWord.Quit Set oWord = Nothing End Sub
-
Trên menu chạy , bấm vào bắt đầu hoặc nhấn phím F5 để bắt đầu chương trình.
-
Bấm vào nút Commandor. Không có lỗi nào xảy ra. Tuy nhiên, tham chiếu đến Word đã được tạo ra và chưa được phát hành.
-
Bấm vào nút Commandagain và lưu ý rằng bạn nhận được lỗi đã được mô tả trước đó.Lưu ý Lỗi xảy ra vì mã tham chiếu đến phương pháp InchesToPoints mà không có trước cuộc gọi với biến đối tượng oWord.
-
Ngừng dự án và thay đổi dòng sau đây:
.PageSetup.LeftMargin = InchesToPoints(1.25)
cho
.PageSetup.LeftMargin = oWord.InchesToPoints(1.25)
-
Chạy lại chương trình. Sau đó, bấm vào nút Commandor. Không có lỗi nào xảy ra.
-
Bấm vào nút Commandagain và lưu ý rằng bạn nhận được lỗi.Lưu ý Lỗi xảy ra vì mã tham chiếu đến đối tượng phạm vi ActiveDocument của một trong số đó mà không có trước cuộc gọi với biến đối tượng oWord.
-
Ngừng dự án và thay đổi dòng sau đây:
Set oRange = ActiveDocument.Sections(1).Range
cho
Set oRange = oWord.ActiveDocument.Sections(1).Range
-
Chạy lại chương trình. Lưu ý rằng bạn có thể chạy mã nhiều lần mà không có lỗi.
Khi xây dựng một từ tự động hóa dự án Visual Basic, nếu dự án của bạn có tham chiếu đến thư viện đối tượng Microsoft Word, mã mẫu cho đối tượng, phương pháp và thuộc tính của mô hình đối tượng Word sẵn dùng từ tệp trợ giúp từ. Khi con trỏ ở trên một từ khóa trong mã của bạn, bạn sẽ thấy bất kỳ văn bản trợ giúp áp dụng nào bằng cách nhấn phím F1. Mã mẫu trong chủ đề trợ giúp sẽ là mã Microsoft Word Visual Basic cho ứng dụng. Nó sẽ không hiển thị tham chiếu đối tượng mà mã Visual Basic của bạn yêu cầu. Bạn sẽ cần phải thêm vòng loại phù hợp.
Tham khảo
Để biết thêm thông tin, vui lòng xem các bài viết sau đây trong cơ sở tri thức Microsoft:
178510 PRB: phương pháp tự động hóa của đối tượng _Global ' không thành công
167223 Tệp trợ giúp tự động hóa của Microsoft Office 97 sẵn dùngĐể biết thêm thông tin về việc tự động hóa các ứng dụng Office, hãy bấm số bài viết bên dưới để xem bài viết trong cơ sở kiến thức Microsoft:
222101 HOWTO: tìm và sử dụng tài liệu mô hình đối tượng Office