VBA Object Libraries, Early & Late Binding (Серия VBA 34)

Поділитися
Вставка
  • Опубліковано 3 кві 2020
  • Привет. В предыдущем видео, где мы рассматривали инструмент 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.com/open?id=1Uuf...

КОМЕНТАРІ • 40

  • @user-zj4ub3cx3z
    @user-zj4ub3cx3z 4 роки тому +13

    Господи, спасибо тебе за что я наконец таки нашел великолепный канал про VBA =)

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому

      Здравствуйте, Роман!
      Очень рад что Вы вышли на мой канал - добро пожаловать :)
      Если будут какие-либо вопросы - всегда пишите :)
      С уважением и хороших Вам выходных,
      Билял

    • @user-zj4ub3cx3z
      @user-zj4ub3cx3z 4 роки тому +1

      @@BilyalKhassenov а я то как рад! Большое спасибо за Ваш труд.

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому

      Всегда пожалуйста 😊

  • @limpopos8125
    @limpopos8125 4 роки тому +12

    Билял, Спасибо тебе огромное! Как всегда все доступно, все по полочкам разложено! Успехов тебе! Хочется ещё видео про outlook, объектная модель, пространство имён и особенно интересно работа с адресными книгами

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому

      Здравствуйте,
      большое спасибо за Ваш комментарий! Рад, что мои видео полезны и помогают Вам. В дальнейшим обязательно уделю внимание интересующим Вас темам :)
      С уважением и хороших Вам выходных,
      Билял

  • @alekseychaykovskiy3963
    @alekseychaykovskiy3963 4 роки тому +5

    Спасибо, Билял

  • @user-rf9rv3vr1p
    @user-rf9rv3vr1p 3 роки тому +2

    Билял, огромное спасибо! Очень понравилось и содержание и подача материала, просто супер!

  • @Kondrat4ek.dragneel.mesh.
    @Kondrat4ek.dragneel.mesh. 2 роки тому +1

    Спасибо за урок, все доходчиво и понятно. Сделал все без особых проблем, даже уже радостно становится, что получается так решать задачи) Даже себе на почту наспамил писем)

  • @user-ye6tb5lr4o
    @user-ye6tb5lr4o 3 роки тому +1

    Спасибо большое за познавательные видео.

  • @djtroy6569
    @djtroy6569 4 роки тому +4

    Спасибо!

  • @abdulfarid89
    @abdulfarid89 4 роки тому +2

    Билял, спасибо за качественный материал!

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому +1

      Здравствуйте, Фарид!
      Спасибо за Ваш комментарий 😊
      С уважением и хороших Вам выходных,
      Билял

  • @SamSambl4
    @SamSambl4 4 роки тому +2

    Спасибо за труд!

  • @Technik8888
    @Technik8888 4 роки тому +5

    Спасибо за полезные уроки! Может быть когда-нибудь снимите видео о том, как создать «Задачу - напоминание» в Outlooke из Excel, в файле, которого например есть таблица с 5 столбцами в которых имеется информация о сдаче экзаменов, о которой необходимо напомнить - 1. ФИО, 2. Дата, 3. Время, 4. Название напоминания, 5. Текст напоминания

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому

      Здравствуйте!
      Записал в заметки - как-нибудь обязательно постараюсь снять такое видео 😊
      С уважением и хорошего Вам дня,
      Билял

  • @user-bm8yq2hh6h
    @user-bm8yq2hh6h 4 роки тому +4

    Билял, Ваш постоянный подписчик снова с благодарностью и восхищением!!! Наиполезнейшая тема и наилучшее её обозрение! Вы умница и труженик! Безупречный доклад! Спасибо Вам! Как всегда, мой вопрос: как работать с программами, не относящимися к семейству Microsoft? Меня, например, интересует Автокад)) в совокупности с Excel (VBA)!

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому +2

      Здравствуйте, Евгений!
      Большое спасибо за Ваш комментарий, рад, что видео было для Вас полезным 😊
      На Ваш же вопрос, боюсь, к сожалению, невозможно ответить коротко. Единственное что могу сказать по взаимодействию автокада и VBA - это то, что редактор VBA по умолчанию не интегрирован в автокад, и его нужно догружать отдельным пакетом. Тем не менее это несложный процесс, и в принципе дальнейшее выстраивание взаимодействия автокада с VBA, при условии наличия знаний объектов автокада и их свойств, не должно быть проблематичным и производится по уже знакомым общим принципам работы в VBA.
      Возможно, когда-нибудь я постараюсь снять видео на подобную тему, но это скорее всего будет не скоро.
      Желаю Вам оставаться здоровым, Евгений, в текущей ситуации с коронавирусом!
      С уважением и хорошего Вам дня,
      Билял

    • @user-bm8yq2hh6h
      @user-bm8yq2hh6h 4 роки тому +2

      Билял Хасенов - Excel & VBA Спасибо Билял! Будем изучать)!

    • @Snake60rus
      @Snake60rus 2 роки тому

      @@BilyalKhassenov По-моему, VBA-редактор по умолчанию встроен в АвтоГад, по крайней мере, об это много где упоминается в интернете. За видео-уроки отдельное спасибо и жирный лайк. Ваша подача материала может служить примером для многих интернет-коучей :)

  • @user-hk6ro1qo9p
    @user-hk6ro1qo9p 4 роки тому

    классные уроки

  • @user-li6ts3lp5q
    @user-li6ts3lp5q 4 роки тому +7

    Спасибо за ваш труд Билял. Можете прикрепить файл для упражнений? Спасибо.

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому

      Здравствуйте, Хабиб!
      Большое спасибо за Ваш комментарий - я и вправду совсем забыл загрузить файл для упражнений. Ссылку на файл в Google Drive вписал в описание к этому видео и также дублирую в этом ответе на Ваш комментарий:
      drive.google.com/open?id=1UufZ0o9yMkw4iASGI2qEDck6BHhrLS3N
      Если будут какие-либо вопросы - всегда пишите!
      С уважением и хороших Вам выходных,
      Билял

  • @dmitriy5058
    @dmitriy5058 2 роки тому +2

    Здравствуйте.
    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 не могут работать одновременно..."
    Есть подозрение, что позднее подключение может решить эту проблему.
    Заранее спасибо.

  • @user-li6ts3lp5q
    @user-li6ts3lp5q 4 роки тому +6

    Как можно скопировать готовый UserForm и вставить на эту же книгу, то есть дублировать? Спасибо.

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому

      Здравствуйте, Хабиб!
      Для этого Вам надо переименовать пользовательскую форму, лучше всего в отдельной копии Вашего xlsm файла - и дописать, например, слово "_Copy" в конце названия формы. Затем щёлкаете правой кнопкой мыши -> Export File -> Сохраняете в нужной Вам папке.
      И уже после этого Вы можете импортировать эту локально сохранённую форму в Ваш xlsm-файл (щелчок правой кнопкой мыши по папке Forms в VBA -> Import File). Таким образом у Вас появится копия формы.
      С уважением и хорошего Вам дня,
      Билял

  • @nikolayvolkov1397
    @nikolayvolkov1397 4 роки тому +3

    Билял, привет! В своем решении домашнего задания ты из процедуры в процедуру передаешь переменную (rgCellChecked) типа Range, а потом в целевой процедуре оперируешь сдвигами с переданным значением, не прописывая заново путь (например, Workbooks().Worksheets().Range() ) к исходному диапазону. Я правильно понимаю, что при передаче переменной типа Range (ну и вообще переменных именно с объектами) передаются также и остальные свойства объекта, а не только явно отраженное содержимое?

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому +2

      Здравствуйте, Николай!
      Да, Вы всё верно поняли - переменные содержат в себе всю связанную с объектом информацию, и именно этим они прекрасны и важны. Кстати, легче воспринимать объектные переменные как ссылки на реальные объекты, об этом можете подробнее узнать из следующего видео: ua-cam.com/video/PLaDtatnJjM/v-deo.html
      С уважением и хороших Вам выходных,
      Билял

  • @yflow5337
    @yflow5337 Рік тому

    Благодарю за отличный развернутый урок! А нет ли способа программно подключать или выключать библиотеки, через доступ к Среде VBA и управления настройками проекта? Тогда удалось бы объединить преимущства позднего и раннего связываний.

  • @bananamastersup
    @bananamastersup 2 роки тому

    Спасибо за урок и за задачку! Решил сам, но в рамках одной процедуры. Сделал динамический массив, чтобы была возможность отправки писем автоматически при добавлении клиентов. Немного поломал голову с переносом текста на другую строку. В итоге тоже нашел vbNewLine.
    Заметил одну проблему: при отправке или при закрытие письма (miNewMail.Send/ miNewMail.Close olDiscard) при повторении цикла со следующим клиентом выскакивает ошибка Run-time error '462': The remote server machine does not exist or is unavalible.
    При этом, если с письмом ничего не делать (не закрывать или не отправлять), цикл работает корректно

  • @kingoftime9279
    @kingoftime9279 5 місяців тому

    Здраствуйте, подскажите вопрос. При запуске макросов выскакивает надпись Can t find project or library, это говорит о том что у меня не подключены библиотеки ? Пытаюсь дальше включить Tools/Peferences - выскакивают не активации библиотек а password, Это значит кто то в этих настройках поставил пароль ??

  • @IvZakh
    @IvZakh Рік тому

    Здравствуйте Билял.
    Подскажите, пожалуйста, как вставить таблицу в outlook? И как вставить файл excel в outlook?
    Спасибо!

  • @user-dj7dh4yl8j
    @user-dj7dh4yl8j 4 роки тому +2

    Отличный канал! Спасибо за граммотное изложение материала. А возможно ли с Эксель отправлять смс сообщение с персональной информацией?

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому +1

      Здравствуйте, Алексей!
      Всегда пожалуйста, рад помочь! 😊
      Напрямую из Excel отправлять СМС невозможно - но, возможно, есть Add-In сторонних разработчиков (скорее всего платные). В принципе, также можно было бы рассмотреть вариант с отправкой СМС через Internet Explorer с сайтов с подобными услугами.
      С уважением,
      Билял

  • @user-sc6wz7ni9v
    @user-sc6wz7ni9v 3 роки тому

    Подскажите у меня нет MICROSOFT OUTLOOK 16.0 OBJECT LIBRARY. Нет в принципе не чего на Outlook/

  • @user-cr1ez4ub6g
    @user-cr1ez4ub6g Місяць тому

    А если я решу писать в late binding, то где искать значение констант?

  • @user-zm4wf8im7b
    @user-zm4wf8im7b 4 роки тому +1

    Здравствуйте, Билял. Есть такая трудность в Excel. Есть массив цифр, например 1, 2, 3, 4 7, 9, 12, 13, 14, 15, 18. Мне нужно представлять их как 1-4, 7, 9, 12-15, 18. То есть все цифры которые идут по порядку должны для краткости писаться через тире, ну а те которые не по порядку должны перечисляться через запятую. Помогите, пжста, написать подобный код. Спасибо!

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому

      Здравствуйте, Сергей!
      Я быстро набросал следующий вариант, работающий как вспомогательный макрос. Попробуйте его:
      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
      Как было сказано, макрос был быстро написан. Я него немного потестировал, надеюсь учёл все нюансы. Вы потестируйте тоже его, и сообщите мне, пожалуйста, если будут какие-заметки 😊
      С уважением,
      Билял

  • @user-qn5by5iv7u
    @user-qn5by5iv7u 2 роки тому

    2021