Invalid next control variable reference ошибка vba

I’m sorry, i shouldve explained what i was trying to produce than asking to fix something i wanted to do. My experience in vba has been self-taught, and i’m a little new to asking for help.

The script Floris produced seemed to have function but not as intended. Turns out what i wrote is a little outdated, and needs to be wiped and restarted. This was actually an old script i started a few months back that worked off of a web-query. But the website went thru some changes and now the script is all over the place.

the main issue i was having was a compile-error «Invalid Next Control Variable Reference» Which turns out to be caused by an open ‘Do while’ loop, that doesnt seem to have much of an exit point from the research i looked up. Was supposed to have used another ‘If’ command instead. At the same time, when attempting to solve that ‘Do While’ i added an extra ‘Next’ (cause i thought they were compatible), and it screwed with the script.

Hard to explain.. But the ‘Do While’ i used, i wanted it to combine the values only if the number of values were greater

rnumbers = Rows(ActiveCell.Range("A3").End(xlDown)) + 3
'or CellCount = ActiveCell.Range("A" & Rows.Count).End(xldown).Row

Do While Rows(ActiveCell.Range("A3").End(xlDown)) > 3

But instead it was supposed to be

Dim CellCount As Range

CellCount = ActiveCell.Range("A" & Rows.Count).End(xlDown).Row + 2
'cause its the active cell + two additional cells

If CellCount > 3

Which then opens up into the script Floris submitted. (But that failed too, because of what was stated above).

Thanks again, hope that it explains everything… Sorry if i wasted your time with that one Floris, really do appreciate the assistance. Just wish i had asked for the help sooner, would have saved me a lot of frustration that i’m dealing with now. >_>

 

KeelPM

Пользователь

Сообщений: 8
Регистрация: 21.08.2014

Добрый день уважаемые форумчане.

Учусь самостоятельно работать в VBA, параллельно автоматизирую различные несложные рабочие сценарии.
При написании последнего макроса столкнулся с ошибкой, которую никак не получается исправить, либо найти её причины. Ошибка наверняка очень глупая, либо я просто нарушил какое-то неизвестное мне фундаментальное правило в написании.

К делу. Имеется макрос, который отыскивает на листе «Трафик» в столбце I значения «Ок» или «Внимание». В случае нахождения — копирует некоторые данные строки в которой нашел нужное значение на лист Автоматические тесты» и переходит к следующей строке, пока не дойдет до 60й, на которой его работа заканчивается. Макрос полностью рабочий, вот он.

Код
Sub Razchet()

Dim List As String

Application.ScreenUpdating = False

List = "Трафик"

For x = 12 To 60

    Worksheets("Трафик").Activate        If Cells(x, 9).Value = "Ок" Or Cells(x, 9).Value = "Внимание" Then
        Worksheets("Автоматические тесты").Activate
            Cells((x - 1), 11).Value = Worksheets(List).Cells(2, 2)
            Cells((x - 1), 12).Value = Worksheets(List).Cells(2, 3)
            Cells((x - 1), 13).Value = Worksheets(List).Cells(5, 2)
            Cells((x - 1), 14).Select
            ActiveCell.FormulaR1C1 = "Высокий"
            Cells((x - 1), 15).Value = Worksheets(List).Cells(x, 1)
            Cells((x - 1), 16).Value = Worksheets(List).Cells(x, 8)
                If Worksheets(List).Cells(x, 9) = "îê" Then
                    Cells((x - 1), 17).Select
                        ActiveCell.FormulaR1C1 = "Завершено, ошибок нет"                                                            Else:
                End If
                If Worksheets(List).Cells(x, 9) = "Внимание" Then
                    Cells((x - 1), 17).Select
                        ActiveCell.FormulaR1C1 = "Завершено, есть ошибки"                                                            Else:
                End If
            Cells((x - 1), 18).Value = Worksheets(List).Cells(x, 11)
            Cells((x - 1), 19).Value = Worksheets(List).Cells(x, 5)
            Cells((x - 1), 20).Value = Worksheets(List).Cells(x, 10)
                                                                        Else:
    End If
    
