2016-10-19 4 views
1

У меня есть этот кусок кода, который работает просто отлично:Сравнить ячейки в VBA для условного форматирования

Function sshProblem(rng As Range) As Boolean 
    Dim portStatus As String 
    portStatus = rng.Value 

    Dim deviceType As String 
    deviceType = Cells(Application.Caller.Row, 3).Value 

    Dim sshDevices As Variant 
    sshDevices = Array("linux", "vmw", "docker", "unix") 

    If StrComp(portStatus, "No") = 0 Then 
     sshProblem = Not IsError(Application.Match(deviceType, sshDevices, 0)) 
    End If 
End Function 

Теперь код должен масштабироваться, и вместо того, чтобы хранить значения в массиве sshDevices, эти значения должны находиться в колонке в другом листе, так что я пытался заменить

sshDevices = Array("linux", "vmw", "docker", "unix") 

с

sshDevices = Worksheets("Config sheet").Range("I2:I11").Value 

на это указывает на то, что условное форматирование перестало работать. Как я могу получить значения из диапазона ячеек и вставить их в переменную для сравнения?

ответ

0

Я не 100% уверен, что вы пытаетесь достичь с помощью кода, но ответить на ваш вопрос

Как я могу забрать значения из диапазона ячеек и вставить их в переменную для сравнения?

вы можете использовать For Each петлю, что-то похожее на:

dim myCell as range, myRange as range 
set myRange = Worksheets("Config sheet").Range("I2:I11") 

For Each myCell in myRange 
    sshDevice = myCell.Value 
    'do stuff you need with sshDevice 
Next myCell 

Если вы хотите сохранить массив sshDevices, вы можете сделать это, и использовать цикл For Each для добавления каждого элемента в отдельности.

dim counter as int 
counter = 0 
For Each myCell in myRange 
    sshDevice(counter) = myCell.Value 
    counter = counter + 1 
next myCell 
0

использование

sshDevices = Application.Transpose(Worksheets("Config sheet").Range("I2:I11").Value) 

просто быть информированным, что таким образом вы будете иметь 1 на основе массива независимо от Option Base который, однако, влияет на возвращенном массиве формы Array() функции

+0

Ни внушения это трудящиеся. Условное форматирование не происходит. Не уверен, что массив импортирован правильно или если фрагмент кода, используемый для сравнения, совместим с типами массивов Im, использующими –

+0

. Ну, ваше сообщение было о том, как хранить значения в массиве 'sshDevices' из диапазона, а не жестко их кодировать с функцией 'Array()', жалуясь на вашу попытку ('sshDevices = Worksheets (« Config sheet »). Range (« I2: I11 »). Value') не работает, так как он остановил некоторое условное форматирование, размещать любую информацию о. Мой ответ сказал вам, почему ваш способ заполнения диапазона массивов не будет работать как «хороший» и даст вам правильный синтаксис, чтобы массив возвращался из «вертикального» диапазона, работающего как ваш оригинальный «массив» («linux», «vmw», «docker», «unix»). Думаю, я ответил на ваш вопрос – user3598756

Смежные вопросы