我正在爲使用VBA爲Excel創建的程序苦苦掙扎。該程序的最終目的是基於用戶通過用戶列表框選擇其中一個元素來將文本文件的特定元素讀入Excel電子表格。請參閱我的代碼,下面是我的程序部分有關1)使用作業集編號填充列表框以及2)從非常大的逗號分隔文本文件填充包含所需數據的特定數組:從分割數組中填充數組的不一致性
Private Sub UserForm_Initialize()
'Declare variables
Const CMMData As String = "\\ATSTORE01\CMMData\21064D\21064D-OP400.dat"
Dim strSN() As String
Dim strSet() As String
Dim strFF() As String
Dim strVHCC() As String
Dim strVHCCMID() As String
Dim strVHCVMID() As String
Dim strVHCV() As String
Dim strHWCC() As String
Dim strHWCCMID() As String
Dim strHWCVMID() As String
Dim strHWCV() As String
Dim LineData As String
Dim SplitData() As String
Dim LineIter As Long
'Populate Set Number Listbox
With New Scripting.FileSystemObject
With .OpenTextFile(CMMData, ForReading)
Do Until .AtEndOfStream
LineData = .ReadLine
SplitData = Split(LineData, ",", 154, vbTextCompare)
'Extracting Serial Number
ReDim Preserve strSN(0 To LineIter)
strSN(UBound(strSN)) = SplitData(0)
'Extracting Set Number
ReDim Preserve strSet(0 To LineIter)
strSet(UBound(strSet)) = SplitData(1)
'Extracting Final Flow Area
ReDim Preserve strFF(0 To LineIter)
strFF(UBound(strFF)) = SplitData(14)
'Extracting /V/ To Hook CC
ReDim Preserve strVHCC(0 To LineIter)
strVHCC(UBound(strVHCC)) = SplitData(31)
Set_Select.AddItem SplitData(1)
LineIter = LineIter + 1
Loop
.Close
End With
End With
For LineIter = LBound(strFF) To UBound(strFF)
MsgBox strFF(LineIter)
Next LineIter
End Sub
其中我有麻煩上述代碼的面積如下:
'Extracting /V/ To Hook CC
ReDim Preserve strVHCC(0 To LineIter)
strVHCC(UBound(strVHCC)) = SplitData(31)
代碼填充分割陣列最多(30)。對於數組(31)及以上,我得到一個「下標超出範圍」的錯誤。我花了相當多的時間來確定錯誤但不成功。我對陣列的工作也很新,所以過去一週我一直在教自己很多東西,但還有很多東西需要學習。
我非常感謝幫助。謝謝。
當UBound(SplitData)失敗時,它的價值是什麼?看起來你的輸入數組可能比你想象的要小。 –
如果您在引發錯誤的行上放置了斷點,則可以使用「監視」窗口檢查「SplitData」的內容:http://www.cpearson.com/excel/DebuggingVBA.aspx –
謝謝。我使用這個,但現在我遇到的問題是,我正在閱讀的文本文件中有超過8000行;因此,我不打算逐行解析代碼。我沒有從現有的線程中找到有關如何在代碼失敗時確定監視表達式的值的幫助。在這一點上,我需要確定代碼失敗的集合。請告訴我如何使用調試來找到它。謝謝。 – jlynn303