Работа с умной таблицей на VBA. Часть 2
ฝัง
- เผยแพร่เมื่อ 27 พ.ย. 2024
- ► Доступ к БЕСПЛАТНЫМ урокам - lk.1excel.ru/
► Продвинутый Курс по Excel - www.1excel.ru/...
► Макросы и VBA в Excel -1excel.ru/maga...
Урок 2. Работа с Умной таблицей на VBA
В данном уроке продолжаем работать с умной таблицей и кодом VBA. Учимся добавлять новые записи в таблицу через пользовательскую форму (UserForm)
Easy Excel - ПОЛНОЕ и ПОДРОБНОЕ обучение программы Excel для новичков и практиков!
Подписка на канал Easy Excel: / easyexcellesson
Очень толково! Заезжанную тему раскрыть через VBA -- неожиданно. Надеюсь учения VBA продолжатся
Спасибо очень интересно и полезно. Могли бы Вы подсказать как сортировать умную таблицу скажем по времени или по другому столбцу?
мои 2 копейки 8)))
1) удобнее в использовании переменные с именами, начинающимися с маленькой буквы, да и в большинстве языков программирования так принято.
2) даже если язык (бэйсик) позволяет, лучше не давать переменным имена их типов:
' плохой стиль
Dim ListRow as ListRow
' хороший стиль
Dim rows as ListRow
' или, если надо обозначить что переменная хранит List
Dim listRows as ListRow
Да, вы правы, это принято во многих языках. Но у меня 2 причины писать с большой. Во-первых мне лично нравится когда и название переменных и тип переменных начинаются с первой большой буквы. А во-вторых, так как я могу сказать, что я относительно еще новичок в программировании, то пишу с большой буквы, проявляя к ним уважение. А когда стану гуру (если стану), то начну показывать переменным кто тут главный и буду писать их имена с маленькой буквы. =)
Паш. объясни пожалуйста как добавить TDPicker в Excel 2016 на Win 10, или как обойтись без него
@@easyexcellesson Для большинства Вы уже гуру, но правила лучше соблюдать =(
Здравствуйте, Павел!вы гениальный! Я восхищена Вами. Спасибо, что учите нас!
Павел, у меня вопрос:
Имеется уведомление о прибытии иностранного гражданина. ( заполнение по букве в клеточке, клеточки на рассточии). Как можно из таблиуы эксель сделать заполнение этого уведомлентя? Хочется автоматизировать этот процесс. Заранее спасибо .
Здравствуйте! Нужен ваш пример в файле, пришлите, подскажу - info@1excel.ru
@@easyexcellesson хочу приобрести ваш курс.я приобрету и скину файл.
А можно ли добавить чтобы поле менеджер или поле категория заполнялось из определенного списка, т.е. нельзя писать произвольное?
Здравствуйте. Можно скачать календарь на взломанный 2019? Или можно просто оставить txb?
Добрый день! Подскажите пожалуйста, как установить календарь на версию 2010 года?
Здравствуйте! Выдает ошибку - shgeneral = nothing
почему то отсутствует userform на макбуке
добрый день, подскажите пожалуйста как из формы с listbox добавлять в умную таблицу выбранные данные? спасибо
получить данные из listbox можно только при помощи цикла. У Листбокса есть свойство List, которое возвращает элемент списка стоящий на пересечении указанных строки и столбца - List (row, column). Посмотрите, как работать с листбоксом в цикле и со свойством List
Спасибо Вам большое за скорый ответ. Ценю Вашу работу и отзывчивость. Уже не первый раз быстро отвечаете на потребность своих подписчиков. Я признаюсь, я только делаю свои первые шаги в VBA и конечно делаю это неправильно, а именно не начав с азов, стараюсь брать сложные задачи на себя. Тем не менее, я с задачами зачастую справляюсь, а вот как работает каждый процесс не понимаю. Можно еще Вас побеспокоить? Мне буквально нужен ответ Ваш, даже не помощь. У меня такая ситуация: я хочу создать master.xlsm, который будет "собирать" определенные значения с других файлов и производить с ними манипуляции. Суть вопроса в том, может ли VBA сделать следующее: в мастер файле, на одном из листе будет большой список товаров, этот список я привяжу к listbox, который будет всплывать при открытии файла. Пользователь выбирает из этого listbox-а определенные товары, нажимает "рассчитать", и VBA должен просмотреть все файлы в определенной папке с заказами, не открывая их, найти выбранные данные, извлечь цену на выбранные данные, сложить, поделить и в итоге высветить в мастер файле msgbox с итогом калькуляции по каждому файлу-заказу? Резюмируя, мой вопрос в том, может ли VBA произвести калькуляцию в уме или же придется сначала подтягивать данные из каждого заказа в мастер файл, а потом чтобы он считал? Спасибо большое.
В вашем случае файлы придется все равно открывать. Excel не сможет взять данные, если файлы закрыты. Но вы их можете открыть в фоновом режиме (Application.ScreenUpdating = False), тогда пользователь не будет видеть эти файлы. Только потом их надо также закрыть и включить обновление экрана (Application.ScreenUpdating = True). А сами данные из файлов можно загнать в массив и потом с ними произвести необходимые вычисления. Посмотрите, как работать с массивом.
Я это все понимаю, вопрос в другом. Я правильно понимаю, что в уме VBA калькуляцию не сможет произвести и все равно придется с каждого файла подтягивать данные в массив и потом производить калькуляцию?
А что значит "в уме"? Не совсем понимаю. Сложно говорить, когда нет понимания ваших файлов и расчетов, которые вы хотите делать. Но можно просто загонять данные в переменные и с ними производить вычисления, если у вас такое возможно. Тогда массив не нужен
Set ShGeneral = ThisWorkbook.Worksheets("Название листа")
Как заменить Worksheets("Лист1") , где лист1 - это его название, ан не имя?
Названием листа может быть переменная. Ее можно легко заменить
@@easyexcellesson там возникает ряд сложностей. Сделал так.
ThisWorkbook.Activate 'строка не обязательна если работать в одной книги
Set Tab_1 = Лист1.ListObjects("Таблица1")
Вамблагодарность и лайк =)
Здравствуйсте. Сделал простую умную таблицу из двух столбиков. Создал форму с Listbox-ом с мультивыбором, где подтягивается перечень продуктов. К кнопке прописал код, но при нажатии на кнопку добавляется одна пустая строка в таблицу, что я сделал не так?
Private Sub CommandButton1_Click()
Dim SheetGen As Worksheet
Dim ListObj As ListObject
Dim ListRow As ListRow
Set SheetGen = ThisWorkbook.Worksheets("Лист1")
Set ListObj = SheetGen.ListObjects("Основная_tb")
Set ListRow = ListObj.ListRows.Add
If GeneralForm.ListBox1.Selected(x) Then
ListRow.Range(1) = GeneralForm.ListBox1.Value
End If
End Sub
Спасибо большое за отзывчивость и помощь
Данные из листбокса, как я вам писал, можно получить только при помощи цикла и свойства List.
В вашем случае следует написать вот так:
For i = 0 To GeneralForm.ListBox1.ListCount - 1
If GeneralForm.ListBox1.Selected(i) Then
ListRow.Range(1) = GeneralForm.ListBox1.List(i)
Next
а вот такая конструкция List(i, 1) вернет вам второй столбец листбокса. Первый столбец в листбоксе нулевой
Свернуть
отлично, добавил End If, но вот добавляет ТОЛЬКО одну последнюю выбранную запись из многочисленных выбранных в листбоксе(
а как вы выбираете несколько строк в листбоксе? По-моему выбрать можно только одну строку? ВОт она и должна добавляться. Если не добавляется выбранная строка, то где-то скорее ошибка.
Easy Excel в свойствах листбокса есть пункт multiselect
А, вы про это?! Данная конструкция работает только с выделением одной строки. С таким вариантом еще не сталкивался. Попробуйте погуглите данный вопрос.
2021
здравствуйте. спасибо за видио. у меня возникла проблема: я делала вместе с вами, но когда писала ListRow.Range(1)=GeneralForm.txb.date.Value у меня нет "Value" Что делать?
Проверьте правильность написания текстового поля после ввода GeneralForm. После точки выбирайте из выпадающего списка ваш textbox. Скорее всего вы просто ошиблись в его названии
А может быть такое что его нет в списке и его нужно добавить или это функция всегда есть
Срасибо
Если вы не дали название этому полю, то его в списке не будет. Присвоение имени текстовому полю надо делать обязательно. Ну в крайнем случае, использовать название по умолчанию, что я не советую!
Спасибо