Next x
        
End Sub 

Далее я модернизировал макрос до такого вида:

Код
Sub Razchet()

Dim List As String

Application.ScreenUpdating = False

List = "Трафик"

For x = 12 To 60 
For y = 11 To 59

    Worksheets("Трафик").Activate        If Cells(x, 9).Value = "Ок" Or Cells(x, 9).Value = "Внимание" Then
        Worksheets("Автоматические тесты").Activate
            Cells(y, 11).Value = Worksheets(List).Cells(2, 2)
            Cells(y, 12).Value = Worksheets(List).Cells(2, 3)
            Cells(y, 13).Value = Worksheets(List).Cells(5, 2)
            Cells(y, 14).Select
            ActiveCell.FormulaR1C1 = "Высокий"
            Cells(y, 15).Value = Worksheets(List).Cells(x, 1)
            Cells(y, 16).Value = Worksheets(List).Cells(x, 8)
                If Worksheets(List).Cells(x, 9) = "îê" Then
                    Cells(y, 17).Select
                        ActiveCell.FormulaR1C1 = "Завершено, ошибок нет"                                                            Else:
                End If
                If Worksheets(List).Cells(x, 9) = "Внимание" Then
                    Cells(y, 17).Select
                        ActiveCell.FormulaR1C1 = "Завершено, есть ошибки"                                                            Else:
                End If
            Cells(y, 18).Value = Worksheets(List).Cells(x, 11)
            Cells(y, 19).Value = Worksheets(List).Cells(x, 5)
            Cells(y, 20).Value = Worksheets(List).Cells(x, 10)
                                                                        Else:
    End If
    
Next x 
Next y
        
End Sub 

и работать он перестал выдавая invalid next variable control reference.

Помогите найти ошибку (и не сильно ругайте если она окажется глупой).

Спасибо!

Permalink

Cannot retrieve contributors at this time

title keywords f1_keywords ms.prod ms.assetid ms.date ms.localizationpriority

Invalid Next control variable reference

vblr6.chm1011226

vblr6.chm1011226

office

1fd6eeda-b1e9-5c36-8100-b0e8ea3614fc

06/08/2017

medium

The numeric variable in the Next part of a For…Next loop must match the variable in the For part. This error has the following cause and solution:

  • The variable in the Next part of a For…Next loop differs from the variable in the For part. For example:

      For Counter = 1 To 10 
      MyVar = Counter 
      Next Count 

    Check the spelling of the variable in the Next part to be sure it matches the For part. Also, be sure you haven’t inadvertently deleted parts of the enclosing loop that used the variable.

For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh).

[!includeSupport and feedback]

Если вы работаете с языком программирования VBA, то наверняка сталкивались с ошибками. Одна из таких ошибок – «Invalid next control variable reference», возникает при компиляции кода. Эта ошибка не только вызывает неприятные ситуации, но и может остановить процесс разработки.

Часто такая ошибка возникает из-за проблем со счетчиками циклов, но причины могут быть различными. И часто бывает сложно определить, какую именно переменную необходимо изменить, чтобы избавиться от ошибки. Кроме того, ошибка может возникать в любой момент, на любой строке кода, что делает ее еще более запутанной.

В данной статье мы расскажем, какие могут быть причины ошибки «Invalid next control variable reference» в VBA и какими способами можно ее решить. Мы перечислим наиболее часто встречающиеся проблемы, которые могут привести к появлению этой ошибки, и предложим несколько методов, которые помогут избавиться от нее.

Содержание

  1. Общее описание ошибки
  2. Причины возникновения ошибки «Invalid next control variable reference» в VBA
  3. Способы решения ошибки
  4. Примеры кода с ошибкой и их исправление
  5. Выводы и рекомендации по предотвращению ошибки
  6. Вопрос-ответ
  7. Что означает ошибка «Invalid next control variable reference» в VBA?
  8. Какие могут быть причины возникновения ошибки «Invalid next control variable reference» в VBA?
  9. Что нужно сделать, если возникает ошибка «Invalid next control variable reference» в VBA?
  10. Возможно ли предотвратить ошибку «Invalid next control variable reference» в VBA? Как?
  11. Как избежать ошибок при копировании и вставке кода в VBA?
  12. Как исправить ошибку «Invalid next control variable reference» в VBA, если код является частью большого проекта?

