TextBox & CommandButton VBA - Передача значений - UserForms (10)

Поделиться
HTML-код
  • Опубликовано: 29 авг 2024
  • Ссылка на скачивание файла в версии из этого видео: drive.google.c...
    Привет! Давай продолжим изучение пользовательских форм в VBA. В рамках нашей серии практических видео по созданию формы с нуля мы сегодня разработаем собственные алгоритм передачи данных из пользовательской формы в Data Table, умной таблицы, принцип работы которой мы рассмотрели в предыдущем видео.
    В этом видео мы добавим на разрабатываемую пользовательскую форсу элементы управления следующих двух типов - TextBox и CommandButton, пропишем им стандартизированные тэги и разработаем базирующийся на цикле For Each принцип проработки отдельных элементов управления.
    Приятного просмотра! 😊

Комментарии • 63

  • @SamSambl4
    @SamSambl4 4 года назад +9

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

    • @BilyalKhassenov
      @BilyalKhassenov  4 года назад +2

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

  • @user-gx5um9fc5f
    @user-gx5um9fc5f 4 года назад +5

    Билял, очень красиво и элегантно! Возьму на вооружение. Спасибо!!!

    • @BilyalKhassenov
      @BilyalKhassenov  4 года назад +1

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

  • @romancompasscrete2681
    @romancompasscrete2681 3 года назад +1

    Как раз в мою тему !
    Занимаюсь арендой авто .Фирма маленькая еще поэтому пока все записи на бумаге . Но тут недавно увидел в интернете видео на английском система бронирования для отелей в эксель .Меня очень заинтересовало и после этого начал вникать в эксель . По английский понимаю и говорю но не на столько .к тому же он рассказывает очень быстро и без подробностей . Интернет мне в помощь - Начал рыться на русских сайтах и форумах не чего похожего нет . На одном из форумов направили можно так сказать на путь и показали несколько возможностей эксель по моей теме и мол "а дальше сам "но и на этом спасибо ! Начал искать как видео по Usreform нашел вас. Стал смотреть весь плэйлист ,но вы превзошли все мои ожидания ! я же говорю на русских ресурсах не чего похожего нет НИ по отелям НИ по аренде авто .
    Еще бы создали видео "как данный с формы заказа внести в диаграмму "
    Было бы СУПЕР !
    Респект !
    подписываюсь

  • @zloomailutube3004
    @zloomailutube3004 4 года назад +4

    Спасибо, Вам, Билял, за все Ваши ролики! Все круто - быстро, где можно "прокрутить"; помедленней, где нужно повнимательней посмотреть; плюс в отличие от подавляющего большинства авторов обучающих роликов у Вас еще и с английским проблем нет, а то слушаешь некоторых, аж выключить хочется )) ...Хотя слово "wrap" все-таки произносится как "рэп", а не "роп" (в каком-то предыдущем ролике) :)... Так держать!

    • @BilyalKhassenov
      @BilyalKhassenov  4 года назад +2

      Здравствуйте!
      Большое спасибо за Ваш комментарий и за заметку касательно произношения слова Wrap - взял себе на заметку 😉 Очень жаль правда, что в загруженных видео этого уже никак не изменить. Но да ладно!
      В остальном же, очень рад, что Вы попали на мой канал - приятного просмотра! 😊
      С уважением и хороших Вам выходных,
      Билял

  • @user-po3zj6fl3u
    @user-po3zj6fl3u 4 года назад +4

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

    • @BilyalKhassenov
      @BilyalKhassenov  4 года назад +1

      Здравствуйте, Сергій!
      Всегда пожалуйста! 😊
      С уважением и хорошего Вам дня,
      Билял

  • @user-nb8lv8xg2g
    @user-nb8lv8xg2g 3 года назад +1

    Супер! Билял, мастерское исполнение и объяснение! Осваиваю VBA благодаря Вам.

  • @sevakworld
    @sevakworld 4 года назад +4

    Интересно, но добавления данных надо упростить. Конечно хорошо сделать динамический, но сложно для новичков, а также для визуального восприятия. Думаю это обоснованно когда на форме очень много элементов (поля для ввода). Также знаю, что много элементов на форме не рекомендуется.
    Желательно при проверке подсказывать через MsgBox какие поля необходимо обязательно заполнять и передать фокус.
    С другой стороны один раз написал код и забыл, возьму на заметку. Буду усовершенствовать с учётом выше сказанного, но только при проверке. Добавления данных предпочитаю без заморочками по примеру ниже.
    Огромное спасибо за труд!
    Пример:
    'Добавить в конец
    Public Sub AddListRowEnd(strNameListObj As String, strRowData1 As String, strRowData2 As String, strRowData3 As String)
    Dim ListObj As ListObject
    Dim ListRow As ListRow
    Set ListObj = wsSettings.ListObjects(strNameListObj)
    Set ListRow = ListObj.ListRows.Add(AlwaysInsert:=True)
    With ListRow
    .Range(1) = strRowData1
    .Range(2) = strRowData2
    .Range(3) = strRowData3
    End With
    End Sub
    Место strRowData можно передать одноуровнненый массив данных ...

    • @BilyalKhassenov
      @BilyalKhassenov  4 года назад +1

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

    • @Burbon211
      @Burbon211 2 года назад +1

      Согласен слишком заморочено для новичков, мне просто нужно добавить чертову строку из 6 значений, а я 20 минут слушаю как циклы внесения проверяют циклы проверки и про сплит....:(

    • @Burbon211
      @Burbon211 2 года назад

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

    • @Burbon211
      @Burbon211 2 года назад

      @@lemuriecnoname спасибо кэп, а то я думал его под дулом автомата заставили именно так сделать.

  • @hytreg
    @hytreg 2 года назад

    Спасибо за урок. Круто объясняешь

  • @KarpovEvgeniy
    @KarpovEvgeniy 11 месяцев назад

    Спасибо!

  • @dobrinyanicitich7514
    @dobrinyanicitich7514 2 года назад

    Как вариант, способ присвоения созданной строки, переменной, в одной строке:
    Dim lo As ListObject
    Set lo = ActiveSheet.ListObjects("Таблица1")

    Dim row As ListRow

  • @eleonora4626
    @eleonora4626 2 года назад +2

    Очень подробно, но сложно для восприятия.
    Если бы мы изучали алфавит: А, Б, В, Г, Д и т.д., то выглядело бы это примерно так:
    Вот буква «А» с нее начинаются такие слова как: Арбуз, Автобус, Антресоль. Но может она стоять еще и на втором и третьем месте: Аарон, Анатолий. Также их может быть и по нескольку в слове. Например Ананас, Анатомия.
    В принципе, буква А не обязательно должна быть на первом месте, хотя является наиболее употребимой буквой в русском алфавите.
    Если рассматривать использование буквы а в частях речи, то ее значение….. ну и так далее.
    Пока дойдешь хотя бы до буквы Д, уже и забудешь с чего начинал.
    Подробности важны, но они должны быть к месту, а не лишней информацией в контексте изучаемой темы.
    У меня стояла простая задача: создать с помощью vba диалоговое окно с единственным текстовым полем, в которое вписывалось бы значение, добавляемое в таблицу.
    Убил уже 3 дня, но так еще и не смог реализовать свою задачу.
    Зато узнал про циклы.

  • @alenazurabovna4155
    @alenazurabovna4155 2 года назад +1

    м-да... не для новичков. есть моменты совсем не понятные...запускаю просмотр 4 раз))

  • @user-ly5iq2ze4m
    @user-ly5iq2ze4m 2 года назад

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

  • @ProoF55
    @ProoF55 4 года назад +2

    Спасибо за такие видео! Вопрос только возник: как сделать или что изменить, чтобы данные вписывались в таблицу на другом листе в этой же книге. В основную таблицу все вписывает и все работает, а во вспомогательной таблицы на другом листе создаются только строки, а данные не вписываются(если таблицу перенести на этот же лист, то через махинации будет тоже записываться, но не хочет записывать данные именно на другом листе книги)
    П.с. значение переменной, относящиеся к данной книге и листу менял, все работает, просто значения не вписываются
    Очень жду продолжения!

    • @BilyalKhassenov
      @BilyalKhassenov  4 года назад +2

      Здравствуйте!
      Для этого Вам придётся поправить сам алгоритм внесения значений таким образом, чтобы он распознавал, в какую именно таблицу (основную или вспомогательную) нужно вносить значения. Подобное указание можно вписывать в тэги элементов управления формы, например:
      ИмяЛиста_ИмяDataTable_ИмяСтолбца_ EmptyNotAllowed/EmptyAllowed
      И, следовательно, поправить алгоритм пришлось бы так, чтобы он использовал данные из тэга и соответственно записывал значения.
      С уважением и хороших Вам выходных,
      Билял
      P.S. Пример расширения структуры тэгов элементов управления представлен в следующем видео этого плейлиста 😊

  • @nachfinbolshevik
    @nachfinbolshevik 3 года назад +2

    Здравствуйте!
    В чём может быть ошибка
    Код повторил как у вас в уроке, но при добавлении записи ошибку показывает в строке (специально сравнил код с фала из следующего урока)
    Intersect(rgNewOrderLine, listobjOrderList.ListColumns(strTagArray(0)).DataBodyRange) = objControlChecked.Value
    Пишет subscript out of range. и строка подчёркивается жёлтым

    • @BilyalKhassenov
      @BilyalKhassenov  3 года назад +1

      Здравствуйте!
      Subscript out of Range обычно говорит о том, что нет указываемого столбца в умной таблице - то есть, скажем, Вы обращаетесь к listobjTest.ListColumns(“Проверка1”).DataBodyRange, а в таблице нет столбца, который называется “Проверка1”.
      Посоветовал бы проверить в этом направлении 😊
      С уважением,
      Билял

    • @cryoshell99
      @cryoshell99 Год назад

      Была подобная ошибка, исправил, сделав заголовки таблицы и теги заглавными в кириллице

  • @user-lh3px1sg2w
    @user-lh3px1sg2w 2 года назад

    Билял, приветствую. Про подписи автоматически исчезающие в текст боксах ты не рассказывал в итоге в других видео или я что то пропустил ?

  • @fasciabeautyhealth3623
    @fasciabeautyhealth3623 2 года назад

    Привет! Билял очень позновательные видео я почти все пересмотрел.
    У меня вопрос в пользовательской форме комбобокс не вставляет значение в ячейку проверял несколько раз на ошибки все отлично. может ли проблема в экселе или в области ячеек 🤔

  • @user-mi1sc2fh3o
    @user-mi1sc2fh3o 3 года назад +1

    сначала была ошибка в строке set, поменял listobjects с orderlist на 1 после ошибка в строке intersect, вот с ней не знаю что делать

    • @user-mi1sc2fh3o
      @user-mi1sc2fh3o 3 года назад

      буду рад если кто-то поможет

  • @user-lh3px1sg2w
    @user-lh3px1sg2w 3 года назад +1

    Билял, подскажи пожалуйста, как сделать событие следующего характера. При вводе в текст бокс значения ( В моем случае цифры) , эта цифра в он лайн отображается в заданной ячейке на листе. То есть ввел я 1, тут же в ячейке а1 появилась 1, продолжаю вводить, 2, (12 число уже получилось) в ячейке отобразилось 12 итд. Без кнопки запись или провести.

  • @ppr8117
    @ppr8117 4 года назад +2

    Спасибо! Очень доходчиво! Вопрос: как в TextBox на форме вставить текущую дату по умолчанию? Спасибо

    • @BilyalKhassenov
      @BilyalKhassenov  4 года назад +1

      Здравствуйте!
      Спасибо за Ваш комментарий!
      Поскольку текущая дата динамична и изменяется изо дня в день, я бы вписывал её на Вашем месте в текстбокс при инициализации формы, например вот так:
      Private Sub UserForm_Initialize()
      Me.TextBox1.Value = Application.WorksheetFunction.Text(Date, "DD.MM.YYYY")
      End Sub
      С уважением и хороших Вам выходных,
      Билял
      P.S. Функцию Text я применил для отображения даты в формате "ДД.ММ.ГГГГ", иначе дата будет вписываться в американском формате

    • @ppr8117
      @ppr8117 4 года назад

      Bill K. - Excel & VBA, спасибо!

  • @user-fz6xm6vd6i
    @user-fz6xm6vd6i 2 года назад

    Билял, здравствуйте! Подскажите, как можно доработать предложенный Вами код проверки заполненных TextBox только на одной странице MultiPage в UserForm?

  • @портал-инфо.рф
    @портал-инфо.рф 3 года назад +2

    Доброго дня ! напишите пож ... будет продолжение.... форму мы не доделали... 13 урок прошёл

    • @BilyalKhassenov
      @BilyalKhassenov  3 года назад

      Здравствуйте, Анатолий! Продолжение будет, правда пока не могу сказать, когда именно, так как сейчас делаю упор на новые плейлисты.
      С уважением,
      Билял

  • @SensualSuare
    @SensualSuare 2 года назад

    Я конечно скорее всего ошибаюсь. Но такое ощущение, что функционал такой таблицы такой же как и в случае, если делать это самым простым способом, как было показано в начале видео.

  • @user-fh6kz1gp8m
    @user-fh6kz1gp8m 3 года назад

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

  • @портал-инфо.рф
    @портал-инфо.рф 3 года назад +1

    Ох не получается ... уперся!!! не пойму что день потерял!!

  • @thanderstaff9593
    @thanderstaff9593 3 месяца назад

    Не добавляется строка(((
    "method add of object listrows failed"

  • @user-lh3px1sg2w
    @user-lh3px1sg2w 3 года назад +1

    К первому моему сообщению. И в обратном направлении. В конкретной ячейке появилось значение, оно отображается на листбокс 2 уже. В двух словах зачем мне это.
    В лист бокс1 ввод В значение, оно автоматом записывается в ячейку, в соседнюю ячейку по критерию из а1 подтягиваются значение из таблицы и возвращается в листбокс 2. Почему так, потому что мне проще работать с листами, чем с формами.
    Заранее спасибо. Ты и так очень сильно помог.

    • @BilyalKhassenov
      @BilyalKhassenov  3 года назад

      Здравствуйте, Алексей!
      Всегда пожалуйста, рад что помог! 😊
      В Вашей задаче придётся воспользоваться событийной процедурой Change нужного текстбокса. То есть в нём будут отслеживаться все изменения и сразу же вноситься в нужную ячейку. Вероятнее всего придётся поиграть с модальностью формы.
      С уважением,
      Билял

    • @user-lh3px1sg2w
      @user-lh3px1sg2w 3 года назад +1

      @@BilyalKhassenov спасибо. С уважением.

  • @andreylebedev1053
    @andreylebedev1053 4 года назад +2

    У меня вопрос. Я делаю игру крестики нолики, и чтобы для каждой кнопки не писать в каждом Private sub CommandButton1_Click1()
    CommandButton1.Text="X" или "O"(через if..else)
    я хотел уменьшить код/сделать отдельную программу, которая работала бы для всех 9 кнопок сразу, т.е. нажимая на любую кнопку выполнялась команда выбора "X" или "O"
    Нашёл как это работает в C#там (не знаю ли поможет это объяснить проблему)
    Private void CommandButton1_Click1( object sender, EventArgs e)
    И потом каждый клик на кнопку заполняли таким образом
    Button senderB= (Button) sender а потом уже просто определяли Х или О ставить
    , но в vba никак не могу нагуглить как сделать нечто подобное, ничего толкового не выдает, можете подсказать как это сделать ?Буду премного благодарен

    • @BilyalKhassenov
      @BilyalKhassenov  4 года назад

      Здравствуйте, Андрей!
      По этой ссылке можете скачать пример, с одним из возможных вариантов решения Вашей задачи:
      drive.google.com/file/d/1pe6eqHt6IQ-4X6i_w-h5El_Bu0XbTYdN/view?usp=sharing
      В нём я добавил два опшнбаттона, которые указывают, какой игрок (Х или О) ходит следующим. Нажатие каждой из кнопок посылает во вспомогательную процедуру putXorO своё название. Эта процедура сперва проверяет с помощью опшнбаттонов, какой игрок ходит следующим. Если это Х, то соответствующий символ вписывается в переменную strSignToPut. В противном случае «О».
      После этого при помощи Me.Controls в коммандбаттон, по которому было произведено нажатие, вписывается символ из переменной.
      Посмотрите файл и потестируйте его. Надеюсь, предложенный вариант сможет Вам помочь! 😊
      С уважением и хороших Вам выходных,
      Билял

    • @andreylebedev1053
      @andreylebedev1053 4 года назад

      @@BilyalKhassenov Огромное спасибо! т.к. надо было уже сдавать, сделал все в лоб, меня интересует один вопрос, я тоже пытался сделать через ByVal, но не получалось. Так вот почему, когда мы вызываем функцию через Call, то в скобочках указываем("CommandButton33"), а там куда эта переменная уходит в скобочках стоит(ByVal strCommandButtonName уже), я почему-то думал, что та переменная, которую мы "отправляем" и должна приниматься, т.е. Call putXorO("CommandButton33"), Sub putXorO(ByVal CommandButton33 As String), я правильно понимаю, что при вызове можно отправить значение, а там где оно принимается можно просто задать сразу переменную, т.е. будет так strCommandButtonName="CaommandButton33". Момент c Me.Controls прям открывает глаза, все думал над тем как сделать, чтобы каждый раз при выборе Х или О выбиралась правильно нужное имя кнопки, теперь понял. Еще раз спасибо!Кстати игру сделать такую, чтобы можно было играть против компьютера, правда логика его ходов рандомная, т.к. более сложная не требовалась да и неохота было делать :)

  • @MrVad1964
    @MrVad1964 3 года назад

    Доброго времени суток, Билял. Помогите разрешить мой ступор. Я только начинаю заниматься VBA.
    Не получается передать значение глобальной переменной в форму.
    В VBAProject в папке Forms созданы две формы UserForm1 и UserForm2. В них пользователь вводит некоторые данные, которые затем будут помещены в таблицу по определенным столбцам в заданной ранее строке N. Переменная N объявлена как глобальная и помещена в начало программы. Значение ей присваивается в вызываемой подпрограмме Cell
    пример:
    Public N As Integer
    ___________________________________ ___________________________________ ______________
    Public Sub First() 'модуль2
    Call Cell 'модуль4, в нем N получает значение из Input
    UserForm1.Show 'форма в которой используется переменная N но приходит сюда как равная ноль
    , хотя значение её из Input не ноль
    UserForm2.Show 'cюда N также входит как 0
    End Sub
    Что надо прописать еще , чтобы формы увидели значение N

  • @igornosach9608
    @igornosach9608 4 месяца назад

    Всем привет. А у меня выдает ошибку на строчке (Set listobjOrderList = ThisWorkbook.Worksheets("Исполнительная по электрике").ListObjects("OrderList"))

    • @igornosach9608
      @igornosach9608 4 месяца назад

      run-time error 9 subscript out of range

  • @user-dr5mg3po7o
    @user-dr5mg3po7o 2 года назад

    Вылетает ошибка, что проверяемый объект не может иметь свойство value. Интересно, где ошибка на самом деле :) Upd: Акела промахнулся и подписал тэги к labelам а не к textboxам :) а код абсолютно верный!

  • @Burbon211
    @Burbon211 2 года назад

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

  • @radsy9901
    @radsy9901 3 года назад

    А с вами можно както связатсья ?

  • @user-os3zi1hv2l
    @user-os3zi1hv2l Год назад

    3 РАЗА НАБИРАЛ...НЕ РАБОТАЕТ...простите

  • @konstantinvyacheslavovich8217
    @konstantinvyacheslavovich8217 Год назад

    я случайно наткнулся на это видео и уже 2 день пытаюсь повторить код, он идентичный с тем что даеться в уроке, но по итогу выдет ошибку 9 (out of range) в чем причина пока не разобрался. Вердикт код не работет спустя 3 года я думаю что причина такова.
    Intersect(rgNewOrderLine, listobjOrderList.ListColumns(strTagArray(0)).DataBodyRange) = objControlChecked.Value
    когда начинаешь проверять через дебаг эта страка дется ошибку 9
    решил скачать сам файл разработчика и такая же ошибка.

    • @user-ou7fw1sg1r
      @user-ou7fw1sg1r 7 месяцев назад

      Intersect функцию напиши с большой буквы))) За два ня можно было профиксить ошибку и исправить

  • @user-qn5by5iv7u
    @user-qn5by5iv7u 3 года назад

    2021

  • @user-kv6mu9mb2p
    @user-kv6mu9mb2p 3 года назад +1

    Спасибо!