VBA Excel
241 subscribers
88 photos
23 links
VBA Excel для начинающих. Справка по VBA Excel. Visual Basic for Applications. Справочник. Самоучитель.
Download Telegram
↩️ On Error GoTo Label

В отличие от On Error Resume Next, который игнорирует ошибки, оператор On Error GoTo Label позволяет перенаправить выполнение кода в специальный блок для обработки ошибок.

🛠 Как это работает?
При возникновении ошибки после оператора On Error GoTo Label выполнение кода переключается на указанный Label (метку), где происходит обработка ошибки.

📌 Пример
Sub Primer()
On Error GoTo ErrorHandler ' Переключаем обработку ошибок на метку ErrorHandler

Dim x As Double
x = 10 / 0 ' Ошибка: деление на ноль (division by zero)
MsgBox "Результат: " & x

Exit Sub ' Выход из процедуры, чтобы не выполнить код обработки ошибки

ErrorHandler: ' Метка для обработки ошибок
MsgBox "Ошибка №" & Err.Number & ": " & Err.Description, vbCritical, "Ошибка"
End Sub


Зачем нужен On Error GoTo Label?
🔸 Позволяет перехватывать ошибки и выполнять альтернативные действия.
🔸 Позволяет идентифицировать ошибки для дальнейшего анализа.
🔸 Позволяет безопасно завершить макрос без внезапных остановок.

💡 Важно!
🔹 Если необходимо отключить обработку ошибок On Error GoTo Label внутри кода, используйте оператор On Error GoTo 0.
🔹 Не забывайте ставить Exit Sub перед меткой, чтобы код обработки ошибок не выполнялся в обычном режиме.
🔹 При отладке процедуры оператор On Error GoTo Label лучше закомментировать, чтобы VBA подсвечивал строку кода с ошибкой. 🔦

#VBA #ExcelVBA #OnError #GoTo #Label #ОбработкаОшибок
🔥2
🎛 Программное создание элементов управления

Рассмотрим программное (динамическое) создание элементов управления формы в VBA Excel для отображения расстояний от Солнца до планет Солнечной системы. Созданный элемент ComboBox будет реагировать на событие ComboBox_Change().

1️⃣ Создайте пользовательскую форму.
2️⃣ Разместите код в модуле формы.

📌 Код VBA Excel
Option Explicit
'Объявляем переменные для создания меток
Dim lb1, lb2
'Объявляем переменную для поля со списком,
'которая будет обрабатывать события
'благодаря ключевому слову WithEvents
Private WithEvents cb1 As MSForms.ComboBox


Private Sub UserForm_Initialize()
With Me
.Height = 170
.Width = 305
.Caption = "Расстояние от Солнца до планет Солнечной системы"
'Программно создаем элементы управления
Set lb1 = .Controls.Add("Forms.Label.1")
Set lb2 = .Controls.Add("Forms.Label.1")
Set cb1 = .Controls.Add("Forms.ComboBox.1")
End With

With lb1
.Height = 22
.Width = 290
.Top = 60
.Left = 18
.Font.Size = 12
.Caption = "Расстояние от Солнца до выбранной планеты"
End With

With lb2
.Caption = ""
.Height = 22
.Width = 290
.Top = 90
.Left = 18
.Font.Size = 14
End With

With cb1
.Height = 22
.Width = 150
.Top = 20
.Left = 18
.Font.Size = 12
.List = Array("Меркурий", "Венера", "Земля", _
"Марс", "Юпитер", "Сатурн", "Уран", "Нептун")
.Value = "Выберите планету"
End With
End Sub


Private Sub cb1_Change()
Dim pl(), km()
pl = Array("Меркурия", "Венеры", "Земли", _
"Марса", "Юпитера", "Сатурна", "Урана", "Нептуна")
km = Array("57,91 млн км (0,387 а. е.)", "108 млн км (0,723 а. е.)", _
"149,6 млн км (1 а. е.)", "228 млн км (1,52 а. е.)", _
"778,57 млн км (5,2 а. е.)", "1,43 млрд км (9,58 а. е.)", _
"2,87 млрд км (19,1914 а. е.)", "4,55 млрд км (30,1 а. е.)")
If cb1.ListIndex > -1 Then
lb1.Caption = "Расстояние от Солнца до " & pl(cb1.ListIndex) & ":"
lb2.Caption = km(cb1.ListIndex)
End If
End Sub


Исправил незначительную ошибку, которая вызывала перенос строки в первой метке.

#VBA #ExcelVBA #Элемент #ComboBox #Label #Создание
👍6