我有两个相互依赖的子流程。
第一个(合并)获取用户选择的文件并打开它们并合并到当前工作表中。 变量“Files”存储用户选择的路径和文件名
用户在合并工作表中进行一些更改后按下工作表上的“更新”宏的按钮。
第二个子(更新)使用用户“文件”已经提供的相同输入,并找到更新的单元格所在的工作表并粘贴新值。
请建议一种方法来使用“更新”子流程的用户输入。
Sub Consolidate()
Dim Files as Variant
Files = Application.GetOpenFilename("Excel Files (*.xl*), *.xl*", Title:="Select files to Consolidate", MultiSelect:=True)
For Z = LBound(Files) To UBound(Files)
tem = Split(Files(Z), "\")
If (tem(UBound(tem)) <> ThisWorkbook.Name) Then
* code to consolidate*
end sub
Sub update()
Call gotoLastModified
Application.ScreenUpdating = True
Application.DisplayAlerts = False
For Z = LBound(Files) To UBound(Files)
tem = Split(Files(Z), "\")
* code to update sheet
结束子
答案 0 :(得分:2)
您需要使用全局变量。为此,请在例程之外声明变量,它将可用于查看和编辑内容的所有函数。
尝试这样做以熟悉自己:
Dim files As Variant
Sub Consolidate()
files = 1
End Sub
Sub Update()
MsgBox files
End Sub
如果您先运行 Update()
,MsgBox
将显示为空,因为尚未设置文件。如果您运行 Consolidate()
,然后再次运行 Update()
,您会看到files
已更新。
答案 1 :(得分:1)
如果您将Consolidate
转换为函数,并修改update
以获取参数:
Function Consolidate() as Variant
...
Consolidate = Files
End Function
Sub update(Files as Variant)
...
End Sub
然后,您可以将Consolidate
的结果传递给update
答案 2 :(得分:0)
我相信如果您将Dim Files as Variant
行更改为:
Public Files as Variant
并将其移动到第一个sub之前,这应该可行。将它移到sub之外并将其公开应该使它可用于宏中的所有子。