【问题标题】:how to pass a variable from one sub to another?如何将变量从一个子传递到另一个?
【发布时间】:2018-10-22 01:56:36
【问题描述】:

我正在努力将srcFile 变量从一个子传递到另一个。我想做以下事情:

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

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

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

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

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

【问题讨论】:

  • 使用Function而不是Sub,这允许你返回一个值,然后你可以使用这个值作为你的子的参数。

标签: vba excel


【解决方案1】:

最简单的方法是在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

【讨论】:

    猜你喜欢
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2014-01-03
    • 1970-01-01
    • 2015-11-27
    • 2013-02-08
    相关资源
    最近更新 更多