Взаимодействие макросов - Call - ByVal, ByRef (Серия VBA 13)

แชร์
ฝัง
  • เผยแพร่เมื่อ 23 พ.ย. 2024
  • Всем привет! Касательно изучения темы взаимодействия нескольких процедур в VBA на русскоязычных ресурсах, лично у меня сложилось впечатление, что на эту тему фактически нет хороших уроков. Это видео призвано исправить данную ситуацию!
    Вот что мы с Вами изучим в этом видеоуроке:
    • Фраза Call - для запуска из одной процедуры других процедур
    • Фраза ByVal -для передачи вызываемой процедуре неизменяемого параметра (фактически - значения/переменной) для выполнения определенной работы с этим параметром
    • Фраза ByRef - для передачи вызываемой процедуре изменяемого параметра, в случае изменения которого в вызываемой процедуре, измененной значение направляется обратно в основную процедуру
    • Как задавать несколько параметров для вызываемой процедуры
    И в конце видео мы с Вами также рассмотрим один из примеров решения домашнего задания из предыдущего урока. Всем приятного просмотра! :)

ความคิดเห็น • 82

  • @maksimkisliak4782
    @maksimkisliak4782 3 ปีที่แล้ว +18

    Ты единственный на русскоязычном ютубе, кто толково разжевывает все! Только тебя смотрю каждый раз

  • @АндрейЛесников-з8ч
    @АндрейЛесников-з8ч 5 ปีที่แล้ว +35

    Мега-мега-мегаграмотное изложение материала и продуктивные уроки! Редкость на просторах интернета! Низкий Вам поклон за столь эффективное изложение материала по VBA! Вы педагог от Бога, продолжайте в том же духе! Низкий поклон за труды! Не поленюсь и напишу это коммент по каждым видео курса!!!

    • @BilyalKhassenov
      @BilyalKhassenov  5 ปีที่แล้ว +2

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

    • @walerij
      @walerij 3 ปีที่แล้ว

      Полностью согласен!

  • @alexreznik6485
    @alexreznik6485 5 หลายเดือนก่อน

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

  • @ImmortalBullet88
    @ImmortalBullet88 ปีที่แล้ว +1

    Огромное спасибо, супер курсы. Мне кажется, что этот курс можно вообще всем начинающим программистам давать, не зависимо от языка. Так как тут все подробно рассказывается, все основы!

  • @vasiliyfm7595
    @vasiliyfm7595 4 ปีที่แล้ว +6

    Спасибо, изложение материала самое грамотное и понятное, что я до этого встречал ) При этом если раньше материал усваивался в легкую, то с предыдущего урока стало чувствоваться, что сложность нарастает ))

  • @walerij
    @walerij 3 ปีที่แล้ว +1

    Подверждаю, на эту тему действительно очень мало русскоязычной информации в TH-cam. Чёткое объяснение. Спасибо. Теперь нужно будет подумать, как встроить в моё множество макросов эти ByVal и ByRef. Потому что я их почти не использовал.

  • @МихаилБуев-е1ш
    @МихаилБуев-е1ш 4 ปีที่แล้ว +1

    Очень полезно, столько лет работаю с ВБА, но сути не понимал раньше, просто брал готовые коды в интернете на форумах и пользовался ими, иногда чуток редактируя их, а сейчас решил разобраться и понять, изложение на 5 баллов!

  • @ЕвгенийЛапшин-з1д
    @ЕвгенийЛапшин-з1д 4 ปีที่แล้ว +1

    просмотрел 10 видео и принялся на основе полученных знаний "фиксить" свой говнокод...реально заработало, то что "работало" 2 мин, работает за 2 сек) я капец как был приятно удивлён) Спасибо за проделанную работу и труд, по проведению "ликбеза" (ликвидацию безграмотности)

    • @BilyalKhassenov
      @BilyalKhassenov  4 ปีที่แล้ว

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

  • @ДмитрийПахомов-б6у
    @ДмитрийПахомов-б6у 3 ปีที่แล้ว +7

    А я в 2010 все по книге Джона Уокенбаха учил. Как же везёт молодёжи сейчас!!!

    • @ANABOLIC_007
      @ANABOLIC_007 ปีที่แล้ว

      Легкая доступность повышает конкуренцию. Тут по поводу везения бабушка надвое сказала)

  • @Yevd1977
    @Yevd1977 ปีที่แล้ว

    Я не использовал byval. Просто в скобках передавал переменную. Все работало.
    Ну как её явно объявить при приёме во второстепенной процедуре - не знал. VBA сам определял тип.
    Теперь знаю как.
    Спасибо, Билял.

  • @Rolf22Rus
    @Rolf22Rus 4 ปีที่แล้ว +2

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

    • @BilyalKhassenov
      @BilyalKhassenov  4 ปีที่แล้ว

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

  • @АнтонинаБелорус
    @АнтонинаБелорус 4 ปีที่แล้ว +1

    И да, уроки просто великолепные, спасибо за ваш труд!!)

  • @bananamastersup
    @bananamastersup 3 ปีที่แล้ว +2

    Решил домашнее задание предыдущего урока иначе. Не убирал заголовки для динамичного массива в нижней границе. Вместо этого указал начальное значение массива 2.
    И не создавал два динамичных массива, "выстаскивал" имена учащихся через Offset.
    Sub lessionArrays()
    Dim dynArray() As Long
    Dim lBoundVar As Long
    Dim uBoundVar As Long
    lBoundVar = 2
    uBoundVar = Worksheets(4).Range("C" & Rows.Count).End(xlUp).Row
    ReDim dynArray(lBoundVar To uBoundVar)
    Dim i As Long
    For i = LBound(dynArray) To UBound(dynArray)
    dynArray(i) = ThisWorkbook.Worksheets(4).Range("C" & i)
    MsgBox Range("C" & i).Offset(0, -1).Value & " оценка: " & dynArray(i)
    Next i
    End Sub
    Еще раз спасибо за уроки! Интересно прорешивать домашние задания самому, и сравнивать, как их решают другие.

  • @nesquikttw
    @nesquikttw 3 ปีที่แล้ว +2

    По ДЗ очень усложнил. У меня код в 2 раза короче и работает. Нужно было задание ставить сложнее, чтоб был смысл в диапазонах, иначе все все решается простым For each i in range(cells(#,#), cells(Lastrow,#).

  • @yohohowowowo9471
    @yohohowowowo9471 11 หลายเดือนก่อน

    Это как ребёнка, сначала учить ползать, а потом БЕЖАТЬ. Даже имея небольшой опыт в программировании, от количества информации закипел. Пытался записывать, потом понял, что кода на несколько листов. Изложено хорошо, но с SET промашка, хорошо хоть я знаком с этой функцией, но для большинства людей, это взрыв мозга)))

  • @shavkatpulatov5203
    @shavkatpulatov5203 4 ปีที่แล้ว +3

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

    • @BilyalKhassenov
      @BilyalKhassenov  4 ปีที่แล้ว +1

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

  • @SamSambl4
    @SamSambl4 4 ปีที่แล้ว +3

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

  • @Владимир-ь9е7у
    @Владимир-ь9е7у 3 ปีที่แล้ว +1

    Билял, каакой же Вы молодец!!!

  • @dashok_ro4683
    @dashok_ro4683 4 ปีที่แล้ว +1

    У вас просто потрясающий контент. Больше всего мне нравится момент с домашними заданиями, который заставляет самому прочувствовать , как это применять и заранее проработать некоторые ошибки. Мне кажется блог был бы куда популярнее, если бы демонстрировали видеоуроки по другим ,более востребованным языкам программирования,тк тех, кто действительно доступно, последовательно и нескучно объясняет , не уходя в дебри, не так и много. Спасибо вам большое!!!

    • @BilyalKhassenov
      @BilyalKhassenov  4 ปีที่แล้ว

      Здравствуйте, Дарья!
      Извиняюсь за очень долгий ответ! Большое спасибо за Ваш комментарий - очень рад что видео с канала Вам понравились и приносят пользу.
      Если будут вопросы - всегда пишите (я постараюсь на них как можно быстрее отвечать)! А я сейчас как раз отвечу на один из вопросов в Вашем комментарии под другим видео 😊
      Оставайтесь здоровой в нынешней ситуации с вирусом и хорошего Вам дня!
      С уважением,
      Билял

  • @Graver24
    @Graver24 4 ปีที่แล้ว +4

    с удовольствие, а главное с интересом посмотрел) заполняю пробелы, сидя на карантине)

    • @BilyalKhassenov
      @BilyalKhassenov  4 ปีที่แล้ว

      Здравствуйте Андрей,
      Очень правильно поступаете - используете специфическим образом появившееся время в пользу! 😊
      Хороших Вам выходных дней 😊
      С уважением,
      Билял

  • @s.j5206
    @s.j5206 4 ปีที่แล้ว

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

  • @user-zc4oq7bp5e
    @user-zc4oq7bp5e ปีที่แล้ว +1

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

  • @ДмитрийАнтонов-о2ф
    @ДмитрийАнтонов-о2ф 3 ปีที่แล้ว +1

    Большое спасибо!

  • @АлексейПластовец-щ8э
    @АлексейПластовец-щ8э 3 ปีที่แล้ว +2

    Так, стоять, мы же договаривались, что используем только long!)))

  • @grigorymoroz8055
    @grigorymoroz8055 3 ปีที่แล้ว +1

    Огромное спасибо за твои уроки, просто пушка, лайк на все! А вот по поводу домашнего задания с урока 12, я кажется смог написать его без массивов, поправь, если есть ошибка:)
    Sub DZ_Urok_12()
    Dim lastraw As Long
    lastraw = Worksheets("Лист9").Cells(Rows.Count, 2).End(xlUp).Row
    Dim i As Long
    Dim b As Long
    Dim c As String
    For i = 2 To lastraw
    b = Worksheets("Лист").Range("C" & i).Value
    c = Worksheets("Лист").Range("B" & i).Value
    MsgBox c & " Получил оценку: " & b
    Next i
    End Sub

  • @dr.livesey5157
    @dr.livesey5157 2 ปีที่แล้ว

    Большое спасибо за уроки, качество и полнота подачи на высшем уровне!
    Хотел узнать, влияет ли как-то на производительность сокращение with?
    Мой пример домашнего задания с прошлого урока ниже:
    Sub dynmcArrays()
    'Назначаю переменные
    Dim dynArray()
    Dim lastrow As Long
    Dim firstrow As Long
    Dim i As Integer
    lastrow = 3
    firstrow = Worksheets(1).cells(Rows.Count, 1).End(xlUp).Row
    'Переназначаю границы массива
    ReDim dynArray(lastrow To firstrow)
    'Функция сокращения WITH
    With ThisWorkbook.Worksheets(1)
    For i = LBound(dynArray) To UBound(dynArray)
    MsgBox cells(i, 2) & "'s Grade is " & cells(i, 3)
    Next i

    End With
    End Sub

  • @ИванИванов-в3ъ4м
    @ИванИванов-в3ъ4м 4 ปีที่แล้ว +1

    Добрый день! Почему вы не пользуетесь клавишей F8 для наглядности, и окном immedium?

  • @JASTOK
    @JASTOK 3 ปีที่แล้ว +1

    Вот это уже прям жоска

  • @pilot39938
    @pilot39938 3 ปีที่แล้ว

    Отличные видео, спасибо!

  • @АлексейИванов-у6з1я
    @АлексейИванов-у6з1я 2 ปีที่แล้ว

    Билял, приветствую. А как передавать параметры между элементами юзерформ. К примеру, нужно что бы при нажатии на команбатон была возможность обратится к массиву, который перед этим использовался в комбобоксе? Именно к последним изменениям этого массива.? Спасибо.

  • @delloff9866
    @delloff9866 ปีที่แล้ว

    Я решил домашнее задание через один динамический массив с именами. К ним просто подставлял оценки из соседней колонки через for loop

  • @user-friendly55412
    @user-friendly55412 3 ปีที่แล้ว +1

    Билял, добрый день. Благодарю за понятное изложение материала! Можно ли вызвать вспомогательную процедуру через переменную? Например, присвоить переменной значение вида "Set x = Module2.auxProc", а при вызове процедуры использовать переменную "Call x"? Какой тип переменной нужно указывать в данном случае?

    • @BilyalKhassenov
      @BilyalKhassenov  3 ปีที่แล้ว +2

      Здравствуйте, Андрей! Всегда пожалуйста, рад что видео на канале Вам помогают 😊
      Касательно Вашего вопроса - да, это возможно. Только в таком случае используется команда Run, а не Call.
      Вот пример: я создал в файле два модуля - Module1 и Module2. В обоих модулях находится по одной процедуре - mainProcedure и auxProc соответственно.
      Код вспомогательной, вызываемой процедуры крайне прост - один MsgBox:
      Sub auxProc()
      MsgBox "Это сработала вспомогательная процедура!"
      End Sub
      Для того чтобы из первой процедуры теперь вызвать вторую процедуру с помощью переменной используем следующий код:
      Sub mainProcedure()
      Dim strSubFullName As String
      strSubFullName = "Module2.auxProc"
      Run strSubFullName
      End Sub
      Получается я создал текстовую переменную strSubFullName и внёс в неё полное имя вызываемой процедуры (то есть, через точку также указал модуль, в котором она хранится). Затем просто с помощью команды Run и подготовленной ранее переменной вызываем нужную процедуру 😊
      Удачи в решении задачи, если что пишите еще 😊
      С уважением,
      Билял

    • @user-friendly55412
      @user-friendly55412 3 ปีที่แล้ว +1

      @@BilyalKhassenov спасибо, это просто бомба. Как и весь ваш курс!
      Пользуясь случаем скажу, что новый курс по vba более структурированный и ещё лучше доносит информацию) жду его продолжения)
      Ещё раз выражаю вам огромную благодарность!

  • @prostories7855
    @prostories7855 ปีที่แล้ว

    Здравствуйте. Подскажите пожалуйста, почему вы задаете range Info To Sent As String? А не range. B2:E5 это же область

  • @nickolayarbuzov6149
    @nickolayarbuzov6149 4 ปีที่แล้ว

    Здравствуйте, Билял
    Встречались ли Вы с асинхронностью в VBA ? И можно ли упорядочить выполнение функций в VBA в виде callback ?
    Есть примеры: когда надо сделать рамку по размеру контента, но рамка рисуется до того, как весь контент сформировался; или например подсчитывается значение, чтобы затем использовать его далее, в других расчетах, но обращение к этому значению происходит до того, как оно подсчитано.
    Но в VBA менее популярный язык, чем стандартные ЯП, поэтому информации на эту тему я както и не встречал

  • @primakovsan4oys
    @primakovsan4oys 3 ปีที่แล้ว +1

    Здравствуйте! Спасибо большое за этот цикл видео, очень интересно и доступно получилось) Подскажите, пожалуйста, как работать с диаграммами VBA? Может у вас есть видео на эту тему или знаете, где можно почитать про это, а то ничего толкового не могу найти. Из кода представленного ниже строится диаграмма не того формата, которого надо (если делать через обычную вставку excel, все нормально). Если задавать диапазон "B13:B" & 14 + i, все работает правильно, но при добавление других столбцов с значениями границ (за которые график не должен выходить) значения X Y меняются местами и получается белиберда((
    Пример:
    Dim myChart1 As Chart
    'создаем объект Chart с расположением нового листа по умолчанию
    Set myChart1 = Workbooks(1).Charts.Add
    With myChart1
    'назначаем объекту Chart источник данных
    For i = 0 To uBoundVar - 2
    .SetSourceData (Sheets("Лист1").Range("B13:D" & 14 + i))
    Next i
    'переносим диаграмму на "Лист1" (отдельный лист диаграммы удаляется)
    .ChartType = xlLineMarkers
    .Location xlLocationAsObject, "Лист1"
    End With

  • @ОльгаЧудаева-е5э
    @ОльгаЧудаева-е5э ปีที่แล้ว

    Как вернуть значение переменной byref из функции, которая размещена в надстройке?

  • @АндрейКлёпа
    @АндрейКлёпа 2 ปีที่แล้ว

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

  • @НатальяБелова-у8я
    @НатальяБелова-у8я 2 ปีที่แล้ว

    Тема для меня пока туманна. Буду разбираться.

  • @You-Rock
    @You-Rock 3 ปีที่แล้ว

    Спасибо большое за объяснение, но я бы в такой конструкции тупо объявил переменные публично)

  • @РамильШаяхметов-к7в
    @РамильШаяхметов-к7в 5 ปีที่แล้ว +1

    Добрый день!
    Спасибо за уроки!
    Можешь плз уточнить по поводу ByRef:
    Не совсем понятно по какой логике измененная переменная receivedrange (когда она становится = G2:J8 во вспомогательной процедуре) обратно возвращается в основную процедуру и заменяет значение переменной rangeinfotosend?

    • @BilyalKhassenov
      @BilyalKhassenov  5 ปีที่แล้ว +5

      Здравствуйте, Рамиль!
      Вот другой вариант объяснения:
      ByVal - В случае с этой опцией, Вы отправляете во вспомогательную процедуру значение (например, при помощи переменной) и знаете, что в Вашей основной процедуре значение не поменяется вне зависимости от того, что с этим значением произойдет во вспомогательной переменной. Вот, скопируйте целиком этот код, вставьте в пустом модуле, и запустите процедуру
      Sub mainProcedure()
      Dim varToBeChanged As String 'Эта переменная будет отправлена
      varToBeChanged = "A" 'Задаем ей значение "А"
      MsgBox "varToBeChanged: " & varToBeChanged 'Проверяем перед отправкой
      Call changerAuxSub(varToBeChanged) 'Отправляем во вспомогательную процедуру
      MsgBox "varToBeChanged: " & varToBeChanged 'Проводим контроль с помощью второго Msgbox
      'При ByVal второй Msgbox выведет "А", потому что ничего не меняется. ByRef же меняет переменную - поэтому при нем будет выведено "B"
      End Sub
      Sub changerAuxSub(ByVal hereItWillBeCalledSo As String)
      hereItWillBeCalledSo = "B" 'Здесь меняется значение аргумента
      End Sub
      Как можете заметить, вывелась два раза буква «А», потому что ByVal не меняет значение. Теперь рассмотрим ByRef.
      ByRef - В случае с этой опцией, Вы отправляете во вспомогательную процедуру значение (например, при помощи переменной) и внимание! Если это значение во вспомогательной процедуре изменится, то оно отправляется обратно в основную процедуру изменённым. И соответственно значение переменной уже в основной процедуре будет таким, каким оно стало во вспомогательной процедуре. Вот, скопируйте целиком этот код, вставьте в пустом модуле, и запустите процедуру mainProcedure:
      Sub mainProcedure()
      Dim varToBeChanged As String 'Эта переменная будет отправлена
      varToBeChanged = "A" 'Задаем ей значение "А"
      MsgBox "varToBeChanged: " & varToBeChanged 'Проверяем перед отправкой
      Call changerAuxSub(varToBeChanged) 'Отправляем во вспомогательную процедуру
      MsgBox "varToBeChanged: " & varToBeChanged 'Проводим контроль с помощью второго Msgbox
      'При ByVal второй Msgbox выведет "А", потому что ничего не меняется. ByRef же меняет переменную - поэтому при нем будет выведено "B"
      End Sub
      Sub changerAuxSub(ByRef hereItWillBeCalledSo As String)
      hereItWillBeCalledSo = "B" 'Здесь меняется значение аргумента
      End Sub
      Первый раз Msgbox должен вывести букву «А», а во второй раз букву «В», потому что ByRef меняет значение и отправляет его измененным обратно. С Range всё точно так же, просто с литеральной переменной более понятно, поэтому показал на её примере.
      С уважением,
      ХБ
      P.S. Надеюсь у меня получилось доступно объяснить в письменном виде, тема и вправду немного сложная для понимания. В любом случае, если всё еще не понятно - пишите! Попробуем еще раз зайти с другой стороны :)

    • @РамильШаяхметов-к7в
      @РамильШаяхметов-к7в 5 ปีที่แล้ว +1

      @@BilyalKhassenov Благодарю за ответ! Вроде как разобрался. Если правильно понял, то при ByRef передается адрес переменной (получается что-то вроде "подключения" к адресу) и уже таким образом имеем возможность изменить её значение через обе переменные - как в основной процедуре, так и во вспомогательной. Как-то так сейчас у меня это в голове :)
      Еще раз спасибо!

    • @BilyalKhassenov
      @BilyalKhassenov  5 ปีที่แล้ว +2

      Не за что! Рад помочь :)

    • @Serega_Zaicev
      @Serega_Zaicev ปีที่แล้ว +1

      @@BilyalKhassenov Мне Этот код больше понятен, СПАСИБО БОЛЬШОЕ !!!! а то реально завис после двух просмотров, а тут в комментах полезно полазить оказалось)))

  • @sinsmith9687
    @sinsmith9687 3 ปีที่แล้ว

    Все супер. Только не пойму где это применяется - ByRef. Это как рекурсия своего рода? Можно еще пример =) ?

  • @АнтонПавленин-п8ш
    @АнтонПавленин-п8ш 3 ปีที่แล้ว

    Отличные уроки! Спасибо, Билял!
    Я что-то пропустил.
    Команда SET появилась внезапно.
    Это типа DIM, но для процедур?

  • @ZigZagUdachich
    @ZigZagUdachich 4 ปีที่แล้ว +1

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

    • @BilyalKhassenov
      @BilyalKhassenov  4 ปีที่แล้ว +2

      Здравствуйте, Павел!
      Спасибо за Ваш вопрос - он и вправду интересен и важен!
      Передавать процедуре в качестве параметров список других процедур вполне возможно. Например, для этого можно использовать массивы. При этом учтите, что массивы всегда передаются в процедуры с параметрами с настройкой ByRef. Смотрите, вот пример - в нём мы передаём имена процедур в текстовом массиве во вспомогательную процедуру. Вставьте этот код в новый модуль и протестируйте:
      Option Explicit
      Sub mainSub()
      'В основной процедуре создаем и заполняем массив именами трёх тестовых процедур
      Dim arrListOfSubNames(1 To 3) As String
      arrListOfSubNames(1) = "testSub1"
      arrListOfSubNames(2) = "testSub2"
      arrListOfSubNames(3) = "testSub3"
      'Передаём массив во вспомогательную процедуру, которая запускает каждую из тестовых процедур
      Call helpSubToCall(arrListOfSubNames)
      End Sub
      Sub helpSubToCall(ByRef arrSubNames() As String)
      Dim intCounter As Integer
      'Цикл по массивы и запуск тестовых процедур при помощи указания имени процедуры методу Run
      For intCounter = LBound(arrSubNames) To UBound(arrSubNames)
      Run arrSubNames(intCounter)
      Next intCounter
      End Sub
      Sub testSub1()
      MsgBox "1" 'Тестовая процедура 1
      End Sub
      Sub testSub2()
      MsgBox "2" 'Тестовая процедура 2
      End Sub
      Sub testSub3()
      MsgBox "3" 'Тестовая процедура 3
      End Sub
      Если будут вопросы - пишите! 😊
      С уважением,
      Билял

  • @АльбинаСкорова
    @АльбинаСкорова 3 ปีที่แล้ว +5

    Мой рептилойдный мозг отказывается воспринимать это. Придëтся пересмотреть всë много раз. Как же всë сложно

    • @BilyalKhassenov
      @BilyalKhassenov  3 ปีที่แล้ว

      😅

    • @ДляИнформации-с4ы
      @ДляИнформации-с4ы ปีที่แล้ว

      То же самое... первые 8 уроков 3 раза песматривал_перепечатал- выучил короче, дальше не могу разжевать...

  • @rentierrichy7907
    @rentierrichy7907 4 ปีที่แล้ว

    19:08 Не совсем понятно использование выражения "uBoundVariable = lastRow - 1" для исключения заголовков (???). Логично использование этого выражения для определения нижней границы массива, равное 5. А по ходу чтения кода и так видно, что при использовании ссылок на столбцы B и C со счетчиком i + 1 заголовки по любому не будут присваиваться переменным nameArr и gradeArr.
    И потом, динамический массив включает в себя новые значения в ячейках, которые являются смежными, т.е. непосредственно у границ диапазона данных? А если внести новые значения "проскочив" одну ячейку, будет ли массив содержать эти значения?
    Благодарю!

  • @АнтонинаБелорус
    @АнтонинаБелорус 4 ปีที่แล้ว

    А зачем нужны переменные lBoundVariable и u BoundVariable? почему нельзя написать ReDim nameArr (1 to lastrow*)? *lastrow у меня изначально -1 подсчитывался

  • @evgenbeg5095
    @evgenbeg5095 5 ปีที่แล้ว +1

    Подскажи подалуйста, как вывести на печать (принтер) данные из ЛистБокса только выделеные (мультилайн)

    • @BilyalKhassenov
      @BilyalKhassenov  5 ปีที่แล้ว +4

      Здравствуйте, Evgen!
      Вот предложение от меня (комментарии содержатся в коде, удобно читать их будет в окне VBA):
      Private Sub CommandButton1_Click()
      Dim counter As Long
      Dim selectedItems As New Collection ' Список выбранных объектов из листбокса будет храниться в коллекции


      For counter = 0 To ListBox1.ListCount - 1 ' Проверяем каждый объект в списке.
      If ListBox1.Selected(counter) = True Then ' Если объект выбран, то
      selectedItems.Add (ListBox1.List(counter)) ' добавляем его в коллекцию выбранных объектов
      End If
      Next counter

      ' Далее Вы можете сами решить, каким образом распечатывать список выбранных объектов из коллекции.
      ' Например для этого у Вас может быть сохранён шаблон в спрятанном рабочем листе, в который экс-
      ' портируется список из коллекции и выводится на печать.

      'Альтернативно, вот пример с распечаткой из создаваемого временного рабочего листа:
      Dim ws As Worksheet

      Set ws = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.count))
      ws.Name = "TemporaryWS"

      For counter = 1 To selectedItems.count
      ws.Range("A" & counter) = selectedItems.Item(counter) 'Переносим список выбранных объектов из коллекции на временный лист
      Next counter

      ws.PrintOut 'Распечатываем

      ws.Delete 'Удаляем временный лист
      End Sub
      С уважением,
      ХБ
      P.S. Эта процедура запускается при нажатии кнопки CommandButton1, Вы можете настроить данный пункт под себя :)

    • @evgenbeg5095
      @evgenbeg5095 5 ปีที่แล้ว +1

      Спасибо, попробую

  • @whereamibluesky3554
    @whereamibluesky3554 3 ปีที่แล้ว

    Вариант домашки к 12 уроку
    Sub HW()
    Dim arr As Variant
    Dim i As Integer
    arr = ActiveSheet.UsedRange.Value
    For i = LBound(arr) + 1 To UBound(arr)
    MsgBox "Имя: " & arr(i, 2) & "Оценка: " & arr(i, 3)
    Next i
    End Sub

  • @Aleksandr.Bartov
    @Aleksandr.Bartov 5 ปีที่แล้ว +1

    А можно как-то просмотреть весь список подпрограмм в модулях?

    • @BilyalKhassenov
      @BilyalKhassenov  5 ปีที่แล้ว

      Здравствуйте, Александр!
      Извиняюсь за долгий ответ. Да, можно написать такой макрос, правда, там нужно работать с Reference VBA Examinability. Я еще сам подобный макрос не пробывал, поэтому пока не стал бы давать Вам дальнейших советов. Возможно, чуть позже (как сам более подробно изучу данный вопрос) сниму отдельное видео на эту тему.
      Хорошего Вам воскресенья, Александр! :)
      С уважением,
      ХБ

    • @Aleksandr.Bartov
      @Aleksandr.Bartov 5 ปีที่แล้ว +1

      @@BilyalKhassenov Спасибо. Я думал что можно как-то стандартно это просмотреть. Не все так просто оказывается.

  • @yellowmoonishka1725
    @yellowmoonishka1725 8 หลายเดือนก่อน

    спс

  • @ГерманРыков-ъ6в
    @ГерманРыков-ъ6в 5 ปีที่แล้ว +2

    И все вроде понятно, но 3 раз пересматриваю и не совсем улавливаю практической направленности....

    • @BilyalKhassenov
      @BilyalKhassenov  5 ปีที่แล้ว +1

      Здравствуйте, Герман!
      Попробуйте на каком-нибудь примере поупражняться, поскольку это и вправду такая тема, которую, как мне кажется, возможно до конца понять и «прочувствовать» лишь после нескольких сессий интенсивной работы на четких примерах. А со временем уже и разовьется чувство, где, когда и какие именно инструменты VBA применять. Да, вот такая творческая нотка в работе с VBA присутствует тоже :)
      Будут вопросы - обращайтесь! :)
      С уважением,
      ХБ

  • @user-en8ko2vd1k
    @user-en8ko2vd1k 2 ปีที่แล้ว

    17 сен 2022

  • @ruidogeothuld3118
    @ruidogeothuld3118 ปีที่แล้ว

    Понять бы ещё зачем эти ByVal нужны(

  • @АлексейСоков-ь8и
    @АлексейСоков-ь8и 3 ปีที่แล้ว +1

    2021

  • @Айка-в4р
    @Айка-в4р 4 หลายเดือนก่อน +1

    ничего не понятно

  • @slavaz9942
    @slavaz9942 2 ปีที่แล้ว +1

    Блин зачем так сложно всё объяснять, простой пример простые переменные....но нихера не понятно....кошмар