2008-10-04 34 views
9

Tôi nên sử dụng tiêu chí để quyết định xem tôi viết code VBA như thế này:Sự khác nhau giữa việc sử dụng từ khóa Mới và gọi CreateObject trong Excel VBA là gì?

Set xmlDocument = New MSXML2.DOMDocument 

hay như thế này:

Set xmlDocument = CreateObject("MSXML2.DOMDocument") 

?

+0

Ngoài ra, hãy xem [câu trả lời cho câu hỏi ràng buộc sớm/muộn] (http://stackoverflow.com/questions/10580/what-are-early-and-late-binding#10581). –

Trả lời

10

Chừng nào biến được không gõ như đối tượng

Dim xmlDocument as MSXML2.DOMDocument 
Set xmlDocument = CreateObject("MSXML2.DOMDocument") 

cũng giống như

Dim xmlDocument as MSXML2.DOMDocument 
Set xmlDocument = New MSXML2.DOMDocument 

đều sử dụng đầu ràng buộc. Trong khi đó,

Dim xmlDocument as Object 
Set xmlDocument = CreateObject("MSXML2.DOMDocument") 

sử dụng kết buộc muộn. Xem MSDN here.

Khi bạn đang tạo đối tượng được cung cấp bên ngoài, không có sự khác biệt giữa toán tử Mới, khai báo biến Mới, và sử dụng hàm CreateObject.

Mới yêu cầu thư viện kiểu được tham chiếu. Trong khi CreateObject sử dụng registry.

CreateObject có thể được sử dụng để tạo đối tượng trên máy từ xa.

2

Đối với trường hợp trước, bạn cần có tham chiếu đến thư viện kiểu trong ứng dụng của mình. Nó thường sẽ sử dụng ràng buộc sớm (giả sử bạn khai báo biến của bạn là MSXML2.DOMDocument chứ không phải là Object, mà bạn có thể sẽ), vì vậy nói chung sẽ nhanh hơn và sẽ cung cấp cho bạn hỗ trợ intellisense.

Sau này có thể được sử dụng để tạo một thể hiện của một đối tượng bằng cách sử dụng ProgId mà không cần thư viện kiểu. Thông thường bạn sẽ sử dụng cuối ràng buộc.

Thông thường, tốt hơn nên sử dụng "Mới" nếu bạn có thư viện kiểu và hưởng lợi từ việc ràng buộc sớm.

+0

Joe đã đề cập đến một tính năng quan trọng của VB/VBA mà tôi muốn làm nổi bật. Sự vắng mặt có thể là một nguồn gây nhầm lẫn cho các lập trình viên VB/VBA ít kinh nghiệm hơn: Intellisense. FYI- đó là danh sách thả xuống hỗ trợ tự động hoàn thành mã khi được nhập. Có một tính năng liên quan có nguồn gốc của nó trong cùng một hệ thống: Object Explorer. FYI- đó là trên menu xem và trong VBA được truy cập bằng tổ hợp phím F2. Không có ràng buộc sớm (sử dụng từ khóa 'Mới'), Intellisense cũng như Object Explorer sẽ không hoạt động. – spinjector

3

Bạn luôn nên sử dụng

Set xmlDocument = CreateObject("MSXML2.DOMDocument")

Đây là không liên quan đến vấn đề ràng buộc. Chỉ khai báo xác định ràng buộc.

Chỉ sử dụng CreateObject độc quyền sẽ giúp chuyển đổi giữa ràng buộc sớm và trễ dễ dàng hơn vì bạn chỉ phải thay đổi dòng khai báo.

Nói cách khác, nếu bạn viết này:

Dim xmlDocument As MSXML2.DOMDocument
Set xmlDocument = CreateObject("MSXML2.DOMDocument")

Sau đó, để chuyển sang cuối ràng buộc, bạn chỉ cần thay đổi dòng đầu tiên (để As Object).

Nếu bạn viết nó như thế này:

Dim xmlDocument As MSXML2.DOMDocument
Set xmlDocument = New MSXML2.DOMDocument

sau đó khi bạn chuyển sang cuối ràng buộc, bạn phải thay đổi cả hai dòng.

Các vấn đề liên quan