Ответ Тима Уильямса верен.
Однако, имея дело со строкой данных, я считаю полезным определить запись и передать ее любой подпрограмме или функции. Преимущество этого заключается в том, что нет необходимости перекодировать каждый список параметров, когда что-то меняется - достаточно изменить структуру записи один раз. Например:
Public Type typPerson
GivenName As String
Surname As String
ShoeSize As String
NoOfPets As Integer
End Type
Sub SavePersonDetails(recPerson as typPerson, ByVal dblRow as Double)
Activesheet(dblRow, 1).Value = recPerson.GivenName
Activesheet(dblRow, 2).Value = recPerson.Surname
Activesheet(dblRow, 3).Value = recPerson.ShoeSize
Activesheet(dblRow, 4).Value = recPerson.NoOfPets
End Sub
Если вы хотите добавить поле, например «HasCar As Boolean», в структуру записи, список параметров для «SavePersonDetails» не изменится.
возможно, если количество параметров выходит из-под контроля, запись может оказаться полезной.
Кроме того, даже если существует различие, подобное описанному вами, между использованием функций и подпрограмм, вы все равно можете использовать функцию. Там нет ничего, что говорит о том, что вы должны использовать значение, которое возвращает функция. Например:
Function ExplodeApp() as Boolean
ExplodeApp = True
Application.Explode
End Function
может быть вызван:
ExplodeApp
без какого-либо фактического принятия значения, которое он возвращает. Функция - это просто подпрограмма, которая возвращает значение; sub - это просто функция, которая не возвращает значение. В противном случае они взаимозаменяемы. Попробуйте - перекодируйте подпрограмму, чтобы она стала функцией. (Кроме того, это хороший способ уменьшить количество имен, отображаемых в списке макросов, которые можно запустить на вкладке «Разработчик», поскольку на нем отображаются только подпрограммы. Но вы все равно можете запустить функцию, если введете ее имя. )