2015-06-22 2 views
0

Я пишу программу VBA, которая позволит мне провести через набор данных Excel и вытащить соответствующую информацию, которая затем скопирована на другой лист.Подчеркивание слова excel

Я продолжаю пытаться сделать так, чтобы искомое слово выделялось желтым цветом, однако моя программа постоянно выбрасывает «Скомпилировать ошибку - ожидаемый массив на Ubound».

Option Compare Text 

Public Sub Textchecker() 
' 
' Textchecker 
' 
' Keyboard Shortcut: Ctrl+h 
' 
Dim Continue As Long 
Dim findWhat As String 
Dim LastLine As Long 
Dim toCopy As Boolean 
Dim cell As Range 
Dim item As Long 
Dim j As Long 
Dim sheetIndex As Long 
Dim inclusion As String 

sheetIndex = 2 

Continue = vbYes 
    Do While Continue = vbYes 

     findWhat = CStr(InputBox("What word would you like to search for today?")) 
     inclusion = CStr(InputBox("Do you have any inclusions? Separate words with commas")) 
     LastLine = ActiveSheet.UsedRange.Rows.Count 
     If findWhat = "" Then Exit Sub 
     j = 1 
    For item = 1 To LastLine 
     If UBound(inclusion) >= 0 Then 
      For Each cell In Range("BY1").Offset(item - 1, 0) Then 
       For Each item In inclusion 
        If InStr(cell.Text, findWhat) <> 0 And InStr(cell.Text, inclusion) <> 0 Then 
         findWhat.Interior.Color = 6 
         toCopy = True 
     Else 
      For Each cell In Range("BY1").Offset(item - 1, 0) Then 
       If InStr(cell.Text, findWhat) <> 0 Then 
        findWhat.Interior.Color = 6 
        toCopy = True 
      End If 
     Next item 
     End If 
     Next 
     If toCopy = True Then 
      Sheets(sheetIndex).Name = UCase(findWhat) + "+" + LCase(inclusion) 
      Rows(item).Copy Destination:=Sheets(sheetIndex).Rows(j) 
      j = j + 1 
     End If 
     toCopy = False 
    Next item 
    sheetIndex = sheetIndex + 1 
    Continue = MsgBox(((j - 1) & " results were copied, do you have more keywords to enter?"), vbYesNo + vbQuestion) 
Loop 
End Sub 

Что я здесь делаю неправильно?

+0

вызывает ошибки? – hoijui

+0

И где это ошибка? Я считаю, что, кстати, ваш код не был вставлен должным образом вокруг середины. У вас есть Next и End If на одной строке. –

+0

Да, он не вставлялся правильно. Я обновил одну из ошибок, но я получаю несколько. Я пошел вперед и повторил это. – wesree

ответ

1

В коде inclusion объявлен как String переменной, и содержит String, хотя и String разделенных запятыми. Функция Ubound работает с массивами.

Исправить: преобразовать строку в массив с помощью функции Split. См. Приведенный ниже пример для быстрой помощи и сообщите нам, если вам нужно больше деталей.

Sub Tests() 
    Dim inclusion() As String 

    inclusion = Split("One, Two, Three", ",") 

    MsgBox (UBound(inclusion)) 
End Sub 
+0

Спасибо! Я ценю вашу помощь, моя программа теперь бросает ошибку «Ошибка компиляции - для каждого элемента управления vaiable на массивах должен быть вариант» – wesree

+0

@wesree Я бы сказал, что часть проблемы может заключаться в том, что вы используете 'item' переменная в двух отдельных экземплярах внутри вложенных циклов. Вы используете 'For item = 1 ...', а также 'Для каждого элемента в include ...' – user3561813

0

Чтобы ответить на ваш последний комментарий.

Переменная для каждого должна быть типа Object или Variant.

Чтобы изменить свой «элемент» в варианте, замените «Dim item As Long» на «Dim item As Variant» или даже «Dim item» в качестве переменной, объявленной без типа, является вариантом.

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