Сегодня я прочитал кучу о функциях, и все они, кажется, имеют дело с математикой/числами. Я пытаюсь использовать функцию, которая возвращает строку и фиксирует ее как переменную в «основной подпрограмме», но я не могу заставить ее работать. Может ли кто-нибудь указать, что я делаю неправильно?
Например:
Функция:
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
Вы не возвращаете значение из функции. Кроме того, функции следует использовать только для возврата значений, а не для выполнения действий, которые изменяют вещи (кроме переменных) или отображают всплывающие окна. Также сбивает с толку наличие глобальных переменных и передача переменных в функцию. Обычно вы передаете локальные переменные в функцию. Вот более чистый пример (сначала ваша основная функция, как обычно):
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
Пожалуйста. Если ответ дает достаточный ответ на ваш вопрос, отметьте его как правильный, поставив галочку слева. В противном случае вы можете оставить комментарий, если хотите получить более подробную информацию.
@FreeSoftwareServers, если вы принимаете ответы, другие пользователи знают, что дополнительная помощь не требуется :)
@TimStack, я принимаю ответы на 99% моих вопросов, просто не на работе до завтра, чтобы проверить и проверить. Я склоняюсь к Error, потому что он использовал глобальную переменную, но ваш код также легко читался и помог мне понять мою проблему. Спасибо всем, мне редко бывает так трудно выбирать между хорошими ответами!
Ошибка использовала функцию для изменения глобальной переменной, не возвращая значения из функции. Это не то, как функции должны использоваться. Функции предназначены для возврата значений. Если вы хотите изменить только глобальную переменную, просто используйте Sub.
"Функции для возврата значений". Но как насчет использования функций для повторяющихся действий? Я не думаю, что это выдерживает
Вы используете Subs для повторяющихся действий. Вы вызываете их повторно или рекурсивно. Тот факт, что функция возвращает значение, является единственным отличием от подпрограммы. Это его определяющая цель. Погуглите "Подпрограмма против функции".
Функции абсолютно могут изменять переменные, как переменные, переданные по ссылке, так и глобальные переменные, но если они не возвращают значение, вы просто используете Sub.
Если вы хотите, чтобы функция возвращала значение, заполните переменную функции и верните ее в основной подпрограмме, например так
Public Function Test(var As String) As String
Test = var & " World"
End Function
Sub testing()
returnstr = Test("Hello")
MsgBox returnstr
End Sub
Я использовал MsgBox только для отладки, но я начинаю видеть свою логическую ошибку, спасибо!