VBA Object Libraries, Early & Late Binding (Серия VBA 34)
HTML-код
- Опубликовано: 3 окт 2024
- Привет. В предыдущем видео, где мы рассматривали инструмент VBA Dictionary, мы также коротко коснулись и темы библиотек объектов других программ, которые можно подключать во время работы с VBA. Тогда я сказал, что данную тему мы подробно рассмотрим в следующем видео. Именно это в сегодняшнем видео мы и сделаем.
В этом видеоуроке мы с тобой поговорим о том, как можно подключать библиотеки других программ в Excel при работе с VBA, и рассмотрим для чего это делается. Кроме того, тема библиотек объектов в VBA непосредственно связана с такими определениями как Early Binding и Late Binding. Данные две темы мы также рассмотрим в данном видеоуроке.
Так, мы ответим на вопрос, в чём заключаются преимущества Early Binding и Late Binding друг перед другом, в каких ситуациях каждый из этих подходов следует использовать и, кроме того, мы поговорим о том, как можно комбинировать использования этих обоих подходов для достижения оптимальных результатов в процессе написания кода.
Для того же, чтобы весь процесс был интересным и интерактивным, рассматривать эти темы мы будем на примере взаимодействия Excel и Outlook. Кроме того, в конце этого видео я тебе дам упражнение, с помощью которого ты сам научишься выстраивать взаимодействие между двумя программами, потренируешься в области взаимодействия нескольких процедур в VBA, а также укрепишь знания по использованию циклов (For/For Each) и условных структур (If) в VBA.
В общем поверь, в этом объемном видео ты точно найдёшь интересные и полезные для себя моменты.
Приятного просмотра! 😊
P.S.: Вот ссылка на скачивание файла для упражнения:
drive.google.c...
Господи, спасибо тебе за что я наконец таки нашел великолепный канал про VBA =)
Здравствуйте, Роман!
Очень рад что Вы вышли на мой канал - добро пожаловать :)
Если будут какие-либо вопросы - всегда пишите :)
С уважением и хороших Вам выходных,
Билял
@@BilyalKhassenov а я то как рад! Большое спасибо за Ваш труд.
Всегда пожалуйста 😊
Билял, Спасибо тебе огромное! Как всегда все доступно, все по полочкам разложено! Успехов тебе! Хочется ещё видео про outlook, объектная модель, пространство имён и особенно интересно работа с адресными книгами
Здравствуйте,
большое спасибо за Ваш комментарий! Рад, что мои видео полезны и помогают Вам. В дальнейшим обязательно уделю внимание интересующим Вас темам :)
С уважением и хороших Вам выходных,
Билял
Спасибо, Билял
Спасибо за урок, все доходчиво и понятно. Сделал все без особых проблем, даже уже радостно становится, что получается так решать задачи) Даже себе на почту наспамил писем)
Билял, огромное спасибо! Очень понравилось и содержание и подача материала, просто супер!
Спасибо!
Спасибо большое за познавательные видео.
Билял, спасибо за качественный материал!
Здравствуйте, Фарид!
Спасибо за Ваш комментарий 😊
С уважением и хороших Вам выходных,
Билял
Спасибо за труд!
Спасибо за полезные уроки! Может быть когда-нибудь снимите видео о том, как создать «Задачу - напоминание» в Outlooke из Excel, в файле, которого например есть таблица с 5 столбцами в которых имеется информация о сдаче экзаменов, о которой необходимо напомнить - 1. ФИО, 2. Дата, 3. Время, 4. Название напоминания, 5. Текст напоминания
Здравствуйте!
Записал в заметки - как-нибудь обязательно постараюсь снять такое видео 😊
С уважением и хорошего Вам дня,
Билял
Билял, Ваш постоянный подписчик снова с благодарностью и восхищением!!! Наиполезнейшая тема и наилучшее её обозрение! Вы умница и труженик! Безупречный доклад! Спасибо Вам! Как всегда, мой вопрос: как работать с программами, не относящимися к семейству Microsoft? Меня, например, интересует Автокад)) в совокупности с Excel (VBA)!
Здравствуйте, Евгений!
Большое спасибо за Ваш комментарий, рад, что видео было для Вас полезным 😊
На Ваш же вопрос, боюсь, к сожалению, невозможно ответить коротко. Единственное что могу сказать по взаимодействию автокада и VBA - это то, что редактор VBA по умолчанию не интегрирован в автокад, и его нужно догружать отдельным пакетом. Тем не менее это несложный процесс, и в принципе дальнейшее выстраивание взаимодействия автокада с VBA, при условии наличия знаний объектов автокада и их свойств, не должно быть проблематичным и производится по уже знакомым общим принципам работы в VBA.
Возможно, когда-нибудь я постараюсь снять видео на подобную тему, но это скорее всего будет не скоро.
Желаю Вам оставаться здоровым, Евгений, в текущей ситуации с коронавирусом!
С уважением и хорошего Вам дня,
Билял
Билял Хасенов - Excel & VBA Спасибо Билял! Будем изучать)!
@@BilyalKhassenov По-моему, VBA-редактор по умолчанию встроен в АвтоГад, по крайней мере, об это много где упоминается в интернете. За видео-уроки отдельное спасибо и жирный лайк. Ваша подача материала может служить примером для многих интернет-коучей :)
Спасибо за ваш труд Билял. Можете прикрепить файл для упражнений? Спасибо.
Здравствуйте, Хабиб!
Большое спасибо за Ваш комментарий - я и вправду совсем забыл загрузить файл для упражнений. Ссылку на файл в Google Drive вписал в описание к этому видео и также дублирую в этом ответе на Ваш комментарий:
drive.google.com/open?id=1UufZ0o9yMkw4iASGI2qEDck6BHhrLS3N
Если будут какие-либо вопросы - всегда пишите!
С уважением и хороших Вам выходных,
Билял
классные уроки
Как можно скопировать готовый UserForm и вставить на эту же книгу, то есть дублировать? Спасибо.
Здравствуйте, Хабиб!
Для этого Вам надо переименовать пользовательскую форму, лучше всего в отдельной копии Вашего xlsm файла - и дописать, например, слово "_Copy" в конце названия формы. Затем щёлкаете правой кнопкой мыши -> Export File -> Сохраняете в нужной Вам папке.
И уже после этого Вы можете импортировать эту локально сохранённую форму в Ваш xlsm-файл (щелчок правой кнопкой мыши по папке Forms в VBA -> Import File). Таким образом у Вас появится копия формы.
С уважением и хорошего Вам дня,
Билял
Билял, привет! В своем решении домашнего задания ты из процедуры в процедуру передаешь переменную (rgCellChecked) типа Range, а потом в целевой процедуре оперируешь сдвигами с переданным значением, не прописывая заново путь (например, Workbooks().Worksheets().Range() ) к исходному диапазону. Я правильно понимаю, что при передаче переменной типа Range (ну и вообще переменных именно с объектами) передаются также и остальные свойства объекта, а не только явно отраженное содержимое?
Здравствуйте, Николай!
Да, Вы всё верно поняли - переменные содержат в себе всю связанную с объектом информацию, и именно этим они прекрасны и важны. Кстати, легче воспринимать объектные переменные как ссылки на реальные объекты, об этом можете подробнее узнать из следующего видео: ruclips.net/video/PLaDtatnJjM/видео.html
С уважением и хороших Вам выходных,
Билял
Благодарю за отличный развернутый урок! А нет ли способа программно подключать или выключать библиотеки, через доступ к Среде VBA и управления настройками проекта? Тогда удалось бы объединить преимущства позднего и раннего связываний.
Спасибо за урок и за задачку! Решил сам, но в рамках одной процедуры. Сделал динамический массив, чтобы была возможность отправки писем автоматически при добавлении клиентов. Немного поломал голову с переносом текста на другую строку. В итоге тоже нашел vbNewLine.
Заметил одну проблему: при отправке или при закрытие письма (miNewMail.Send/ miNewMail.Close olDiscard) при повторении цикла со следующим клиентом выскакивает ошибка Run-time error '462': The remote server machine does not exist or is unavalible.
При этом, если с письмом ничего не делать (не закрывать или не отправлять), цикл работает корректно
Здравствуйте.
Office 2021. Обновлено "на сейчас". Раннее подключение библиотеки Microsoft Outlook 16.0
Вопрос:
Почему при запущенном OUTLOOK на строке
Set appOutlook = New Outlook.Application
возникает ошибка Run-time error '429'?
При закрытом OUTLOOK рассылка работает, но только при отсутствии строки
NewMail.Display
внутри цикла рассылки, иначе на строке
Set NewMail = appOutlook.CreateItem(olMailItem)
вылетает ошибка
Run-time error '462'.
Если попробовать запустить OUTLOOK во время работы макроса - не получается, "... Разные версии OUTLOOK не могут работать одновременно..."
Есть подозрение, что позднее подключение может решить эту проблему.
Заранее спасибо.
Отличный канал! Спасибо за граммотное изложение материала. А возможно ли с Эксель отправлять смс сообщение с персональной информацией?
Здравствуйте, Алексей!
Всегда пожалуйста, рад помочь! 😊
Напрямую из Excel отправлять СМС невозможно - но, возможно, есть Add-In сторонних разработчиков (скорее всего платные). В принципе, также можно было бы рассмотреть вариант с отправкой СМС через Internet Explorer с сайтов с подобными услугами.
С уважением,
Билял
Здравствуйте Билял.
Подскажите, пожалуйста, как вставить таблицу в outlook? И как вставить файл excel в outlook?
Спасибо!
А если я решу писать в late binding, то где искать значение констант?
Подскажите у меня нет MICROSOFT OUTLOOK 16.0 OBJECT LIBRARY. Нет в принципе не чего на Outlook/
Здраствуйте, подскажите вопрос. При запуске макросов выскакивает надпись Can t find project or library, это говорит о том что у меня не подключены библиотеки ? Пытаюсь дальше включить Tools/Peferences - выскакивают не активации библиотек а password, Это значит кто то в этих настройках поставил пароль ??
Здравствуйте, Билял. Есть такая трудность в Excel. Есть массив цифр, например 1, 2, 3, 4 7, 9, 12, 13, 14, 15, 18. Мне нужно представлять их как 1-4, 7, 9, 12-15, 18. То есть все цифры которые идут по порядку должны для краткости писаться через тире, ну а те которые не по порядку должны перечисляться через запятую. Помогите, пжста, написать подобный код. Спасибо!
Здравствуйте, Сергей!
Я быстро набросал следующий вариант, работающий как вспомогательный макрос. Попробуйте его:
Sub groupNumbersInAnArray(ByRef varArrNumbersToGroup As Variant)
Dim lngCounter As Long
Dim lngCurrentGroupStart As Long
Dim lngCurrentGroupEnd As Long
Dim lngLastAddedToTheGroup As Long
Dim boolNewGroupIsToStart As Boolean
boolNewGroupIsToStart = True
Dim collGroupsDone As New Collection
lngCurrentGroupStart = varArrNumbersToGroup(1, 1) 'Group start
lngLastAddedToTheGroup = varArrNumbersToGroup(1, 1)
boolNewGroupIsToStart = False
If UBound(varArrNumbersToGroup, 1) = 1 Then
MsgBox "Всего одно значение в массиве! Для групирования значений должно быть больше значений в массиве!", vbInformation
Exit Sub
Else:
For lngCounter = 2 To UBound(varArrNumbersToGroup, 1)
If varArrNumbersToGroup(lngCounter, 1) = lngLastAddedToTheGroup + 1 Then
lngLastAddedToTheGroup = varArrNumbersToGroup(lngCounter, 1) 'Current group continues
Else: 'Closing the Group
If lngCurrentGroupStart lngLastAddedToTheGroup Then
collGroupsDone.Add lngCurrentGroupStart & "-" & lngLastAddedToTheGroup
lngCurrentGroupStart = varArrNumbersToGroup(lngCounter, 1) 'New group start
lngLastAddedToTheGroup = lngCurrentGroupStart
Else:
collGroupsDone.Add lngCurrentGroupStart
lngCurrentGroupStart = varArrNumbersToGroup(lngCounter, 1) 'New group start
lngLastAddedToTheGroup = lngCurrentGroupStart
End If
End If
'Adding the last one
If lngCounter = UBound(varArrNumbersToGroup, 1) Then
If lngCurrentGroupStart lngLastAddedToTheGroup Then
collGroupsDone.Add lngCurrentGroupStart & "-" & lngLastAddedToTheGroup
Else:
collGroupsDone.Add lngCurrentGroupStart
End If
End If
Next lngCounter
'Chaning the array
Erase varArrNumbersToGroup
ReDim varArrNumbersToGroup(1 To collGroupsDone.Count, 1 To 1)
For lngCounter = 1 To collGroupsDone.Count
varArrNumbersToGroup(lngCounter, 1) = collGroupsDone.Item(lngCounter)
Next lngCounter
End If
End Sub
Как было сказано, макрос был быстро написан. Я него немного потестировал, надеюсь учёл все нюансы. Вы потестируйте тоже его, и сообщите мне, пожалуйста, если будут какие-заметки 😊
С уважением,
Билял
2021