【发布时间】:2015-11-12 03:46:09
【问题描述】:
我正在为使用 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的内容:cpearson.com/excel/DebuggingVBA.aspx -
谢谢。我正在使用它,但我现在遇到的问题是我正在读取的文本文件中有超过 8,000 行;因此,我不会逐行解析代码。我没有从现有线程中找到有关如何在代码失败时确定监视表达式的值的帮助。此时,我需要确定代码失败的集合的价值。请告知我如何使用调试来找到它。谢谢。
-
当代码在错误中中断时,点击“调试”按钮,进入 VB 编辑器,在立即窗口中输入:
? UBound(SplitData)并按回车键。你看到了什么?