Возможный дубликат:
Как искать строку в массиве MS Access VBA
В настоящее время я работаю над макросом Excel, и я не мог найти способ сделать это
if array.contains(mystring)
Я написал следующее, и он дает мне сообщение "Invaild Qualifier" и выделяет Mainfram
сразу после If
Dim Mainfram(4) As String
Mainfram(0) = "apple"
Mainfram(1) = "pear"
Mainfram(2) = "orange"
Mainfram(3) = "fruit"
For Each cel In Selection
If Mainfram.Contains(cel.Text) Then
Row(cel.Row).Style = "Accent1"
End If
Next cel
Выбор - это столбец
Кто-нибудь может помочь?
Привет, JP Я попробовал ваше предложение, и он сказал, что требуется объект. И выделите Если IsInArray (cell.Text, Mainfram) Затем Heres мой полный код
Sub changeRowColor()
Columns("B:B").Select
Dim cel As Excel.Range
Dim Mainfram(4) As String
Mainfram(0) = "apple"
Mainfram(1) = "pear"
Mainfram(2) = "orange"
Mainfram(3) = "Banana"
For Each cel In Selection
If IsInArray(cell.Value, Mainfram) Then
Rows(cel.Row).Style = "Accent1"
End If
Next cel
End Sub
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
Nevermind, я обнаружил, что эта глупая ошибка... В любом случае, спасибо
Используя код из моего ответа на очень похожий вопрос:
Sub DoSomething()
Dim Mainfram(4) As String
Dim cell As Excel.Range
Mainfram(0) = "apple"
Mainfram(1) = "pear"
Mainfram(2) = "orange"
Mainfram(3) = "fruit"
For Each cell In Selection
If IsInArray(cell.Value, MainFram) Then
Row(cell.Row).Style = "Accent1"
End If
Next cell
End Sub
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
Еще один простой способ: JOIN
и INSTR
Sub Sample()
Dim Mainfram(4) As String, strg As String
Dim cel As Range
Dim Delim As String
Delim = "#"
Mainfram(0) = "apple"
Mainfram(1) = "pear"
Mainfram(2) = "orange"
Mainfram(3) = "fruit"
strg = Join(Mainfram, Delim)
strg = Delim & strg
For Each cel In Selection
If InStr(1, strg, Delim & cel.Value & Delim, vbTextCompare) Then _
Rows(cel.Row).Style = "Accent1"
Next cel
End Sub
#
или любой другой выбранный).
Используйте метод Filter() - http://msdn.microsoft.com/en-us/library/aa164525(v=office.10).aspx
Боюсь, я не думаю, что есть ярлык для этого - если только кто-то напишет обертку linq для VB6!
Вы можете написать функцию, которая делает это, перейдя через массив и проверив каждую запись - я не думаю, что вы будете чище, чем это.
Вот пример статьи, в которой приведены некоторые подробности здесь: http://www.vb6.us/tutorials/searching-arrays-visual-basic-6