Технический форум
Вернуться   Технический форум > Программирование > Форум программистов


Ответ
 
Опции темы Опции просмотра
Старый 19.03.2020, 18:05   #1 (permalink)
MoNeTa
Member
 
Аватар для MoNeTa
 
Регистрация: 01.02.2008
Сообщений: 297
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 252
По умолчанию 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
MoNeTa вне форума   Ответить с цитированием

Старый 19.03.2020, 18:05
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Почитайте, возможно найдете нужный ответ

Строки
Строки
GOTO - блокировщик экрана
Вконтакте. Введите номер Вашего телефона. Номер телефона: +7

Старый 19.03.2020, 21:17   #2 (permalink)
mike_
VIP user
 
Аватар для mike_
 
Регистрация: 15.01.2014
Сообщений: 1,832
Сказал(а) спасибо: 237
Поблагодарили 15 раз(а) в 11 сообщениях
Репутация: 25642
По умолчанию

"Label not defined"
Ну так у тебя нету метки myRange.
mike_ вне форума   Ответить с цитированием
Старый 19.03.2020, 21:23   #3 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,874
Сказал(а) спасибо: 318
Поблагодарили 542 раз(а) в 183 сообщениях
Репутация: 101510
По умолчанию

Цитата:
Сообщение от mike_ Посмотреть сообщение
"Label not defined"
Ну так у тебя нету метки myRange.
Почему же? Он их задал циклом. А вот допустимо ли так делать — другой вопрос. Что-то как-то сомнительно, хоть честно признаюсь — в макросах ни бельмеса.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S на форуме   Ответить с цитированием
Старый 19.03.2020, 23:07   #4 (permalink)
mike_
VIP user
 
Аватар для mike_
 
Регистрация: 15.01.2014
Сообщений: 1,832
Сказал(а) спасибо: 237
Поблагодарили 15 раз(а) в 11 сообщениях
Репутация: 25642
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
А вот допустимо ли так делать — другой вопрос
Мне кажется, что нет.:
Цитата:
Oператор GoTo в VBA, ситуации применения GoTo

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

GoTo EngineNotStarted



EngineNotStarted :

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



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

Иногда использование GoTo очень удобно — например, когда нам нужно добиваться от пользователя ввода правильного значения неизвестное число раз. Однако использование GoTo категорически не рекомендуется, потому что код становится трудночитаемым. Чаще всего GoTo можно заменить на конструкцию Do While или на вызов функции из самой себя.
mike_ вне форума   Ответить с цитированием
Старый 20.03.2020, 12:18   #5 (permalink)
MoNeTa
Member
 
Аватар для MoNeTa
 
Регистрация: 01.02.2008
Сообщений: 297
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 252
По умолчанию

Я тоже не нашел почему, пришлось поменять код, коротко внизу. Пришлось вынуть основную функцию как отдельный саб, и выполнять ее каждый раз при новом значении переменного. работает.
Если будут новости по 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
MoNeTa вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 22.03.2020, 21:45   #6 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 14,949
Записей в дневнике: 57
Сказал(а) спасибо: 135
Поблагодарили 164 раз(а) в 69 сообщениях
Репутация: 67284
По умолчанию

Имя массива не может служить меткой для оператора безусловного перехода.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 22.03.2020, 21:46   #7 (permalink)
Daniellos
Хозяин Медной Горы
 
Аватар для Daniellos
 
Регистрация: 01.08.2011
Адрес: Армавир
Сообщений: 11,969
Записей в дневнике: 8
Сказал(а) спасибо: 675
Поблагодарили 81 раз(а) в 24 сообщениях
Репутация: 48781
По умолчанию

Блин, Алекс ты второй Сахаров
Daniellos вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 22:25.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.