2015-03-14 3 views
0

я следующий код в 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 (что показано на MsgBox) вне из суб? т.е. подавать результат в другой суб или ячейку ... и т. д.

+1

Если вы хотите, чтобы 'Sub' возвращал что-то, это' Function' – Matt

ответ

3

Почему бы просто не сделать это функцией?

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 быть глобальной переменной, то я бы направить вас на этот вопрос: How do I declare a global variable in VBA?

Public result as integer 
+0

Спасибо! последняя строка fuction должна быть 'Get_Rows_Generic = userRows', правильно? – dwstein

+1

@dwstein Спасибо. Да вы правы. Там должен быть знак равенства. – Matt

1

Если предположить, что вы знаете, что вы можете преобразовать свой Sub в функцию, есть грубый способ достичь того, что вы пытаетесь сделать. Поскольку VBA/VBScript по умолчанию передает параметры как 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 
Смежные вопросы