Вернуть логическое значение из одной функции в другую функцию - VBA - PullRequest
1 голос
/ 11 апреля 2020

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

Итак, у меня есть эта функция:

Public Function Verifica_Permite_Gas()      
    Dim permit As Boolean       

' Se a torneira permite gasta
    If Permite_GAS Then         
        permit = True           
    Else

' Não permite
        Debug.Print "Erro torneira nao devia conter Gas - Torneira_3 - metodo Permite_GAS"          
        permit = False

    End If

End Function

И вы должны вернуть значение для этой функции

Public Function Verifica_Gas()      
    Dim permite As Boolean

    permite = listaTorneiraSetor(a).Verifica_Permite_Gas()

End Function

Программа работает, не имеет ошибок, но всегда возвращает false, даже если Permit_GAS = TRUE. Я не понимаю, почему, может кто-нибудь помочь мне решить ее?

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Вам нужно изменить исходную функцию, чтобы она возвращала значение:

Public Function Verifica_Permite_Gas() As Boolean
    Dim permit As Boolean
' Se a torneira permite gasta
    If Permite_GAS Then
        permit = True
    Else
' Não permite
        Debug.Print "Erro torneira nao devia conter Gas - Torneira_3 - metodo Permite_GAS"
        permit = False
    End If
    Verifica_Permite_Gas=permit
End Function

И вы можете обойтись без объявления и использования permit, установив Verifica_Permite_Gas напрямую в True или False в If/Else/End If блок:

If Permite_GAS Then
    Verifica_Permite_Gas= True
Else
    Verifica_Permite_Gas= False
End If

С уважением,

0 голосов
/ 11 апреля 2020

Функции в VBA немного забавны тем, что у них нет оператора return, как в некоторых других языках. Чтобы вернуть значение из функции, нужно присвоить значение имени функции.

Итак, внутри Verifica_Permite_Gas, вам просто нужно убедиться, что в какой-то момент у вас есть Verifica_Permite_Gas = result

вы можете представить, что каждый Function содержит Dim Verifica_Permite_Gas As ... где-то там, где вам нужно записать результат.

Так что просто избавьтесь от Dim permit As Boolean и вместо этого используйте:

Public Function Verifica_Permite_Gas()

' Se a torneira permite gasta
If Permite_GAS Then

    Verifica_Permite_Gas = True

Else
    ' Não permite
    Debug.Print "Erro torneira nao devia conter Gas - Torneira_3 - metodo Permite_GAS"

    Verifica_Permite_Gas = False

End If

End Function

Также помните, что вы объявили permit As Boolean - ну, вы можете сделать то же самое с возвращаемым значением вашей функции, так что оно

Public Function Verifica_Permite_Gas() As Boolean
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...