2016-01-28 5 views
0

Я очень новичок в VBA и SQL, и в настоящее время я создаю таблицу для загрузки в SQL в Excel и используя VBA. Я хочу, по существу, сказать, что если столбец I (Check Market) или J (Check m2) имеет значение, которое говорит #NA, то дальше идти дальше и не выполнять загрузку или остальную часть кода. Я думаю, что одна из проблем может заключаться в том, что у меня уже есть цикл IF, который является успешным и не имеет ошибок, связанных с ним.Multiple If Statementments VBA

Это мой код до сих пор

'Where Marked sht.Cells(Row,15) = "x" 'FIRST IF LOOP 
    If sht.Cells(lRow, 15) = "X" Then 

    'If I or J columns say #N/A then DO NOT continue 
If IsError(sht.Cells(lRow, 9).Value) Then MsgBox "Error in Column 'Check Market'" 
If IsError(sht.Cells(lRow, 10).Value) Then MsgBox "Error in Column 'Check m2'" 
''''At the moment it is the above part that isn't successfully running, it notifies the user of an error but doesn't stop the process. 

    'Change blank spaces to be Null 
******* 






    sSQL = *******Main part of code goes here******       




    'execute queries 
     ******** 



    'Put back all the 'null' values to blank 
     '''''  




End If 'END OF IF X LOOP 
+0

использования: если ISERROR (sht.Cells (lRow, 9)), то MsgBox «Ошибка в столбце «Проверить рынок» – Vikas

+0

Спасибо за ваш ответ @Vikas, я это записал, но код просто работал, как обычно, и ничего не сделал о # N/A, который он просто проигнорировал. Если вы посмотрите на мое редактирование, которое я только что сделал, будет ли ваш ответ по-прежнему актуальным? – user5836742

+0

Я только что нашел это: «Столбцы (« L »). SpecialCells (xlFormulas, xlErrors) .ClearContents", которые (при их адаптации) могут находить ошибки в ячейках. – Kathara

ответ

0

Я не ясно, если есть вероятность того, что обе колонки могут иметь ошибки, но я предоставил для этого на всякий случай.

'If I or J say #N/A then dont proceed with upload. 
If iserror(sht.Cells(lRow, 9).value) and iserror(sht.Cells(lRow, 10).value) Then 
    MsgBox "Errors in both Columns" 

ElseIf iserror(sht.Cells(lRow, 9).value) Then 
    MsgBox "Error in Column 'Check Market'" 

ElseIf iserror(sht.Cells(lRow, 10).value) Then 
    MsgBox "Error in Column 'Check KPI'" 

Else: 'Continue 

End if 
+0

Это обеспечило появление MsgBox, сказав, что это ошибка, но это не останавливает процесс - любые другие идеи будут приветствоваться. Спасибо GavinP – user5836742

+0

Ну, «остановка процесса» во многом зависит от остальной части вашего кода и потока. Я бы предположил, что «процесс» должен находиться в секции 'else', которая была бы нормальной для потока управления. – GavinP

+0

Я предполагаю, что вы зацикливаете строки, из которых происходит 'lrow'? Поэтому вы хотите остановить «процесс» для всех строк или просто строку, к которой относится ошибка? К сожалению, мне нужна дополнительная информация о том, как выглядит остальная часть кода с эффективной помощью. – GavinP

0

Просто добавив к первоначальному Кодекса

I(9):Check Market J(10):Check m2 
'If I or J say #N/A then dont proceed with upload. 
    If sht.Cells(lRow, 9).Value = "#N/A" Then 

     MsgBox "Error in Column 'Check Market'" 
     Exit Sub 

    ElseIf sht.Cells(lRow, 10).Value = "#N/A" Then 

     MsgBox "Error in Column 'Check KPI'" 
     Exit Sub 

    Else: 'Continue 

Код для выхода с MsgBox

Dim response 
response = MsgBox("My message here.", vbYesNo, "My Title") 
If response = vbNo Then 
    Exit Sub 
End If 
MsgBox ("You clicked YES.") 
+0

Я пробовал это раньше, я получаю сообщение об ошибке «Следующий без Для «того, чего я раньше не делал. Я думаю, что эта опция прерывает другой цикл IF, который я использовал. – user5836742

+0

Может ли быть опция добавления опции vbCancel в msgbox? – user5836742

+0

@ user5836742 попробуйте 'Exit Sub' вместо' End' –