Технический форум

Технический форум (http://www.tehnari.ru/)
-   Форум программистов (http://www.tehnari.ru/f22/)
-   -   VBA - Goto на номер строки (http://www.tehnari.ru/f22/t267881/)

MoNeTa 19.03.2020 18:05

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

mike_ 19.03.2020 21:17

"Label not defined"
Ну так у тебя нету метки myRange.

Vladimir_S 19.03.2020 21:23

Цитата:

Сообщение от mike_ (Сообщение 2691527)
"Label not defined"
Ну так у тебя нету метки myRange.

Почему же? Он их задал циклом. А вот допустимо ли так делать — другой вопрос. Что-то как-то сомнительно, хоть честно признаюсь — в макросах ни бельмеса.

mike_ 19.03.2020 23:07

Цитата:

Сообщение от Vladimir_S (Сообщение 2691531)
А вот допустимо ли так делать — другой вопрос

Мне кажется, что нет.:
Цитата:

Oператор GoTo в VBA, ситуации применения GoTo

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

GoTo EngineNotStarted



EngineNotStarted :

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



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

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

MoNeTa 20.03.2020 12:18

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

AlexZir 22.03.2020 21:45

Имя массива не может служить меткой для оператора безусловного перехода.

Daniellos 22.03.2020 21:46

Блин, Алекс ты второй Сахаров :)))


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.