我正在编写一个将放在工作簿A中的宏。
练习册A的主要功能是打开工作簿1-5,并在这些工作簿中运行宏。但是,为了在工作簿1-5中运行宏,我需要将输入传递到工作簿A中的工作簿1-5。
我想在工作簿A中定义一个字典或一个对象,它将整个输入集传递给每个工作簿1-5。工作簿1-5中的宏只会获取必要的输入。
我怎样才能实现这一目标?
答案 0 :(得分:1)
我警惕"在这些工作簿中运行宏",但我会谨慎行事...... :)
假设您有自己的工作簿,Master.xls和Child1-3.xls。它们都具有Windows Scripting Runtime库的引用集。
如此填充主设置w / s:
A1 = SettingName B1 = SettingValue
A2 = Setting1 B2 = Value1
A3 = Setting2 B3 = Value2
A4 = Setting3 B4 = Value3
(请注意,C列为空,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
设置,现在执行。
在Master中的proc(" 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),这种方法的局限在于每个过程都必须接受一个参数(我猜这最好使它成为字典)。 / p>
每个孩子的proc都没有 使用所有三个设置,甚至是其中任何一个。通过使用字典,您可以在使用之前检查设置是否存在。所以在每个子进程中都有类似的东西:
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
你需要做一些额外的事情,例如在指定的路径上检查孩子w / b,至少是这样!