【发布时间】:2017-12-26 23:49:14
【问题描述】:
****更新已解决*****感谢大家帮助我得出这个结论!******
因此,如下所示,我的代码中的所有内容都按预期进行,除了一行。
If c = myArray(x) Then
这个脚本读入一个我没有提到的文件。它从文件中读取“A”列并将每一行放入myArray。我知道该数组有效,因为当我将它循环到对话框中时,它会正确打印出数据。循环功能正确搜索每一行,如果它等于'c',它会抓取我的数据并将其放入另一张表中。我知道这很有效,因为当我输入数据时,它会按预期抓取它。我的麻烦是每当我尝试添加myArray(x) 的元素以将其与整数“c”进行比较时。它拒绝查看 x 整数以正确循环使用整数“x”的myArray()。
有人可以向我解释为什么myArray(x) 无法正常循环或帮助我解决问题。我不是资深的 VBA 程序员,但我编写了相当一部分功能正常的代码。我只是觉得我错过了一个小细节,忽略了一些简单的事情。任何帮助都将不胜感激,这是出于工作目的,您将帮助他人而不仅仅是我自己。
Sub myArray()
Dim FSO As Object, MyFile As Object
Dim FileName As String, Arr As Variant
Dim c As Range
Dim j As Integer, i as Integer
Dim Source As Worksheet, Target As Worksheet
FileName = "" '<--This is left intentionally blank.
Set FSO = CreateObject("Scripting.FileSystemObject")
Set MyFile = FSO.OpenTextFile(FileName, 1)
Arr = Split(MyFile.ReadAll, vbNewLine)
Set Source = ActiveWorkbook.Sheets("Sheet1")
Set Target = ActiveWorkbook.Sheets("Sheet2")
i = 0
j = 1
For i = LBound(Arr) To UBound(Arr)
For Each c In Source.Range("B:D")
If c = Arr(i) Then
Source.rows(c.Row).Copy Target.rows(j)
j = j + 1
End If
Next c
Next i
End Sub
【问题讨论】:
-
发生错误时x的值是多少??
-
认为您应该在
If c = myArray(x) Then行添加检查以评估它是否不超过数组的上限。类似If c = myArray(x) and x <= ubound(myArray) Then。 -
X = 0 应该是这样。 If c = myArray(x) and x
-
我找到了解决方案,并在上面发布了反映我真正想要的代码的代码。我需要嵌套的 for 循环。感谢大家帮助我得出这个结论。感谢@Chris Mack 帮助我进行 ubounds 和字符串转换。我现在对 vba 编程有了更多的了解。