Установите переменную VBA в результат из функции, которая является строкой

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

Например:

Функция:

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

Под:

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
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
1 351
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

Я использовал MsgBox только для отладки, но я начинаю видеть свою логическую ошибку, спасибо!

FreeSoftwareServers 09.04.2019 09:07

Пожалуйста. Если ответ дает достаточный ответ на ваш вопрос, отметьте его как правильный, поставив галочку слева. В противном случае вы можете оставить комментарий, если хотите получить более подробную информацию.

Michael 09.04.2019 09:12

@FreeSoftwareServers, если вы принимаете ответы, другие пользователи знают, что дополнительная помощь не требуется :)

Tim Stack 09.04.2019 09:42

@TimStack, я принимаю ответы на 99% моих вопросов, просто не на работе до завтра, чтобы проверить и проверить. Я склоняюсь к Error, потому что он использовал глобальную переменную, но ваш код также легко читался и помог мне понять мою проблему. Спасибо всем, мне редко бывает так трудно выбирать между хорошими ответами!

FreeSoftwareServers 09.04.2019 09:49

Ошибка использовала функцию для изменения глобальной переменной, не возвращая значения из функции. Это не то, как функции должны использоваться. Функции предназначены для возврата значений. Если вы хотите изменить только глобальную переменную, просто используйте Sub.

Michael 09.04.2019 10:14

"Функции для возврата значений". Но как насчет использования функций для повторяющихся действий? Я не думаю, что это выдерживает

Tim Stack 09.04.2019 10:39

Вы используете Subs для повторяющихся действий. Вы вызываете их повторно или рекурсивно. Тот факт, что функция возвращает значение, является единственным отличием от подпрограммы. Это его определяющая цель. Погуглите "Подпрограмма против функции".

Michael 09.04.2019 11:40

Функции абсолютно могут изменять переменные, как переменные, переданные по ссылке, так и глобальные переменные, но если они не возвращают значение, вы просто используете Sub.

Michael 09.04.2019 12:07
Ответ принят как подходящий

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

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

Sub testing()
    returnstr  = Test("Hello")
    MsgBox returnstr
End Sub

Другие вопросы по теме