2015-12-22 5 views
0

Я пишу макрос, который будет сидеть в рабочей книге А. Основная функцияОбъектов/словарь для глобальных переменных

Рабочего будет открывать книги 1-5, и запускать макросы в этих книгах. Однако для того, чтобы запускать макросы в книгах 1-5, мне нужно будет передать входные данные в рабочие книги 1-5 из книги A.

Я хотел бы определить словарь или объект в книге A, которая пройдет весь набор входов для каждой книги 1-5. И макросы в книгах 1-5 будут только захватывать необходимые входы.

Как я могу это получить?

+0

Вы подумали об использовании модуля класса с представлением содержимого, которое хотите использовать, а затем создать экземпляр в модуле A? –

+0

Можете ли вы привести пример того, как вы представляете, как будут взаимодействовать два макроса? – CodeJockey

ответ

1

Я настороженно относятся к расплывчатости «запускать макросы в этих книгах», но я буду с осторожностью ... :)

Допустим, у вас есть рабочие тетради, 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 

Вам нужно сделать дополнительные вещи, как проверка для ребенка ж/б по указанному пути - по минимуму!

Смежные вопросы