【发布时间】:2020-02-26 01:15:59
【问题描述】:
希望我能找到一些帮助。我从 2 列(主机名、IP)中提取来自 Excel 的信息。重要性声明是
Dim HWSWArray() As Variant
Dim v As Variant.
我的 HWSWArray 已加载,例如我有 HWSWArray(0)(0) -> 主机名和 HWSWArray(0)(1) -> IP
我想遍历这些并与另一个字符串进行外部比较,所以我的循环是这样写的
For Each v In HWSWArray
If v(0) = POAMHost Then
DoThings
ElseIf v(1) = POAMHost Then
Do Things
End If
Next
我在评估第一个 if 语句后立即得到类型不匹配。我很困惑,因为它们都是变体 v 和 HWSWArray 并且不应该 v 作为变体匹配它匹配的任何类型?
也许我只见树木不见森林?如有必要,我可以发布完整的代码,但需要编辑一些内容。
为了添加一些我可以轻松共享的代码的更多信息,我过去做过类似的事情,但我不知道有什么区别。如果我不能让它工作,我会考虑实施你对 For i 循环的建议,但我想看看为什么它不能以目前的能力工作。
'Load BArray
Do While Counter <> B1930Rows + 1
IPCell = Assets.Range("X" & Counter)
hostCell = Assets.Range("W" & Counter)
If IsEmpty(Assets.Range("W" & Counter)) = True And IsEmpty(Assets.Range("X" & Counter)) = True Then
Counter = Counter + 1
ElseIf IsEmpty(Assets.Range("W" & Counter)) = True And IsEmpty(Assets.Range("X" & Counter)) = False Then
BArray(i) = Array("Null", UCase(IPCell))
i = i + 1
Counter = Counter + 1
ElseIf IsEmpty(Assets.Range("W" & Counter)) = False And IsEmpty(Assets.Range("X" & Counter)) = True Then
BArray(i) = Array(UCase(hostCell), "Null")
i = i + 1
Counter = Counter + 1
ElseIf IsEmpty(Assets.Range("W" & Counter)) = False And IsEmpty(Assets.Range("X" & Counter)) = False Then
BArray(i) = Array(UCase(IPCell), UCase(hostCell))
i = i + 1
Counter = Counter + 1
Else
Counter = Counter + 1
End If
Loop
'MsgBox ("Here")
'Setting up script to handle the POAM Analysis Portion
Counter = 2
Dim statusCell As String
'Dim hostCell As String
Do While Counter <> POAMRows + 1
statusCell = POAM.Range("M" & Counter)
hostCell = POAM.Range("AE" & Counter)
If statusCell = "Ongoing" Then
For Each v In BArray
If v(0) = hostCell Then
Output.Range("A" & SummaryCounter) = POAM.Range("A" & Counter)
Output.Range("B" & SummaryCounter) = POAM.Range("C" & Counter)
Output.Range("C" & SummaryCounter) = POAM.Range("D" & Counter)
Output.Range("D" & SummaryCounter) = POAM.Range("E" & Counter)
Output.Range("E" & SummaryCounter) = POAM.Range("F" & Counter)
Output.Range("F" & SummaryCounter) = POAM.Range("G" & Counter)
Output.Range("G" & SummaryCounter) = POAM.Range("R" & Counter)
Output.Range("H" & SummaryCounter) = POAM.Range("V" & Counter)
Output.Range("I" & SummaryCounter) = POAM.Range("AB" & Counter)
Output.Range("J" & SummaryCounter) = POAM.Range("AE" & Counter)
SummaryCounter = SummaryCounter + 1
ElseIf v(1) = hostCell Then
Output.Range("A" & SummaryCounter) = POAM.Range("A" & Counter)
Output.Range("B" & SummaryCounter) = POAM.Range("C" & Counter)
Output.Range("C" & SummaryCounter) = POAM.Range("D" & Counter)
Output.Range("D" & SummaryCounter) = POAM.Range("E" & Counter)
Output.Range("E" & SummaryCounter) = POAM.Range("F" & Counter)
Output.Range("F" & SummaryCounter) = POAM.Range("G" & Counter)
Output.Range("G" & SummaryCounter) = POAM.Range("R" & Counter)
Output.Range("H" & SummaryCounter) = POAM.Range("V" & Counter)
Output.Range("I" & SummaryCounter) = POAM.Range("AB" & Counter)
Output.Range("J" & SummaryCounter) = POAM.Range("AE" & Counter)
SummaryCounter = SummaryCounter + 1
End If
Next
Counter = Counter + 1
Else
Counter = Counter + 1
End If
Loop
【问题讨论】:
-
请注意,“Dim HWSWArray() As Variant”会创建一个变体数组,而不是可以包含数组的变体。您可能只需要 'Dim HWSWArray As Variant'
标签: arrays excel vba for-loop foreach