2014-09-15 2 views
1

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

If BiDiRowValid(r1)

, и я хотел бы добавить второй условный оператор, который я сделал ...

and Range("MAIN_BIDI_PINMC") <> "No BiDi" 

, но когда я запускаю код и MAIN_BIDI_PINMC range = "No BiDi", он ошибается и не проходит мимо этой строки. FYI: IsBiDiRowValid() - это функция, которая проверяет, что конкретный r1 не пуст, а затем продолжается. Сразу после этого подпрограмма завершает и завершает мои ошибки кода с ошибкой «Ошибка несоответствия типа». Я также добавил строку ElseIf внизу, я не получил этого кода, потому что верхние ошибки отсутствуют, но я просто хочу убедиться, что я правильно пишу эту итерацию, и если что-то еще нужно сделать. В принципе, если «NoBiDi» находится в диапазоне, я хочу, чтобы он пропустил весь этот код и перешел к следующему r1 ... вот что я думаю, что написал ... Спасибо заранее!

Private Sub start_new() 
    Dim MC_List As Range 
    Dim r1 As Range 
    Dim biDiPinName As Range 
    Dim Pin As String 
    Dim mc As String 
    Dim mType As String 
    Dim tabName As String 
    Dim rowNumber As Integer 
    Dim pinmcSplit() As String 
    Dim NoBidi As String 

On Error GoTo start_biDi_tr_new_Error 



    Set MC_List = Range("MAIN_PINMC_TABLE") 
     Set biDiPinName = Range("MAIN_PIN2_NAME") 



For Each r1 In MC_List.Rows 
     If IsBiDiRowValid(r1) And WorksheetFunction.CountIf(Worksheets("MAIN").Range("MAIN_BIDI_PINMC", "No Bidi") = 0 Then 
      tabName = r1.Cells(1, 8) 
      pinmcSplit = Split(tabName, "_") 
      Pin = pinmcSplit(0) 
      mc = pinmcSplit(1) 
      mType = r1.Cells(1, 3) 
     ElseIf WorksheetFunction.CountIf(Worksheets("MAIN").Range("MAIN_BIDI_PINMC"), "No Bidi") = 1 Then 
     End If 
     Next 
+0

Это потому, что 'Range (" MAIN_BIDI_PINMC ")' не является отдельной ячейкой, я думаю? –

+0

Исправить. Это диапазон ячеек. Есть ли способ получить доступ к каждому конкретному значению ячейки в этом диапазоне? Возможно, итерация в этом диапазоне? Я попытался добавить .value до конца, думая, что может получить доступ к каждому конкретному значению. Но не думайте, что это правильно. –

+1

Используйте 'Application.Worksheetfunction.Countif', чтобы проверить наличие этого слова :) –

ответ

4

Вы получаете эту ошибку, потому что Range("MAIN_BIDI_PINMC") не является отдельной ячейкой. Для проверки значения в нескольких ячейках можно использовать Application.Worksheetfunction.Countif

EDIT

Начать обсуждение в чате, пользователь хочет перебрать каждую ячейку.

Dim aCell As Range 

For Each r1 In MC_List.Rows 
    If IsBiDiRowValid(r1) Then 
     For Each aCell In Worksheets("MAIN").Range("MAIN_BIDI_PINMC") 
      If aCell.Value <> "No Bidi" Then 
       tabName = r1.Cells(1, 8) 
       pinmcSplit = Split(tabName, "_") 
       Pin = pinmcSplit(0) 
       mc = pinmcSplit(1) 
       mType = r1.Cells(1, 3) 
      End If 
     Next 
    ElseIf aCell.Value = "No Bidi" Then 
     '~~> Do Something 
    End If 
Next 
+0

Я использую мой код, отредактированный выше. Я выбрал строку, замененную двумя условностями, в «Часы», чтобы увидеть, что значения были отдельно. Код был протестирован на булавке, которая не говорила «Нет Bidi», но была скорее числовой. The Watch сообщает мне, что IsBiDiRow является истинным, но значение CountIf является False, когда оно должно читаться как True. Затем он переходит к заявлению ElseIf bc, который не читает true. Я не уверен, почему он читает False –

+0

Какова ценность 'nFound'? –

+0

Я не переопределяю его, как вы писали в своем коде, я использую свой отредактированный код в моем исходном вопросе. Но значение Application.WorksheetFunction.Countif (Range («MAIN_BIDI_PINMC»), «No BiDi») равно «FALSE», когда ячейка не говорит «Нет Bidi», и если ячейка говорит «Нет Bidi». Есть ли способ увидеть, какую ячейку он оценивает? –

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