Я хотел бы иметь возможность управлять исходными текстами своих модулей электронной таблицы Excel (в настоящее время с использованием Excel 2003 SP3), чтобы я мог делиться и управлять кодом, используемым кучей разных таблиц, и поэтому я хотел бы повторно - загружать их из файлов при открытии электронной таблицы.
У меня есть модуль под названием Loader.bas, который я использую для выполнения большей части работы с ослами (загрузка и выгрузка любых других модулей, которые необходимы), и я хотел бы иметь возможность загружать его из файл, как только откроется электронная таблица.
Я приложил следующий код к событию Workbook_Open (в классе ThisWorkbook).
Private Sub Workbook_Open()
Call RemoveLoader
Call LoadLoader
End Sub
Где RemoveLoader (также в классе ThisWorkbook) содержит следующий код:
Private Sub RemoveLoader()
Dim y As Integer
Dim OldModules, NumModules As Integer
Dim CompName As String
With ThisWorkbook.VBProject
NumModules = ThisWorkbook.VBProject.VBComponents.Count
y = 1
While y <= NumModules
If .VBComponents.Item(y).Type = 1 Then
CompName = .VBComponents.Item(y).Name
If VBA.Strings.InStr(CompName, "Loader") > 0 Then
OldModules = ThisWorkbook.VBProject.VBComponents.Count
.VBComponents.Remove .VBComponents(CompName)
NumModules = ThisWorkbook.VBProject.VBComponents.Count
If OldModules - NumModules = 1 Then
y = 1
Else
MsgBox ("Failed to remove " & CompName & " module from VBA project")
End If
End If
End If
y = y + 1
Wend
End With
End Sub
Скорее всего, это немного сложнее и немного грубо, но я пытаюсь все, что могу найти, чтобы загрузить его для внешнего модуля!
Часто, когда я открываю электронную таблицу, функция RemoveLoader обнаруживает, что в проект VBA уже включен модуль "Loader1", который он не может удалить, а также не может загрузить новый модуль Loader из файла.
Любые идеи, если то, что я пытаюсь сделать, возможно? Excel, похоже, очень любит добавлять 1 к этим именам модулей - либо при загрузке, либо при удалении (я не уверен, какой).