Я настороженно относятся к расплывчатости «запускать макросы в этих книгах», но я буду с осторожностью ... :)
Допустим, у вас есть рабочие тетради, Master.xls и Child1- 3.xls. Все они имеют ссылку на библиотеку Runtime Windows Scripting.
- Мастер имеет таблицу параметров, некоторые из VBA
- Child1-3 каждый имеют две рабочие таблицы, DataDump и настройки
- Child1-3 каждый общедоступный модуль с прока VBA для запуска (имя известно)
мастер настройки ж/s заполняется таким образом:
A1 = SettingName B1 = SettingValue
A2 = Setting1 B2 = Value1
A3 = Setting2 B3 = Value2
A4 = Setting3 B4 = Value3
(обратите внимание, что столбец С пуст и E всегда имеет задний ход \)
D1 = WBName E1 = WBPath F1 = ProcName
D2 = Child1.xls E2 = C:\Temp\ F2 = MaryJo
D3 = Child2.xls E3 = C:\Temp\ F3 = MaryLou
D4 = Child3.xls E4 = C:\Temp\ F4 = DaisyLou
Есть настройка, теперь выполнение.
В прока ("Bob") в Мастер написать что-то вроде этого:
Public Sub Bob
Dim dctSetting As Dictionary
Dim wkbCurrent As Workbook
Dim rngWkbook As Range
Dim rngSetting As Range
Set rngSetting = ThisWorkbook.Worksheets("Sheet1").Range("A2")
Set dctSetting = New Dictionary
Do Until rngSetting = ""
dctSetting.Add rngSetting.Value, rngSetting.Offset(0, 1).Value
Loop
Set rngWkBook = ThisWorkbook.Worksheets("Sheet1").Range("D2")
Do Until rngWkBook.Value = ""
Set wkbCurrent = Workbooks.Open(rngWkBook.Offset(0,1) & rngWkBook)
Application.Run "'" & rngWkBook & "'!" & rngWkBook.Offset(0,2),
dctSetting
Set wkbCurrent.Saved = True
wkbCurrent.Close False
Set rngWkBook = rngWkBook.Offset(1,0)
Loop
End Sub
Каждый из Child1-3 имеет свои соответствующие проки (MaryJo, Marylou, DaisyLou), с ограничением ли такой подход что каждый из этих procs должен принять один параметр (лучше всего сделать его словарем, я думаю).
Прокурор каждого ребенка не имеет имеет, чтобы использовать все три настройки или даже любой из них. Используя словарь, вы можете проверить наличие настроек перед его использованием. Таким образом, в каждой из дочерних проками было бы что-то вроде:
Public Sub MaryLou(dctSettings as Dictionary)
Dim strMyValue As String
If dctSettings.Exists("TheNameOfTheMasterSettingIWantToUse") Then
strMyValue = dctSettings("TheNameOfTheMasterSettingIWantToUse")
' Your code runs here with the populated variable
End If
End Sub
Вам нужно сделать дополнительные вещи, как проверка для ребенка ж/б по указанному пути - по минимуму!
Вы подумали об использовании модуля класса с представлением содержимого, которое хотите использовать, а затем создать экземпляр в модуле A? –
Можете ли вы привести пример того, как вы представляете, как будут взаимодействовать два макроса? – CodeJockey