Я подумал, можно ли установить основную книгу в Excel VBA и получить к ней доступ ко всем процедурам и функциям?
Поскольку я новичок в VBA, я не понимаю синтаксис, который использует VBA.
Dim MasterWB as Workbook
Set MasterWB = Workbooks.Open("Path to my Workbook")
Но если я захочу получить к нему доступ в другой процедуре или функции, я получу ошибку определения объекта.
Я не хочу объявлять объект в каждой подпрограмме или функции. Большое спасибо!
Есть два способа сделать это:
Хорошая практика:
Option Explicit
Sub Test()
Dim MasterWB As Workbook
Set MasterWB = Workbooks.Open("Path")
UseWb MasterWB
End Sub
Sub UseWb(wb As Workbook)
wb.Close
End Sub
Вы не должны использовать практику:
Option Explicit
Public MasterWB As Workbook
Sub Test()
Set MasterWB = Workbooks.Open("Path")
UseWb MasterWB
End Sub
Sub UseWb()
wb.Close
End Sub
Первый позволяет передать Workbook Variable
в качестве параметра другим функциям, в этом случае вы не можете использовать ByVal
, но другие переменные, такие как Integer
или Long
, можно использовать как ByVal
вместо (по умолчанию) ByRef
.
ByVal
означает, что вы передаете только значение этой переменной, поэтому вы не будете изменять его в функции.
ByRef
означает, что вы передаете ссылку, поэтому другая функция может изменить исходную переменную.
Второй способ позволяет вам использовать переменную только в качестве ссылки, поэтому в ней могут быть изменения, которые вы не заметите.
Надеюсь, это немного прояснит ваш вопрос.
с параметрами объекта вы могу используете ByVal, так как это указатель на объект, который передается по значению. Вы можете изменить объект, на который указывает указатель. Что вы делаете, не могу, так это изменяете сам указатель, чтобы он указывал на какой-то другой объект.