2017-01-09 2 views
1

Я работаю над кодом «сравнить строки», и я застрял в куске ifs, ниже - раздел кода, который дает мне ошибки (полный код длиной в сто строк, если я пытаюсь запустить его, он дает мне сообщение об ошибке «block if without end if», cola сохраняет критерии поиска, а colc (2) хранит целые числа с позициями в строке, мой вопрос - что я могу делать с этими линиями?«Заблокируйте, если без конца, если» VBA, excel

dim cola(1 to 3) as string 
dim colc(1 to 16) as string 
dim rck(1 to 3) as string 

If cola(1) = "Rit" Or cola(1) = "RIT" Or cola(1) = "rit" Then 
    colc(4) = colc(2) 
    rck(1) = "Y" 
If cola(2) = "Rit" Or cola(2) = "RIT" Or cola(2) = "rit" Then 
    colc(6) = colc(2) 
    rck(2) = "Y" 
If cola(3) = "Rit" Or cola(3) = "RIT" Or cola(3) = "rit" Then 
    colc(8) = colc(2) 
    rck(3) = "Y" 
End If 

ответ

1

В VBA, каждый If блока должен ассоциированный End If.

В вашем случае, вы сравниваете несколько сценариев внутри одного-, и вы захотите использовать ElseIf, чтобы выполнить это. Я добавил пример кода ниже, чтобы продемонстрировать, как это отформатировано.

Вот некоторые дополнительные документы о том, как реализовать IF-THEN-ELSE заявления в VBA: https://www.techonthenet.com/excel/formulas/if_then.php

dim cola(1 to 3) as string 
dim colc(1 to 16) as string 
dim rck(1 to 3) as string 

If cola(1) = "Rit" Or cola(1) = "RIT" Or cola(1) = "rit" Then 
    colc(4) = colc(2) 
    rck(1) = "Y" 
ElseIf cola(2) = "Rit" Or cola(2) = "RIT" Or cola(2) = "rit" Then 
    colc(6) = colc(2) 
    rck(2) = "Y" 
ElseIf cola(3) = "Rit" Or cola(3) = "RIT" Or cola(3) = "rit" Then 
    colc(8) = colc(2) 
    rck(3) = "Y" 
End If 
3

Вы пропали без вести два End If заявления:

dim cola(1 to 3) as string 
dim colc(1 to 16) as string 
dim rck(1 to 3) as string 

If cola(1) = "Rit" Or cola(1) = "RIT" Or cola(1) = "rit" Then 
    colc(4) = colc(2) 
    rck(1) = "Y" 
End If 
If cola(2) = "Rit" Or cola(2) = "RIT" Or cola(2) = "rit" Then 
    colc(6) = colc(2) 
    rck(2) = "Y" 
End If 
If cola(3) = "Rit" Or cola(3) = "RIT" Or cola(3) = "rit" Then 
    colc(8) = colc(2) 
    rck(3) = "Y" 
End If 

или, возможно, вы хотели второго и третьего If для оценки только в том случае, если первый из них был False, и в этом случае вам понадобится

dim cola(1 to 3) as string 
dim colc(1 to 16) as string 
dim rck(1 to 3) as string 

If cola(1) = "Rit" Or cola(1) = "RIT" Or cola(1) = "rit" Then 
    colc(4) = colc(2) 
    rck(1) = "Y" 
ElseIf cola(2) = "Rit" Or cola(2) = "RIT" Or cola(2) = "rit" Then 
    colc(6) = colc(2) 
    rck(2) = "Y" 
ElseIf cola(3) = "Rit" Or cola(3) = "RIT" Or cola(3) = "rit" Then 
    colc(8) = colc(2) 
    rck(3) = "Y" 
End If 

И вы могли бы упростить код, говоря что-то вроде

If UCase(cola(1)) = "RIT" Then 

как преобразует значение, которое вы ищете на то, чтобы быть в верхнем регистре, а затем вам нужно только проверить это против прописной версии «rit».

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