Общее описание ошибки

Ошибка «Invalid next control variable reference» возникает при несоответствии количества операторов «For» и «Next» в коде VBA. Данные операторы используются для создания циклов, в которых выполняются определенные действия для заданного количества повторений. Однако, если количество операторов «For» и «Next» не совпадает, VBA не сможет правильно выполнить код и вернет ошибку.

Такая ошибка может возникать по нескольким причинам. Например, при случайном удалении одного из операторов, при изменении количества повторений в первом операторе, а не во втором, или при перемещении операторов For и Next внутри других циклов.

Чтобы исправить данную ошибку необходимо проверить соответствие количества операторов For и Next и убедиться, что они правильно расположены в коде. Иногда помогает простое переписывание кода с использованием новых операторов.

Чтобы избежать данной ошибки в будущем, рекомендуется всегда в полной мере продумывать и расписывать код с использованием циклов, а также внимательно следить за количеством операторов For и Next в каждом цикле.

Причины возникновения ошибки «Invalid next control variable reference» в VBA

Ошибка «Invalid next control variable reference» возникает в VBA при работе с циклом «For…Next». В основном, это происходит из-за неправильной работы с переменными.

Одна из основных причин возникновения ошибки — использование неправильных переменных. Например, если переменная, используемая в качестве шага в цикле, не задана до начала цикла. Также может быть проблема, если внутри цикла используется переменная с тем же именем, что и переменная, используемая в условии определения цикла.

Еще одна причина возникновения ошибки может быть связана с работой с элементами коллекции. В некоторых случаях, может быть использовано неправильное обращение к элементу коллекции, что вызывает ошибку.

Также может быть проблема с правильным закрытием блоков кода, например, если внутри цикла «For…Next» не закрыт блок «If…End If».

Наконец, еще одна причина ошибки — это использование «Exit For» с передачей управления за пределы цикла, причем после этого происходит повторный вход в цикл.

Способы решения ошибки

Существует несколько способов решения ошибки «Invalid next control variable reference» в VBA:

  1. Переделайте цикл. Попробуйте заменить оператор Next на Exit For или добавить условие выхода из цикла. Также возможно изменить порядок итераций вложенных циклов.
  2. Проверьте именование переменных. Убедитесь, что вы правильно назвали все необходимые переменные и не перепутали их местами.
  3. Проверьте контекст использования переменных. Проверьте, где используются переменные и где они объявлены. Может быть, вы пытаетесь использовать переменную в неподходящем контексте или перед использованием ее не объявили.
  4. Перезапустите компьютер. Иногда ошибка может быть вызвана проблемами в операционной системе или другими программами, поэтому перезапуск компьютера может помочь.

Если ни один из этих способов не помог, можно попробовать поискать информацию о проблеме в Интернете или обратиться за помощью к специалисту в области программирования.

Примеры кода с ошибкой и их исправление

Ошибка «Invalid next control variable reference» возникает, когда в коде VBA не соответствует количество операторов For и Next. Приведем пару примеров ошибочного кода:

  • Пример 1:

    For i = 1 To 10

     MsgBox i

    Next j

    В данном случае, вместо оператора Next используется j, который не является переменной-счетчиком цикла. Исправление: заменить j на i — переменную цикла:

    For i = 1 To 10

     MsgBox i

    Next i

  • Пример 2:

    For i = 1 To 5

     For j = 1 To 3

       MsgBox j

    Next i

    Next j

    В данном случае, количество операторов For не соответствует количеству операторов Next. Исправление: заменить один из операторов Next на Next i:

    For i = 1 To 5

     For j = 1 To 3

       MsgBox j

     Next j

    Next i

Выводы и рекомендации по предотвращению ошибки

1. Проверьте переменные в циклах

Ошибка «Invalid next control variable reference» может возникнуть, если не были правильно определены переменные в цикле, которые использовались в соответствующем блоке кода. Проверьте, что переменные в циклах имеют правильные значения и не были изменены до вызова цикла в программе.

