簡體   English   中英

如何將變量從一個子傳遞到另一個?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM