STDIN и STDOUT
Ввод в Sub
подпрограммы и Function
s через входные переменные
Public Sub A(ByRef B as String)
Может быть уменьшено до
Sub a(b$)
Public
иByRef
звонки по умолчанию для VBA и , таким образом , неявно, и может (почти) всегда быть отброшен.
Тип буквальный $
заставляет b
быть типаString
.
Другие литералы типа
!
не замужем
@
валюта
#
двойной
%
целое число
$
строка
&
Длинная
^
LongLong (только 64 бит)
Кроме того, общепринято, что вы можете оставить входную переменную в качестве типа по умолчанию Variant
и оставить любые ошибки на основе типов необработанными. Например. Sub E(F)
в котором, F
как ожидается, будет иметь тип Boolean[]
(который будет передан в рутину, какE Array(True, False, False)
)
Ввод в Sub
подпрограммы и функции непосредственного окна черезCells
VBA не имеет полностью функциональной консоли и, следовательно, не имеет никакого официального STDIN, и, следовательно, позволяет некоторые игру с передачей ввода.
В Excel, как правило, принято принимать данные из ячейки или диапазона ячеек, что может быть сделано как
s=[A1]
который неявно помещает .value
из ячейки [A1]
(на которую также можно ссылаться как cells(1,1)
илиrange("A1")
Пример проблемы: отображение ввода в окне сообщения
Через подпрограмму Sub A:msgbox[A1]:End Sub
Через функцию окна Immediates msgbox[A1]
Ввод с помощью аргументов условной компиляции
Проекты VBA поддерживают получение аргументов из командной строки или через свойства VBAProject (просмотр через проводник проекта -> [Ваш проект VBA] - (Правый клик) -> Свойства VBAProject -> Аргументы условной компиляции)
Это в значительной степени полезно для вызовов кода ошибок
Учитывая аргумент n=
условной компиляции [some_value], это позволяет выполнять код, который будет выдавать код ошибки, основанный на значении n
. обратите внимание, это требует добавления 2-х байтов к вашему коду n=
в разделе аргументов условной компиляции панели свойств VBAProject.
Пример кода
...
#If n=3 then
return '' Produces error code '3', Return without GoSub
#ElseIf n=20 then
resume '' Produces error code '20', Resume without Error
#EndIf
...
Вывод через значение функции
Не очень, чтобы сказать здесь, общая форма, приведенная ниже, настолько компактна, насколько это возможно.
Public Function A(b)
...
A=C
End Function
ПРИМЕЧАНИЕ: в подавляющем большинстве случаев метод преобразования байта в подпрограмму и его вывод в окно немедленного использования VBE выполняется более подробно (см. Ниже).
Вывод из Sub
подпрограмм и Function
s через окно VBE Immediates
Вывод в окно немедленного использования VBE (AKA - окно отладки VBE) является распространенным методом вывода для VBA для текстовых задач, однако важно помнить, что Debug.Print "Text"
вызов может быть в значительной степени обработан.
Debug.Print "Text"
функционально идентичен
Debug.?"Text"
в качестве ?
автоформатов Print
.
Вывод из Sub
подпрограмм и функций окна VBE Immediates с помощью других методов
В редких случаях, когда ситуация просто правильная, вы можете использовать входные данные из некоторых более тривиальных входов, доступных для VBA, таких как регулятор размера шрифта, селектор шрифта и масштабирование. (Например, эмуляция селектора размера шрифта Word )