Объектные переменные: Пример с Workbook - Worksheet - Range - Новый курс VBA (4)

Поділитися
Вставка
  • Опубліковано 16 жов 2024
  • Ссылка на файлы для упражнения: drive.google.c...
    Привет! В сегодняшнем видео мы рассмотрим второй тип переменных в VBA - объектные перемененные. Поэтому мы узнаем, как объявлять и «привязывать» объектные переменные и как их применять в своём коде.
    В этом видео мы будем фокусироваться на основных объектах в Excel - Workbooks (рабочие книги), Worksheets (рабочие листы) and Ranges (ячейки, или, иначе говоря, области ячеек в VBA).
    Помимо этого, в этом видео мы также рассмотрим один из основных функционалов окна Immediate Window в VBA - Debug.Print: вывод значений в этом окне, который помогает тестировать и отлаживать программы в VBA.
    Ну и как обычно, в конце этого видео тебя ожидает практическое упражнение для закрепления полученных новых знаний.
    Приятного просмотра! 😊

КОМЕНТАРІ • 62

  • @Алена-ч8п6х
    @Алена-ч8п6х 3 роки тому +7

    Идеальная речь! Восхитительная структура подачи материала... Как елей на уши.. Материал ложится настолько правильно и легко... Спасибо большое за Ваш труд!!! А я еще слушаю на 2х... И это отдельная сказка.. Хочется еще и еще)

  • @Max-fe4wr
    @Max-fe4wr Рік тому +2

    Благодарю за ваши старания, материал, подача и доля юмора, просто на высоте.

  • @ГеоргМорез
    @ГеоргМорез 3 роки тому +10

    ОГРОМНОЕ СПАСИБО за то что вы делаете. Вы очень доступным и понятным языком доносите материал для зрителя. Пожалуйста, продолжайте это делать, поскольку, это очень сильно помогает в обучении.

  • @pavelpruss5220
    @pavelpruss5220 3 роки тому +5

    Контент реально полезный, я прям по полочкам все разбираю, но думаю кто базово английский не знает тяжелей всех приходится 😥

  • @olgamaximenko3763
    @olgamaximenko3763 3 роки тому +9

    Браво, Маэстро! Превосходное качество изложения! Я тоже хочу освоить VBA , но в моём преклонном возрасте заходит только на скорости 0,75 : )))

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

    Спасибо Большое за подробную инфо по уроку.
    сделал решение не в первом VBA Task 3 WorkbookFrom - файле, как в конце видео урока,
    а во втором файле VBA Task 3 WorkbookTo - используя ThisWorkBook и полный путь первого файла!

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

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

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

    Шикарное видео. Отличный курс. Огромное вам спасибо

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

    У меня в упражнении, где определялись названия активных книги, листа и адреса активной ячейки, когда выбрана ячейка в Книге2 - в сообщении упорно показывало имена и адрес ячейки в Книге1. Присмотревшись, обнаружил, что Книга2 не отображается в окне Project, хотя реально была открыта. Долго не мог понять почему. Оказывается я открывал Книгу2 не комбинацией клавиш Ctrl + N, а нажимая ярлык Excel. И таким образом открывал новый экземпляр приложения Excel.

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

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

  • @ЕгорМельчаев-щ7д
    @ЕгорМельчаев-щ7д 3 роки тому +16

    Спасибо за урок!
    У меня похоже vba по другому настроен.
    При указании адреса книги нужно обязательно указывать формат. т.е. "Book1.xlsm". У вас же просто "Book1".

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

      у меня также. Вы нашли как убрать расширение из названия?

    • @sladkaia_vita3864
      @sladkaia_vita3864 10 місяців тому

      Да у меня таже проблема ((

  • @nikolairohn6874
    @nikolairohn6874 3 роки тому +2

    Контент отличный. Очень интересно.
    Но не совсем понятное решение поставленной задачи в конце видео. Если бы листы в книгах имели разные имена, то этот код не работал бы. Ведь так идет запрос из активных ячеек, а в коде указывается книга с пустыми ячейками. Я правильно понимаю?

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

    Можно ли назвать моё решение верным?
    Sub taskSolution()
    Dim wbFrom As Workbook, wbTo As Workbook
    Set wbFrom = Workbooks("VBA Task 3 WorkbookFrom - Bill K.xlsm")
    Set wbTo = Workbooks("VBA Task 3 WorkbookTo - Bill K.xlsm")
    Dim orderlist As Variant
    orderlist = wbFrom.Worksheets("Orders").Range("B3:J13")
    wbTo.Worksheets("Orders").Range("B3:J13") = orderlist
    End Sub

    • @alexandersotnikov2149
      @alexandersotnikov2149 2 роки тому +1

      На мой взгляд: да, конечно! Оно работает так, как должно было работать по заданию. Без копи паста и функций Value.

  • @АннаТомилина-б1п

    Спасибо! с интересом изучаю ваш курс. Однако, задание к этому уроку некорректно сформулировано, т.к. в нем сказано, что нужно перенести значения из таблицы в соответствующие ячейки, но не сказано, что я чейки нужно выбирать поочередно и каждый раз запускать макрос. Такое решение никак не следует из задания.

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

    Спасибо за курс, очень крутой, правда после просмотра ответа как то даже грустновато стало, веть я не так понял задание и потратил 1-1.5, попытки понять и дополнительное изучение циклов, что бы написать код, который перенёс сражу всю таблице из from в To, как бы получилось, но как бы так грустно, что такое лёгкое задание было, а я его сам переусложнил

  • @СергейКостычев-х1о

    Спасибо! В отличие от ваших примеров, мне приходится прописывать имя воркбука вместе с расширением Workbooks("VBA_Test.xlsm"), без расширения он не видит этот воркбук, это где-то отключается?

  • @enott
    @enott Рік тому +2

    Названия переменный значительно сложней в написании значения переменной :)

  • @МаксимШвець-р9ч

    Добрый день!
    Могли бы Вы подсказать почему разный UsedRange?
    При таком написании кода UsedRange правильный
    Set wb = ThisWorkbook
    Set ws = wb.Worksheets(1)
    Set wsActiveSheet = wb.ActiveSheet
    Set MyRange = ActiveSheet.UsedRange
    а при таком неправильный
    Set wb = ThisWorkbook
    Set ws = wb.Worksheets(1)
    Set wsActiveSheet = wb.ActiveSheet
    Set MyRange = wsActiveSheet.UsedRange

  • @Регинка-к4в
    @Регинка-к4в 3 роки тому +1

    Спасибо 🤗

  • @SV-13
    @SV-13 2 роки тому +3

    Не помешало бы намекнуть, как осуществить копирование всей таблицы (или выделенного диапазона),
    а не выборочно отдельных ячеек...

  • @АлександрПокровский-к4ь

    В чем разница между старым курсом по VBA Excel и этим новым плейлистом

  • @СергейЩепилин
    @СергейЩепилин Рік тому

    я бы хотел позаниматься с вами программированием в ексель за плату, если интересно, напишите, может уже неактуально для вас?

  • @РоманМарихин
    @РоманМарихин 2 роки тому

    Добрый день.
    Выдает ошибку Run-time error 9 subscript out of range
    Sub learningObjectVariables()
    Dim wbOurWorkbook As Workbook
    Set wbOurWorkbook = Workbooks("Book1")
    помечает желтым последнюю строчку, что не так ?

  • @СергейЛиньков-в7ф
    @СергейЛиньков-в7ф 10 місяців тому

    У меня Msgbox показывает результат False (в чем ошибка)

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

    Спасибо большое за уроки, очень познавательно. У меня проблема на 15:32, после клика на + Excel подвисает.

  • @Алексей-ф3и7р
    @Алексей-ф3и7р 4 роки тому +10

    а зачем так усложнять решение задания?) можно же в 3 строки всего сделать и без копипаста (5 с указанием типа данных)
    Dim DataFrom As Object
    Dim DataTo As Object
    Set DataFrom = Workbooks(1).Worksheets(1).Range("B3:J13")
    Set DataTo = Workbooks(2).Worksheets(1).Range("B3:J13")
    DataTo.Value = DataFrom.Value

    • @ДенисБогатырев-э7к
      @ДенисБогатырев-э7к 4 роки тому +9

      Тоже думал, что автор приведет подобный пример. Однако, он решил подробней разобрать способ работы с ActiveSheet и ActiveCell. В итоге его пример получился в этом плане даже интересней (хотя и подобный краткий код тоже было полезно разобрать). И, видимо, твое сообщение также было адресовано к зрителям, как возможное решение (иначе зачем оно здесь, когда Билял и без нас это все прекрасно умеет), так что следовало вместо "Object" написать "Range", так было бы более грамотно и понятно. Не забывай, что данный плейлист в большей степени ориентирован на новичков VBA.

    • @ИванМанченко-ж3г
      @ИванМанченко-ж3г 2 роки тому +1

      Потому что явное указание позволяет избежать ошибок, что актуально на больших проектах. И работает быстрее. Приведенный Вами код небезопасен. Можно спокойно выстрелить себе в ногу.

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

      Русским по белому было объяснено, почему Индекс книги (листа) не желательно использовать. Внимательнее слушайте.

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

      мне как новичку непонятно, откуда взялось "object" в этом коде, и что оно значит, в каких случаях надо использовать.
      Также непонятно, почему, раз мы указали свойство "object", то нет сокращения перед "DataFrom" и "DataTo", например, obDataFrom.

  • @KyklaKolduna
    @KyklaKolduna 3 роки тому +2

    Попыталась решить максимально по уроку, вышло так:
    Dim wsfrom As Range
    Set wsfrom = Workbooks("VBA Task 3 WorkbookFrom - Bill K.xlsm").Worksheets("Orders").Range("B3:J13")
    Dim wsto As Range
    Set wsto = Workbooks("VBA Task 3 WorkbookTo - Bill K.xlsm").Worksheets("Orders").Range("B3:J13")
    wsto.Value = wsfrom.Value
    Но Value мы не проходили и я написала wsto.Range("B3:J13") = wsfrom.Range("B3:J13") Ничего конечно не получалось.

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

      я тоже пыталась по уроку..но решение другое (

    • @ДенисЯковлев-ю8ч
      @ДенисЯковлев-ю8ч Рік тому

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

    • @ИгорьГерасименко-у3ц
      @ИгорьГерасименко-у3ц Рік тому

      А что именно у вас не получилось? Я повторил Ваше решение - работает.

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

      @@ИгорьГерасименко-у3ц
      wsto.Range("B3:J13") = wsfrom.Range("B3:J13") - первая попытка скопировать данные из файла в файл (не работает)
      wsto.Value = wsfrom.Value - вторая попытка оказалась рабочей
      На тот момент я не знала ни Value, ни Copy, пыталась написать как могла)

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

    Что значит, листы должны быть доступными? У меня такая ошибка и выводиться.

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

      файл VBA Task 3 WorkbookTo - Bill K не скачивать, а новую книгу2 создать, тогда все проходит

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

      @@glebkravtsov2385 спасибо!

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

    не знаю что на компе пишу workbooks("book4") - pishet out of range , если индекс то норм , также на ноуте название пишу все работает , хотя все открыто .

    • @SNS_2104
      @SNS_2104 2 роки тому +1

      я столкнулась с такой же проблемой. Добавьте в название расширение файла. например, ("book4.xlsx") .. Так работает. Я еще не разобралась, почему на одних компах нужно обязательно добавлять расширение файла, а на других нет.. Возможно, где то в настройках что-то поменять нужно...

  • @Математика5класс-о1ь

    Ctr+N 2-00

  • @ДобрыйМориарти

    13:15 Переменная в итоге будет привязана. БУДЕТ ПРИВЯЗАНА...🤣🤣🤣

  • @alex-em4em
    @alex-em4em 10 місяців тому

    Готово

  • @АлексейСоков-ь8и
    @АлексейСоков-ь8и 3 роки тому +2

    2021

  • @Rusia-16
    @Rusia-16 2 роки тому +1

    Автор, почему ты не используешь русский язык ? Все таблицы и названия листов на латинице , из за этого возникает путаница ! Приходится догадываться, это команда VBA или какое то выдуманное название ?

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

    Нужно разбить видео на более короткие с практикой минут по 7-10 , так как за эти 20 минут манипуляций теряется связь , и для выполнения конечного задания уже становится сложно вспомнить что было в начале, хоть и было легким. Лучше разбить на легкие короткие задания и потом крупное итоговое .. так к выполнению можно подойти с уже наработанной практикой в 2-3 задания, а не пересматривать с начала несколько раз составляя макрос и вспоминая что куда создавая кашу в голове.

  • @glazastjy
    @glazastjy 3 роки тому

    Да почему у тебя все задания на английском! Раздражает до жути!

  • @ДобрыйМориарти

    Проще говоря, автор решил следующим образом:
    Sub n4()
    Dim C As Range
    Set C = Workbooks("VBA-To").Worksheets(ActiveSheet.name).Range(ActiveCell.Address)
    C.Value = ActiveCell.Value
    End Sub

  • @Александр-ж2й7с
    @Александр-ж2й7с 2 роки тому

    НА ВСЯКИЙ СЛУЧАЙ
    Sub DoLOOPExitDo2()
    Dim DZ As String
    Dim i As Long
    i = 1
    Do Until DZ = "OK" Or DZ = "ok" 'Англ язык
    DZ = InputBox("НЕ пишите OK и цикл повторится" & vbNewLine _
    & "Цикл уже повторился " & i & " раз(а)")
    i = i + 1

    Loop
    End Sub

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

    Спасибо!