Проблема в том, что вы сравниваете массив значений с одним значением. В случае такого небольшого массива вы можете использовать некоторые Application.Methods
. Другой вариант - использовать Range.Find
для фактического Range
объекта. Я продемонстрирую оба ниже:
Приложение. Методы
Sub Test()
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Result")
Dim arr As Variant
With Application
arr = .Transpose(ws.Range("A1:I1").Value)
If .Count(.Match(Array("Voltage", "Time"), arr, 0)) = 2 Then
Call PowerAndTime
End If
End With
End Sub
Что происходит здесь .Match
вернет массив из двух элементов. Он либо вернет значение ошибки в массив, если «напряжение» или «время» не найдены, либо вернет значение цифра c, когда будет найден один из них. Тогда .Count
будет подсчитывать числа c значений в этом возвращенном массиве, и только если счет будет равен 2, это когда оба значения присутствуют в вашем начальном диапазоне.
Примечание: .Match
нужен 1D-массив, поэтому .Transpose
в начале.
Range.Find
Sub Test()
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Result")
Dim rng1 As Range, rng2 As Range
Set rng1 = ws.Range("A1:I1").Find("Voltage", lookat:=xlWhole)
Set rng2 = ws.Range("A1:I1").Find("Time", lookat:=xlWhole)
If Not rng1 Is Nothing And Not rng2 Is Nothing Then
Call PowerAndTime
End If
End Sub
Таким образом, только когда "Voltage" и "Time" найдены как значения xlWhole
в пределах указанного вами диапазона c, он будет продолжать вызывать PowerAndTime
.