Đây là một trong những điều tôi không hiểu.Lỗi Excel khi nhập dấu ngoặc đơn mở
Với mô-đun lớp này (rút gọn đến mức tối thiểu cần thiết để tái tạo vụ tai nạn):
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
END
Attribute VB_Name = "TestCrashClass"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Public Function Init() As TestCrashClass
Attribute Init.VB_UserMemId = 0
Dim tcc As New TestCrashClass
Set Init = tcc
End Function
Public Property Get Data() As String
Data = "test data"
End Property
bất cứ ai có thể cho tôi biết tại sao Excel hoàn toàn craps ra khi tôi gõ vào mã này:
Sub MakeExcelCrash()
With TestCrashClass(
Tại thời điểm này, tôi này nhắn đáng yêu:
Ngay cả khi tôi nhập một thủ tục đầy đủ mà không có dấu ngoặc đơn vi phạm và sau đó cố gắng thêm chúng sau này, tôi nhận được cùng một vụ tai nạn.
Cách duy nhất tôi có thể làm cho Excel không gặp sự cố là sao chép/dán một tập hợp ()
từ một nơi khác sang dòng mã này.
Sub MakeExcelCrash()
With TestCrashClass()
Debug.Print .Data
End With
End Sub
Nếu phương pháp Init()
có tham số — ngay cả một tùy chọn — nó sẽ không bị lỗi khi mở dấu ngoặc đơn.
Tôi tò mò hơn về lý do tại sao điều này xảy ra hơn các cách xung quanh nó; nó không thực sự xuất hiện thường xuyên trong mã của tôi và khi nào tôi có thể sửa nó bằng cách thay đổi cách tiếp cận, nhưng tôi thực sự thất vọng vì tôi không biết nguyên nhân gây ra những sự cố này. Vì vậy, có lẽ ai đó biết nhiều hơn về công việc bên trong của VBA có thể giải thích cho tôi?
Excel có cung cấp một số loại tự động hoàn thành khi bạn nhập không? – Carcigenicate
Tôi đoán rằng việc tạo ra một phương thức tạo ra một thể hiện của lớp của bạn, phương thức mặc định là tạo ra một vòng lặp vô hạn. Có thể có một số đánh giá về mã của lớp đang diễn ra khi bạn gõ dòng đó ... Mục đích của phương pháp đó là gì? –
Tôi nghĩ vì bạn đã tạo thành 'Init' thành viên mặc định, VBE sẽ cố gắng cung cấp cho bạn một trình đơn thả xuống Intellisense dựa vào đó - ngay sau khi nó cố gắng thực hiện nó vào vòng lặp vô hạn (vì giá trị trả về từ' Init' là một thể hiện khác của cùng một lớp, cũng với cùng thành viên mặc định đó, v.v ...) và Excel bị treo. –