2015-01-06 3 views
0

Мне нужно извлечь значения из определенного столбца за строкой из TAB2, а затем выполнить поиск этого значения в трех разных столбцах и еще нескольких методах в TAB1. Мне нужно подсчитать на основе указанных ограничений и автозаполнения 4 столбца рядом с соответствующим значением в TAB2.Ошибка с инструкцией ElseIf

У меня есть следующий код, где я получаю значение при нажатии на кнопку, а затем выполнить операцию, поиск и рассчитывать исходя из условия, указанного .:

Option Compare Text 
Sub SO() 
Dim cCount As Long, ciyr1 As Long, ciyr2 As Long, csyr2 As Long 
Dim i As Long, inputString As String, group As String 
Dim yr1 As String, yr2 As String 
Dim inc As String, sr As String 
inputString = InputBox("Enter Application Name:", "Input Box Text") 
group = "gbl cecc sustainment" 
yr1 = "2013/**" 
yr2 = "2014/**" 
inc = "Incident" 
sr = "Request" 
cCount = 0 
ciyr1 = 0 
ciyr2 = 0 
csyr1 = 0 
csyr2 = 0 
ThisWorkbook.Activate 
Set ws = Worksheets("extract") 
With ws 
For i = 2 To 15505 
If InStr(Cells(i, 1).Value, group) > 0 And _ 
    InStr(Cells(i, 2).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 10).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 11).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 3).Value, inc) > 0 And _ 
    InStr(Cells(i, 14).Value, yr1) > 0 Then ciyr1 = ciyr1 + 1 'to check if value at cells(i,14) is anything that starts with "2013". (the value being present are 2013/01, 2013/02, etc..) 
    ElseIf InStr(Cells(i, 1).Value, group) > 0 And _ 'I get a error with a message: else without If 
    InStr(Cells(i, 2).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 10).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 11).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 3).Value, inc) > 0 And _ 
    InStr(Cells(i, 14).Value, yr2) > 0 Then ciyr2 = ciyr2 + 1 
    ElseIf InStr(Cells(i, 1).Value, group) > 0 And _ 
    InStr(Cells(i, 2).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 10).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 11).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 3).Value, sr) > 0 And _ 
    InStr(Cells(i, 14).Value, yr1) > 0 Then csyr1 = csyr1 + 1 
    ElseIf InStr(Cells(i, 1).Value, group) > 0 And _ 
    InStr(Cells(i, 2).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 10).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 11).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 3).Value, sr) > 0 And _ 
    InStr(Cells(i, 14).Value, yr2) > 0 Then csyr2 = csyr2 + 1 
    Else: 
    MsgBox "No matches found!!" 
    End If 
    Next i 
End With 

If ciyr1 < 0 Or _ 
ciyr2 < 0 Or _ 
csyr1 < 0 Or _ 
csyr2 < 0 Then 

MsgBox "Number of matches for Inc 2013" & inputString & ciyr1 
MsgBox "Number of matches for Inc 2014" & inputString & ciyr2 
MsgBox "Number of matches for SR 2013" & inputString & csyr1 
MsgBox "Number of matches for SR 2014" & inputString & csyr2 

End If 
End Sub 

Может кто-то пожалуйста исправить ошибки, которые я сделали в приведенном выше коде

Также может кто-нибудь сказать мне, как принимать значения на вкладке один, а затем автозаполнения значения после выполнения цикла и условий

+0

Можете ли вы объяснить, что такое ошибка/ошибка? Номер строки или что-то было бы полезно. Вы можете попробовать запустить макрос по строкам, используя 'shift + f8' – NickSlash

+0

. Я получаю ошибку в моем первом elseif stmt .. Я прокомментировал это в коде, который я здесь тоже вставил – AnRu

ответ

1

поставив свой «что делать после МСФ» код от ciyr1 = ciyr1 + 1 на той же линии, что и Then, вы фактически ЗАВЕРШЕНО блок IF. Этот ярлык полезен, если у вас нет других условий и вы можете пропустить запись End If. Чтобы исправить, просто добавьте возврат после Then и переместите ciry1 = ciyr + 1 в новую строку. Вам нужно будет сделать это для всех ваших линий Then.

If InStr(Cells(i, 1).Value, group) > 0 And _ 
    InStr(Cells(i, 2).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 10).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 11).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 3).Value, inc) > 0 And _ 
    InStr(Cells(i, 14).Value, yr1) > 0 Then 
    ciyr1 = ciyr1 + 1 'to check if value at cells(i,14) is anything that starts with "2013". (the value being present are 2013/01, 2013/02, etc..) 
ElseIf InStr(Cells(i, 1).Value, group) > 0 And _ 'I get a error with a message: else without If 
    InStr(Cells(i, 2).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 10).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 11).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 3).Value, inc) > 0 And _ 
    InStr(Cells(i, 14).Value, yr2) > 0 Then 
    ciyr2 = ciyr2 + 1 
ElseIf InStr(Cells(i, 1).Value, group) > 0 And _ 
    InStr(Cells(i, 2).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 10).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 11).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 3).Value, sr) > 0 And _ 
    InStr(Cells(i, 14).Value, yr1) > 0 Then 
    csyr1 = csyr1 + 1 
ElseIf InStr(Cells(i, 1).Value, group) > 0 And _ 
    InStr(Cells(i, 2).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 10).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 11).Value, inputString) > 0 Or _ 
    InStr(Cells(i, 3).Value, sr) > 0 And _ 
    InStr(Cells(i, 14).Value, yr2) > 0 Then 
    csyr2 = csyr2 + 1 
Else 
    MsgBox "No matches found!!" 
End If 
+0

Я исправил эту ошибку. Но до сих пор не получилось ожидаемое о/р – AnRu

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