Формат функции Excel
Я совершенно новичок в написании функций в Excel (в основном это был код подпрограмм).
Мне было интересно, что означает следующее объявление функции?
public function function_name(args as string) as string
Я все понимаю до второго случая as string
, Это что-то новое для меня, и я не уверен, насколько это отличается от простого объявления:
public function function_name(args as string)
4 ответа
public function function_name(args as string) as string
public - это определение доступа. общедоступные средства, доступные через проект VBA
функция означает, что это функция (тоесть она должна что-то возвращать)
имя_функции - это имя функции (не может начинаться с 1 или подчеркивания)
args - это локальное имя параметра, которое будет использоваться в теле функции
args as String указывает, что функция ожидает
args
быть изString
тип...) Поскольку String указывает, что функция будет возвращать
String
тип данных. Поэтому, если у вас есть размерная переменная типа String, вы сможете присвоить ей значение с помощью функции.
стандартное (по умолчанию) объявление без явного указания возвращаемого типа возвращает Variant
Это то же самое, что объявить переменную без указания ее типа.
Dim aVariable
с эквивалентно
Dim aVariable as Variant
так как Variant
это тип по умолчанию.
Итак as Variant
всегда существует, если не указан другой тип. И поскольку это по умолчанию, вам не нужно явно его кодировать.
Это как-то похоже на Range("A1").Value
а также Range("A1")
- оба одинаковы, потому что .Value
это свойство по умолчанию Range
объект.
Что происходит сейчас, это то, что компилятор оценивает, какое значение входит в aVariable
под капотом и назначает этот тип переменной.
Допустим, у вас есть
Sub Main()
Dim varVariable
Dim strVariable As String
varVariable = "hello world"
strVariable = "hello world"
MsgBox "varVariable is of " & TypeName(varVariable) & " type" & vbCrLf & _
"strVariable is of " & TypeName(strVariable) & " type"
End Sub
Как я уже сказал, оба String
тип
Не уверен, насколько вы знакомы, например, с C#, но в C# вы объявляете тип возврата функции сразу после модификатора доступа, т.е.
public string myFunction(string args)
так в VB/VBA второй as String
равен первому string
(сразу после публики) в C#
в C# вы бы использовали return
Ключевое слово в то время как в VBA вы заменяете return
Ключевое слово с именем функции. Поэтому в VBA очень простой образец
Public Function ReturnFirst3Characters(args As String) As String
ReturnFirst3Characters = IIf(Len(args) > 2, Left(args, 3), args)
End Function
Функция возвращает первые 3 символа строки, которую вы ей передали (если строка длиннее 3 символов, если нет, она возвращает строку, которую вы передали функции)
С http://www.cpearson.com/excel/writingfunctionsinvba.aspx:
Function RectangleArea(Height As Double, Width As Double) As Double
RectangleArea = Height * Width
End Function
Эта функция принимает в качестве входных данных две переменные типа Double, Height и Width, и возвращает Double в качестве результата.
Второе "как" указывает тип, который возвращает функция. Эта функция возвращает строку, вы можете вернуть значение внутри функции следующим образом:
function_name="Value"
Если вы знакомы с Procedure
с, думать о Function
как Procedure
это возвращает значение. as String
как конец указывает, какой тип значения возвращается.
Чтобы вернуть значение, используйте имя функции, как если бы оно было переменной:
Public Function ConvertToUpperCase(str as string) as string
ConvertToUpperCase = UCase(str)
End Function