所以我一直在尋找stackoverflow,我打了一堵牆。請原諒任何「不良行爲」只需要這個邏輯運行一次。這是我第一次在VBA中使用類(如果我有更多的時間,我只是寫在C#中)VBA Excel試圖存儲一個自定義類的數組
這是我的問題。我有兩個自定義類。 DocName和Doclib
Docname包含我的工作表中每行獲取的各種信息。我正在尋找「職員」名字的獨特性。我無法做一個簡單的搜索,因爲我收到的這個數據庫沒有押韻的名稱存儲的原因。有時候是全名,有時候是中間名,有時候是後面的,有時候是憑證。這令人生氣。
縮寫類如下:
Option Explicit
Public staff As Boolean
Public docID As Long
Public namesCount As Integer
Private names(5) As String
Public CNumber As String
Private fakeCnumber As Long
Public rowIndex As Integer
Public hasCnumber As Boolean
Private rawString As String
Private Sub class_initialize()
namesCount = 0
hasCnumber = False
rowIndex = 1
End Sub
Public Sub resetClass()
docID = 0
rowIndex = 1
resSize = 0
namesCount = 0
End Sub
Public Function match(comp As DocName) As Boolean
Dim goodMatch As Integer
goodMatch = 0
Dim myNames As Integer
Dim compNames As Integer
myNames = 0
compNames = 0
While (nameValid(myNames))
While (comp.nameValid(compNames))
If names(myNames) = comp.getName(compNames) Then
goodMatch = goodMatch + 1
End If
compNames = compNames + 1
Wend
myNames = myNames + 1
Wend
If goodMatch > 1 Then
match = True
Else
match = False
End If
End Function
Public Function nameValid(i As Integer) As Boolean
If i < namesCount Then nameValid = True
If i >= namesCount Then nameValid = False
End Function
Public Property Let savestate(orig As DocName)
Dim x As Integer
x = 0
docID = orig.getdocID
hasCnumber = orig.hasCnumber
If hasCnumber Then CNumber = orig.getCNumber
While orig.nameValid(x)
names(x) = orig.getName(x)
x = x + 1
Wend
End Property
我也有一類 「DocLib」。該類的唯一目標是容納我想要保存的每個DocName實例。我希望它在內存中完成一些後處理,然後再將其轉儲回Excel表。再次縮寫類如下:
Option Explicit
Private res(500) As DocName
Private resSize As Integer
Private Sub class_initialize()
resSize = 0
End Sub
Public Function addDoc(n As DocName)
Dim x As Integer
Dim m As Boolean
m = True
x = 0
While x < resSize & resSize > 0
If res(x).match(n) Then
res(x).addOrder
If res(x).hasCnumber = False & n.hasCnumber = True Then
res(x).setCNumber = n.getCNumber
End If
m = False
End If
Wend
If Not m Or resSize = 0 Then
res(resSize) = New DocName
res(resSize).savestate = n 'This is where it breaks *****
'res(resSize) = n
resSize = resSize + 1
End If
End Function
當我運行這個我得到錯誤91.對象變量或塊變量未設置。我在上面「Res(resSize).savestate = n」上面的行得到了這個問題。我嘗試了一下簡單的賦值,但是這給了我相同的錯誤。所以我創造了沒有變化的豐富功能。我也嘗試爲每個位置(崩潰前的行)分配一個新的文檔。我最初沒有這樣做,並且有同樣的錯誤。
任何想法?提前致謝。我相信這是一個簡單的修復。我只需要這個血腥的代碼在測試集上工作一次,然後再次在20k集上工作,我再也不會使用它了。
- 我試圖在開始時將索引從0改爲1,但沒有工作。當我通過調試器進行跟蹤時,它會在「new」語句之後給docname的class_initialize函數結尾處提供該錯誤。 docname類可以在我需要的其他地方工作。我嘗試了一個簡單的測試,我手動給它的行號,它的工作。一旦我嘗試自己儲存它,它就破裂了。
謝謝你們! 〜乍得
你說你會得到一個錯誤「當我運行THI ......」當你跑什麼?我只看到幾個類定義...你實例化它們的代碼在哪裏?另外,第二個類中的While循環缺少用於管理x的代碼。 –
我注意到你正在使用'&'在哪裏你應該使用'和'... –