Giả sử bạn có mã này trong một module gọi là Module1
:Phạm vi có bị hỏng trong VBA không?
Option Explicit
Private Type TSomething
Foo As Integer
Bar As Integer
End Type
Public Something As TSomething
Trong tương đương C# mã nếu bạn thực hiện Something
lĩnh vực public
, mã sẽ không còn biên dịch, vì không phù hợp khả năng tiếp cận - loại của trường ít truy cập hơn chính trường đó. Điều đó có ý nghĩa.
Tuy nhiên trong VBA bạn có thể có mã này trong Module2
:
Sub DoSomething()
Module1.Something.Bar = 42
Debug.Print Module1.Something.Bar
End Sub
Và bạn nhận được IntelliSense trong khi gõ nó, và nó biên dịch, và nó chạy, và nó kết quả đầu ra 42
.
Tại sao? Làm thế nào nó thậm chí làm việc, từ một quan điểm COM? Nó là một phần của thông số ngôn ngữ?
Trong module2, bạn có thể xác định một biến kiểu 'Module1.TSomething' và gán cho 'Module1.Something' ? –
@SimonForsberg Lỗi biên dịch (như mong đợi) - "Loại do người dùng định nghĩa không được xác định" ... nói cách khác, loại có thể nhìn thấy * để sử dụng *, nhưng không * để khai báo * ... –
Âm thanh exaclty cách Java hoạt động, không phải là câu hỏi này là về Java, nhưng dù sao đi nữa. Nó có ý nghĩa với tôi, nhưng sau đó một lần nữa ... Tôi là một anh chàng Java. –