存储用户输入并用于其他子进程

时间:2014-11-26 03:26:05

标签: vba excel-vba excel

我有两个相互依赖的子流程。

第一个(合并)获取用户选择的文件并打开它们并合并到当前工作表中。 变量“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

结束子

3 个答案:

答案 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之外并将其公开应该使它可用于宏中的所有子。