【发布时间】:2022-01-14 09:23:08
【问题描述】:
我目前正在编写一个代码,将数组作为一个名为“os”的字符串循环。
首先,我通过一系列If 语句过滤此工作簿中的所有数据。
然后,如果第二个循环到达我的字符串的第一个索引,即“CM”,我想将另一个工作簿中的数据复制到这个工作簿中。
然后下一个循环开始,但是这次如果达到我的字符串的第二个索引,即“PM”,我想将另一个工作簿中的其他数据复制到这个工作簿中。
您将在下面找到与我的问题相对应的代码部分。此代码不适用于我尝试索引字符串的部分,即os(k) = 1 和os(k) = 2。
Dim LastRow As Long
Dim j As Long
Dim k As Long
Dim os(1 To 2) As String
os(1) = "CM"
os(2) = "PM"
With ThisWorkbook.Worksheets("Brondata NB")
LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
End With
For j = 2 To LastRow
For k = 1 To 2
If ThisWorkbook.Worksheets("Brondata NB").Cells(j, 1).Value = "Q1" Then
If ThisWorkbook.Worksheets("Brondata NB").Cells(j, 2).Value = "Harmsenbrug" Then
If ThisWorkbook.Worksheets("Brondata NB").Cells(j, 4).Value = "0-20%" Then
If ThisWorkbook.Worksheets("Brondata NB").Cells(j, 3).Value = os(k) = 1 Then
OpenBook.Sheets("Resultaten").Range("C19:D23").Copy
ThisWorkbook.Worksheets("Brondata NB").Cells(j, 5).PasteSpecial xlPasteValues
End If
If ThisWorkbook.Worksheets("Brondata NB").Cells(j, 3).Value = os(k) = 2 Then
OpenBook.Sheets("Resultaten").Range("F19:G23").Copy
ThisWorkbook.Worksheets("Brondata NB").Cells(j, 5).PasteSpecial xlPasteValues
End If
End If
End If
End If
Next k
Next j
【问题讨论】:
-
Cells(j, 3).Value = os(k) = 1应该是什么意思? -
由于 GSerg 暗示 (os(k) = 1) 始终为 False,因此除非 .Value 为 False,否则 J 循环中的每个“If”都将为假。你也不需要 k = 1 到 2 循环。所以注释 k 循环,删除 =1 和 =2,而不是 2 内部 If's do If... = os(1) Then ... ElseIf ... = os(2) Then...End如果
-
感谢@PeterT 的解释和解决方案。在您的帮助下,我能够解决问题。
-
另外一个问题。以下调整后的代码行也可以吗? @PeterT '如果 ThisWorkbook.Worksheets("Brondata NB").Cells(j, 2).Value = brug(k) And FileToOpen(i) Like "brug(k)" Then'。
-
我几乎可以肯定您想从 Like brug(k) 中删除这些引号,但除此之外,不确定它是否会在没有上下文的情况下起作用。
标签: arrays excel vba string for-loop