2. Используйте Option Explicit

Использование директивы Option Explicit в начале модуля поможет избежать ошибок в процессе отладки кода. Option Explicit обязывает определять все переменные, которые будут использоваться в программе, что снижает вероятность ошибок.

3. Не используйте блоки кода с мультипоколеческими циклами

Блоки кода с мультипоколецскими циклами могут привести к ошибкам в коде, что часто бывает сложно отлаживать. Если в программе есть циклы внутри циклов, попробуйте разбить блоки кода на меньшие части с помощью функций.

4. Следите за открытыми объектами

Автоматическое уничтожение объектов может привести к ошибкам, если они остались открытыми. Убедитесь, что все объекты были правильно закрыты и освобождены от использования, прежде чем продолжать работу с программой.

5. Используйте отладчик

Использование отладчика может помочь обнаружить ошибки в программе. При использовании инструментов отладки необходимо убедиться, что переменные и объекты определены правильно, и что блоки кода выполняются в нужном порядке.

Некоторые ошибки в коде происходят от присутствия неожиданных и неявных пробелов или символов. Проверьте ваш код на наличие незначимых символов или пробелов в конце строк. Применение рекомендаций поможет предотвратить ошибки и ускорит процесс отладки и тестирования кода.

Вопрос-ответ

Что означает ошибка «Invalid next control variable reference» в VBA?

Эта ошибка возникает в VBA, когда в коде встречается не соответствующее количество операторов Next и For. Это означает, что один или несколько операторов Next не имеют соответствующих операторов For, либо имеют несколько. Результатом этого является невозможность компиляции кода.

Какие могут быть причины возникновения ошибки «Invalid next control variable reference» в VBA?

Причин может быть несколько, включая ошибки при копировании и вставке кода, неправильно написанные циклы For и Next, изменение количества циклов в процессе редактирования, неправильное указание переменных и другие.

Что нужно сделать, если возникает ошибка «Invalid next control variable reference» в VBA?

Сначала следует внимательно изучить код и убедиться, что количество операторов For и Next совпадает. Далее необходимо исправить ошибки, если они есть, и пересобрать код. В некоторых случаях может потребоваться внести изменения в структуру циклов. Если проблема продолжается, то нужно разбираться в коде более глубоко или обратиться за помощью к специалисту.

Возможно ли предотвратить ошибку «Invalid next control variable reference» в VBA? Как?

Да, возможно. Для того, чтобы предотвратить возникновение этой ошибки, нужно аккуратно и внимательно писать код, уделять внимание структуре циклов и не забывать проверять все операторы For и Next на соответствие.

Как избежать ошибок при копировании и вставке кода в VBA?

Чтобы избежать ошибок при копировании и вставке кода в VBA, нужно всегда внимательно проверять структуру циклов, правильность указания переменных и количество операторов For и Next.

Как исправить ошибку «Invalid next control variable reference» в VBA, если код является частью большого проекта?

Если код является частью большого проекта, то следует внимательно изучить все взаимосвязи и зависимости в проекте и определить, где и как вносить изменения. Если возникают затруднения, то следует обратиться за помощью к разработчикам проекта и специалистам по VBA.

Запускаю этот код, выделяется переменная «y» и появляется сообщение: Invalid Next control variable reference.
В чём может быть проблема?

Sub Find_Matches()
Dim CompareRange1 As Variant, x As Variant, y As Variant, CompareRange3 As Variant
Set CompareRange1 = Range(«A1:A7»)
Set CompareRange3 = Range(«C1:C4»)
For Each y In CompareRange1
For Each x In CompareRange3
If x = y Then y.Offset(0, 1) = x.inset(0, 1)
Next y
Next x
End Sub

Понравилась статья? Поделить с друзьями:
  • Invalid interface type and number cisco ошибка
  • Invalid input syntax for integer ошибка
  • Invalid hwid ошибка чита aurora
  • Invalid gradle jdk configuration found ошибка
  • Invalid floating point operation ошибка в программе