Установите переменную VBA в Result from Function, которая является строкой - PullRequest
1 голос
/ 09 апреля 2019

Сегодня я прочитал много о функциях, и все они, похоже, имеют дело с математикой / числами. Я пытаюсь использовать функцию, которая возвращает строку и записывает ее как переменную в "основной подпрограмме", но я не могу заставить ее работать. Кто-нибудь может указать, что я делаю не так?

Например:

Функция:

Public Function Test(var) As Variant
 Bar = var & "World"
 MsgBox Bar
End Function

Sub:

Public Bar As Variant
Public Z As Variant
Sub testing()
 Call Test("Hello") ' This displays "HelloWorld" from MsgBox in Function 
 Test ("Hello")     ' This displays "HelloWorld" from MsgBox in Function 
 Z = Test("Hello")  ' This displays "HelloWorld" from MsgBox in Function 
 MsgBox Z           ' This displays an empty MsgBox :*(
End Sub

Ответы [ 2 ]

4 голосов
/ 09 апреля 2019

Если вы хотите, чтобы функция возвращала значение, заполните переменную функции и верните ее в основной подпрограмме, например:

Public Function Test(var As String) As String
    Test = var & " World"
End Function

Sub testing()
    returnstr  = Test("Hello")
    MsgBox returnstr
End Sub
2 голосов
/ 09 апреля 2019

Вы не возвращаете значение из функции.Кроме того, функции должны использоваться только для возврата значений, а не для выполнения действий, которые изменяют вещи (кроме переменных) или отображают всплывающие окна.Также сбивает с толку наличие глобальных переменных и передача переменных в функцию.Обычно вы передаете локальные переменные в функцию.Вот более чистый пример (сначала с вашей основной функцией, как обычно):

Sub Testing()
    Dim Z As String
    Z = Test("Hello")
    MsgBox Z
    MsgBox Test("Hello")
End Sub

Public Function Test(ByRef var As String) As String
    Test = var & "World"
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...