Присвоение значения из подпрограммы - PullRequest
1 голос
/ 09 июля 2019

Кажется, я не могу написать базовую подфункцию для возврата значения. Я получаю «ошибка компиляции: ожидаемое имя функции или переменной», но VBA, кажется, распознает имя. Он даже меняет заглавные буквы при обновлении имени функции.

Я посмотрел на помощь и даже похожие посты здесь. Я предполагаю, что это глупая ошибка, но может кто-нибудь помочь мне понять, что я делаю неправильно. Я даже сделал простую функцию, которая не компилируется:

Sub fIVe()
    Dim i As Integer
    i = 5
    fIVe = i
End Sub

sClassification = getClassification("Activities")
ExportSheet "Activities", sFolderName, xWb, True, sClassification

Public Sub getClassification(sTabName As String)
    Dim sClassificationCode As String, sClassification As String
    'Step 1: Find Code for tab name
    sClassificationCode = Application.WorksheetFunction.Index(Sheets("Cover Master").Range("B7:B12"), _
        Application.WorksheetFunction.Match(sTabName, Sheets("Cover Master").Range("A7:A12"), 0), 1)
    'Step 2: Find definition in Type Definitions tab using code from above
    sClassification = Application.WorksheetFunction.Index(Sheets("Type Definitions").Range("F6:F21"), _
        Application.WorksheetFunction.Match(sClassificationCode, Sheets("Type Definitions").Range("E6:E21"), 0), 1)
     getClassification = sClassification
End Sub

1 Ответ

1 голос
/ 09 июля 2019

Несколько изменений для его компиляции. Чтобы вернуть значения, вместо

Public Sub foo
End Sub

вы используете

Public Function foo As SomeReturnTypeOrOther
    foo = SomeValueOrOther
End Function

Изменения, отмеченные знаком «<==» в следующих случаях. </p>

Function fIVe() As Long    ' <== 'Function' instead of 'Sub'; add 'As <type>'
    Dim i As Long          ' <== Use 'Long' instead of 'Integer'
    i = 5
    fIVe = i
End Function                ' <== End Function

Public Sub DoSomething()    ' <== Wrap the 'sClassification = ...' 
                            ' and 'ExportSheet' lines in a Sub
    Dim sClassification As String   ' <== Since it's not in `getClassification`, 
                                    ' it doesn't share the variables
    sClassification = getClassification("Activities")
    ExportSheet "Activities", sFolderName, xWb, True, sClassification
End Sub

Public Function getClassification(sTabName As String) As String  ' <== Function; As String
    Dim sClassificationCode As String, sClassification As String
    'Step 1: Find Code for tab name
    sClassificationCode = Application.WorksheetFunction.Index(Sheets("Cover Master").Range("B7:B12"), _
        Application.WorksheetFunction.Match(sTabName, Sheets("Cover Master").Range("A7:A12"), 0), 1)
    'Step 2: Find definition in Type Definitions tab using code from above
    sClassification = Application.WorksheetFunction.Index(Sheets("Type Definitions").Range("F6:F21"), _
        Application.WorksheetFunction.Match(sClassificationCode, Sheets("Type Definitions").Range("E6:E21"), 0), 1)
     getClassification = sClassification
End Function

' I also added a stub ExportSheet since it wasn't included in your question.
Public Sub ExportSheet(ParamArray args() As Variant)
    ' Not sure what you want to do here
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...