Объектные переменные: Пример с Workbook - Worksheet - Range - Новый курс VBA (4)
Вставка
- Опубліковано 16 жов 2024
- Ссылка на файлы для упражнения: drive.google.c...
Привет! В сегодняшнем видео мы рассмотрим второй тип переменных в VBA - объектные перемененные. Поэтому мы узнаем, как объявлять и «привязывать» объектные переменные и как их применять в своём коде.
В этом видео мы будем фокусироваться на основных объектах в Excel - Workbooks (рабочие книги), Worksheets (рабочие листы) and Ranges (ячейки, или, иначе говоря, области ячеек в VBA).
Помимо этого, в этом видео мы также рассмотрим один из основных функционалов окна Immediate Window в VBA - Debug.Print: вывод значений в этом окне, который помогает тестировать и отлаживать программы в VBA.
Ну и как обычно, в конце этого видео тебя ожидает практическое упражнение для закрепления полученных новых знаний.
Приятного просмотра! 😊
Идеальная речь! Восхитительная структура подачи материала... Как елей на уши.. Материал ложится настолько правильно и легко... Спасибо большое за Ваш труд!!! А я еще слушаю на 2х... И это отдельная сказка.. Хочется еще и еще)
Благодарю за ваши старания, материал, подача и доля юмора, просто на высоте.
ОГРОМНОЕ СПАСИБО за то что вы делаете. Вы очень доступным и понятным языком доносите материал для зрителя. Пожалуйста, продолжайте это делать, поскольку, это очень сильно помогает в обучении.
Контент реально полезный, я прям по полочкам все разбираю, но думаю кто базово английский не знает тяжелей всех приходится 😥
Браво, Маэстро! Превосходное качество изложения! Я тоже хочу освоить VBA , но в моём преклонном возрасте заходит только на скорости 0,75 : )))
Спасибо Большое за подробную инфо по уроку.
сделал решение не в первом VBA Task 3 WorkbookFrom - файле, как в конце видео урока,
а во втором файле VBA Task 3 WorkbookTo - используя ThisWorkBook и полный путь первого файла!
Спасибо, очень увлекательно узнавать новое! также понравилось решение с замедлением, для выделения смысла высказывания ;)
Шикарное видео. Отличный курс. Огромное вам спасибо
У меня в упражнении, где определялись названия активных книги, листа и адреса активной ячейки, когда выбрана ячейка в Книге2 - в сообщении упорно показывало имена и адрес ячейки в Книге1. Присмотревшись, обнаружил, что Книга2 не отображается в окне Project, хотя реально была открыта. Долго не мог понять почему. Оказывается я открывал Книгу2 не комбинацией клавиш Ctrl + N, а нажимая ярлык Excel. И таким образом открывал новый экземпляр приложения Excel.
Спасибо за труд
Спасибо за урок!
У меня похоже vba по другому настроен.
При указании адреса книги нужно обязательно указывать формат. т.е. "Book1.xlsm". У вас же просто "Book1".
у меня также. Вы нашли как убрать расширение из названия?
Да у меня таже проблема ((
Контент отличный. Очень интересно.
Но не совсем понятное решение поставленной задачи в конце видео. Если бы листы в книгах имели разные имена, то этот код не работал бы. Ведь так идет запрос из активных ячеек, а в коде указывается книга с пустыми ячейками. Я правильно понимаю?
Можно ли назвать моё решение верным?
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
На мой взгляд: да, конечно! Оно работает так, как должно было работать по заданию. Без копи паста и функций Value.
Спасибо! с интересом изучаю ваш курс. Однако, задание к этому уроку некорректно сформулировано, т.к. в нем сказано, что нужно перенести значения из таблицы в соответствующие ячейки, но не сказано, что я чейки нужно выбирать поочередно и каждый раз запускать макрос. Такое решение никак не следует из задания.
Спасибо за курс, очень крутой, правда после просмотра ответа как то даже грустновато стало, веть я не так понял задание и потратил 1-1.5, попытки понять и дополнительное изучение циклов, что бы написать код, который перенёс сражу всю таблице из from в To, как бы получилось, но как бы так грустно, что такое лёгкое задание было, а я его сам переусложнил
Спасибо! В отличие от ваших примеров, мне приходится прописывать имя воркбука вместе с расширением Workbooks("VBA_Test.xlsm"), без расширения он не видит этот воркбук, это где-то отключается?
Названия переменный значительно сложней в написании значения переменной :)
Добрый день!
Могли бы Вы подсказать почему разный 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
Спасибо 🤗
Не помешало бы намекнуть, как осуществить копирование всей таблицы (или выделенного диапазона),
а не выборочно отдельных ячеек...
В чем разница между старым курсом по VBA Excel и этим новым плейлистом
я бы хотел позаниматься с вами программированием в ексель за плату, если интересно, напишите, может уже неактуально для вас?
Добрый день.
Выдает ошибку Run-time error 9 subscript out of range
Sub learningObjectVariables()
Dim wbOurWorkbook As Workbook
Set wbOurWorkbook = Workbooks("Book1")
помечает желтым последнюю строчку, что не так ?
возможно у вас русский офис. пишите "книга№" по русски.
У меня Msgbox показывает результат False (в чем ошибка)
Спасибо большое за уроки, очень познавательно. У меня проблема на 15:32, после клика на + Excel подвисает.
Такая же проблема. Закрыл, открыл заново и все заработало
а зачем так усложнять решение задания?) можно же в 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
Тоже думал, что автор приведет подобный пример. Однако, он решил подробней разобрать способ работы с ActiveSheet и ActiveCell. В итоге его пример получился в этом плане даже интересней (хотя и подобный краткий код тоже было полезно разобрать). И, видимо, твое сообщение также было адресовано к зрителям, как возможное решение (иначе зачем оно здесь, когда Билял и без нас это все прекрасно умеет), так что следовало вместо "Object" написать "Range", так было бы более грамотно и понятно. Не забывай, что данный плейлист в большей степени ориентирован на новичков VBA.
Потому что явное указание позволяет избежать ошибок, что актуально на больших проектах. И работает быстрее. Приведенный Вами код небезопасен. Можно спокойно выстрелить себе в ногу.
Русским по белому было объяснено, почему Индекс книги (листа) не желательно использовать. Внимательнее слушайте.
мне как новичку непонятно, откуда взялось "object" в этом коде, и что оно значит, в каких случаях надо использовать.
Также непонятно, почему, раз мы указали свойство "object", то нет сокращения перед "DataFrom" и "DataTo", например, obDataFrom.
Попыталась решить максимально по уроку, вышло так:
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") Ничего конечно не получалось.
я тоже пыталась по уроку..но решение другое (
а я то думал, почему, когда я приравниваю только по одной ячейке все работает, а как указываю диапазон - ничего не происходит.
А что именно у вас не получилось? Я повторил Ваше решение - работает.
@@ИгорьГерасименко-у3ц
wsto.Range("B3:J13") = wsfrom.Range("B3:J13") - первая попытка скопировать данные из файла в файл (не работает)
wsto.Value = wsfrom.Value - вторая попытка оказалась рабочей
На тот момент я не знала ни Value, ни Copy, пыталась написать как могла)
Что значит, листы должны быть доступными? У меня такая ошибка и выводиться.
файл VBA Task 3 WorkbookTo - Bill K не скачивать, а новую книгу2 создать, тогда все проходит
@@glebkravtsov2385 спасибо!
не знаю что на компе пишу workbooks("book4") - pishet out of range , если индекс то норм , также на ноуте название пишу все работает , хотя все открыто .
я столкнулась с такой же проблемой. Добавьте в название расширение файла. например, ("book4.xlsx") .. Так работает. Я еще не разобралась, почему на одних компах нужно обязательно добавлять расширение файла, а на других нет.. Возможно, где то в настройках что-то поменять нужно...
Ctr+N 2-00
13:15 Переменная в итоге будет привязана. БУДЕТ ПРИВЯЗАНА...🤣🤣🤣
CTR+N
Готово
2021
Автор, почему ты не используешь русский язык ? Все таблицы и названия листов на латинице , из за этого возникает путаница ! Приходится догадываться, это команда VBA или какое то выдуманное название ?
Нужно разбить видео на более короткие с практикой минут по 7-10 , так как за эти 20 минут манипуляций теряется связь , и для выполнения конечного задания уже становится сложно вспомнить что было в начале, хоть и было легким. Лучше разбить на легкие короткие задания и потом крупное итоговое .. так к выполнению можно подойти с уже наработанной практикой в 2-3 задания, а не пересматривать с начала несколько раз составляя макрос и вспоминая что куда создавая кашу в голове.
Да почему у тебя все задания на английском! Раздражает до жути!
Проще говоря, автор решил следующим образом:
Sub n4()
Dim C As Range
Set C = Workbooks("VBA-To").Worksheets(ActiveSheet.name).Range(ActiveCell.Address)
C.Value = ActiveCell.Value
End Sub
НА ВСЯКИЙ СЛУЧАЙ
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
Спасибо!