如何在excel vba中获得一个子程序来返回一些东西?

我在Excel VBA中有以下代码:

Sub main() Call Get_Rows_Generic("usersFullOutput.csv", 1) End Sub 

在另一个模块中我有:

 Sub Get_Rows_Generic(work_sheet As String, column_num As Integer) Dim wsUsers As Worksheet: Set wsUsers = Worksheets(work_sheet) Dim userRows As Integer: userRows = wsUsers.Cells(Rows.Count, column_num).End(xlUp).Row MsgBox userRows End Sub 

我如何访问子Get_Rows_Generic的子Get_Rows_GenericMsgBox显示的)的结果? 即将结果input另一个子或单元格等等。

为什么不把它作为一个function呢?

 Function Get_Rows_Generic(work_sheet As String, column_num As Integer) Dim wsUsers As Worksheet: Set wsUsers = Worksheets(work_sheet) Dim userRows As Integer: userRows = wsUsers.Cells(Rows.Count, column_num).End(xlUp).Row Get_Rows_Generic = userRows End Sub 

那么你的电话可以

 Sub main() Dim result as integer result = Get_Rows_Generic("usersFullOutput.csv", 1) End Sub 

如果你想让result成为一个全局variables,那么我会引用你这个问题: 我如何在VBA中声明一个全局variables?

 Public result as integer 

假设你知道你可以将你的Sub转换成一个Function,那么有一个粗糙的方法来实现你正在做的事情。 由于VBA / VBScript默认将parameter passing为ByRef ,因此可以使用它来“返回”一个值。

 Sub main() Dim userRows as Integer userRows = 0 Call Get_Rows_Generic("usersFullOutput.csv", 1, userRows) Msgbox userRows End Sub Sub Get_Rows_Generic(work_sheet As String, column_num As Integer, ByRef userRows as Integer) Dim wsUsers As Worksheet: Set wsUsers = Worksheets(work_sheet) Dim userRows As Integer: userRows = wsUsers.Cells(Rows.Count, column_num).End(xlUp).Row End Sub