[英]how to pass a variable from one sub to another?
我正在努力將srcFile
變量從一個子傳遞到另一個。 我要執行以下操作:
1)從本地路徑在loadFile()子目錄中加載源文件
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.