У меня есть серия рабочих книг Excel, которые по некоторым данным зависят от отдельной рабочей книги.Итак, мне нужно, чтобы рабочая книга данных открывалась автоматически при открытии основной рабочей книги.Для простоты для моих нетехнических конечных пользователей я скрываю рабочую книгу данных.Однако мне нужно уметь работать с обеими книгами одновременно.Итак, я попытался установить флаг (links_opened
), чтобы указать, была ли книга данных уже открыта при открытии основной книги.Для справки, это мой первый случай с VBA, и я нахожу это действительно странным.
Вот соответствующая часть моего кода:
Option Explicit
Dim w As Workbooks
Dim links_opened As Boolean
links_opened = False ' This is where VBA reports an error
Function IsWorkBookOpen(FileName As String)
' Code here tests whether the workbook is already open
' Omitted for brevity
End Function
Private Sub Workbook_Open()
Dim fn As String
fn = ThisWorkbook.Path & "\Work Instructions\Links.xlsx"
If !IsWorkBookOpen(fn) Then
Set w = Workbooks
Application.ScreenUpdating = False
w.Open FileName:=fn, UpdateLinks:=False, ReadOnly:=True
ActiveWindow.Visible = False
ThisWorkbook.Activate
Application.ScreenUpdating = True
links_opened = True
End If
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If links_opened Then
w.Item(2).Saved = True
End If
End Sub
Когда я пытаюсь запуститьэтот код, VBA говорит, указывая на строку, которую я отметил выше:
Ошибка компиляции:
Недопустимая внешняя процедура
Я понимаю, что VBA по какой-то причинене позволяет устанавливать переменные на верхнем уровне.Но я не знаю другого способа сделать это.Он отлично работает на других языках, которые я регулярно использую.
Как установить флажок, чтобы отслеживать, был ли файл данных открыт моим кодом или вручную?Или есть лучший способ сделать это?