gpt4 book ai didi

vba - 如何将变量从一个子传递到另一个?

转载 作者:行者123 更新时间:2023-12-04 21:53:12 26 4
gpt4 key购买 nike

我正在努力通过 srcFile从一个子到另一个的变量。我想做以下事情:

1)从我的本地路径加载源文件 loadFile() sub

2) 将 srcFile 设置为我的源数据工作簿

3)我想在我的主程序中调用 processWorkbook 以便它将获取我的 srcFile,将其传递给 Sub 并对该文件的每个工作表执行一些操作。

抱歉,如果我没有清楚地表达自己。

Sub Main()
Call loadFile
Call processWorkbook(srcFile)
End Sub

' _____________________________________________________

Sub loadFile()
Dim wrk As Worksheet
Dim trg As Worksheet
Dim Path As String
Dim srcFile As Workbook

Set wrk = Workbooks("Banks.xlsm").Sheets("Control")
Set trg = Workbooks("Banks.xlsm").Sheets("Output")
trg.Cells.ClearContents
Path = wrk.Cells(1, 2).Value 'file path
Set srcFile = Workbooks.Open(Path, ReadOnly:=False)
End Sub

' _____________________________________________________

Sub processWorkbook(wrk)
Dim sht As Worksheet

For Each sht In wrk.Sheets
Call anotherSub
Next sht
End Sub

最佳答案

最简单的方法是在 Sub Main 中声明一个 Workbook 对象。并从 loadFile 填充它.有两种方法可以做到这一点:1)通过引用将 Workbook 对象传递给 loadFile,或 2)将 loadFile 中的对象设置为对象。

我相信第二个对你来说会更容易理解,所以我用它来修改你的代码,如下所示。

请注意,要使其正常工作,必须更改 loadFile成为一个函数,而不是一个子。 (一个函数返回一些东西。)另外,我删除了 Call您的代码中的关键字,因为不再需要/使用它。

Sub Main()
Dim srcFile As Workbook

Set srcFile = loadFile
processWorkbook srcFile

End Sub

'_____________________________________________________

Function loadFile() as Workbook

Dim wrk As Worksheet
Dim trg As Worksheet
Dim Path As String
Dim srcFile As Workbook

Set wrk = Workbooks("Banks.xlsm").Sheets("Control")
Set trg = Workbooks("Banks.xlsm").Sheets("Output")
trg.Cells.ClearContents
Path = wrk.Cells(1, 2).Value 'file path
Set srcFile = Workbooks.Open(Path, ReadOnly:=False)

Set loadFile = srcFile
End Function

'_____________________________________________________

Sub processWorkbook(wrk)

Dim sht As Worksheet

For Each sht In wrk.Sheets
Call anotherSub
Next sht

End Sub

关于vba - 如何将变量从一个子传递到另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50295880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com