ТранспортМодаРецептыБлогиОхотаПутешествияСпортВесельеСвоими РукамиITЗнания
Мини-Игры
x

x
zakruti.com » ru » IT – Софт » Обучение Microsoft Office
Взаимодействие макросов - Call - ByVal, ByRef (Серия VBA 13)

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

VKTwitterOK

содержание видео

Рейтинг: 4.0; Голоса: 1
Всем привет! Касательно изучения темы взаимодействия нескольких процедур в VBA на русскоязычных ресурсах, лично у меня сложилось впечатление, что на эту тему фактически нет хороших уроков. Это видео призвано исправить данную ситуацию! Вот что мы с Вами изучим в этом видеоуроке: Фраза Call для запуска из одной процедуры других процедур Фраза ByVal для передачи вызываемой процедуре неизменяемого параметра (фактически значения/переменной) для выполнения определенной работы с этим параметром Фраза ByRef для передачи вызываемой процедуре изменяемого параметра, в случае изменения которого в вызываемой процедуре, измененной значение направляется обратно в основную процедуру Как задавать несколько параметров для вызываемой процедуры И в конце видео мы с Вами также рассмотрим один из примеров решения домашнего задания из предыдущего урока. Всем приятного просмотра!
Дата: 2021-09-02

Комментарии и отзывы: 10


Здравствуйте! Спасибо большое за этот цикл видео, очень интересно и доступно получилось) Подскажите, пожалуйста, как работать с диаграммами 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

ответить

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

ответить

Решил домашнее задание предыдущего урока иначе. Не убирал заголовки для динамичного массива в нижней границе. Вместо этого указал начальное значение массива 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
Еще раз спасибо за уроки! Интересно прорешивать домашние задания самому, и сравнивать, как их решают другие.

ответить

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

ответить

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

Спасибо, а я до этого передавал значения в основную процедуру через значение дополнительной процедуры, если надо было много переменных передать, то в виде массива. Хотя если честно сильно это код не уменьшает, ведь теперь надо прописывать для каждой переменной byRef, а для работы с byVal можно просто писать переменную и всё будет работать. Но в целом дополнительные возможности никогда не были лишними.
ответить

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

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

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

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

ответить
Добавить отзыв, комментарий






Другие видео канала