• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

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

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

VBA - Goto на номер строки

  • Автор темы Автор темы MoNeTa
  • Дата начала Дата начала

MoNeTa

Новые
Регистрация
1 Фев 2008
Сообщения
300
Реакции
5
Баллы
0
VBA - Goto на номер строки

Привет.
По работе хочу небольшой макрос на экселе написать
Можете подсказать почему "GoTo myRange" не идет на нужную строку и выдает "Label not defined". Спасибо!

Sub Macro1()

Dim myRange As Integer
Dim myArray As Variant

For myRange = 1 To 16
GoTo myRange

20 функция

next i

Goto 40

1 myArray = Array("10115160", "10115170", "10115171", "10115172")
GoTo 20
2 myArray = Array("10201010", "10201030", "10201050")
GoTo 20
3 myArray = Array("10201090")
GoTo 20
4 myArray = Array("20113040", "20113060", "20113070", "20129030")
GoTo 20
итд до 16...


40 End Sub
 
"Label not defined"
Ну так у тебя нету метки myRange.
 
"Label not defined"
Ну так у тебя нету метки myRange.
Почему же? Он их задал циклом. А вот допустимо ли так делать — другой вопрос. Что-то как-то сомнительно, хоть честно признаюсь — в макросах ни бельмеса.
 
А вот допустимо ли так делать — другой вопрос
Мне кажется, что нет.:
Oператор GoTo в VBA, ситуации применения GoTo

Оператор GoTo — это оператор безусловного перехода, когда ход выполнения программы без проверки каких-либо условий перепрыгивает на метку в коде. Пример применения GoTo может выглядеть так:

GoTo EngineNotStarted



EngineNotStarted :

MsgBox "Едем на метро"



EngineNotStarted: — это метка, для нее используется имя (выбираемое по правилам назначения имен для переменных), которое оканчивается на двоеточие.

Иногда использование GoTo очень удобно — например, когда нам нужно добиваться от пользователя ввода правильного значения неизвестное число раз. Однако использование GoTo категорически не рекомендуется, потому что код становится трудночитаемым. Чаще всего GoTo можно заменить на конструкцию Do While или на вызов функции из самой себя.
 
Я тоже не нашел почему, пришлось поменять код, коротко внизу. Пришлось вынуть основную функцию как отдельный саб, и выполнять ее каждый раз при новом значении переменного. работает.
Если будут новости по Goto интересно будет знать. Спасибо!

sub мой_макрос

myArray = Array("10115160", "10115170", "10115171", "10115172")
call функция(myArray)

myArray = Array("10201010", "10201030", "10201050")
call функция(myArray)

myArray = Array("10201090")
call функция(myArray)

итд...
end sub


sub функция(array1)

функция

end sub
 
Имя массива не может служить меткой для оператора безусловного перехода.
 
Блин, Алекс ты второй Сахаров :)))
 
Назад
Сверху