ByRef Несоответствие аргумента при передаче массива в подпрограмму или функцию - PullRequest
1 голос
/ 06 марта 2019

Я работаю над небольшим проектом для работы.Все, что я пытаюсь сделать, это создать массив в Sub1 и вызвать функцию, передать массив этой функции и заставить его заполнить массив.

Очень упрощенно, выглядит примерно так:

Private Sub whatever()
  Dim arr(10, 2) As String
  workArray arr
End Sub

Sub workArray(ByRef arr As String)
  '- do stuff here
End Sub

Я так много гуглил и просто не могу понять, что я делаю не так.Я также пытался:

  • вызов workArray (arr)
  • вызов workArray arr
  • workArray (arr)
  • workArray arr

Я читал, что могу передавать только массив ByRef, поэтому я уверен, что все должно быть в порядке.Массив arr имеет тип String, массив, который ожидает функция, объявлен как String - это тоже должно быть в порядке.Я всегда получаю «Несоответствие типов аргументов ByRef».Может проблема в типе String?Строковые массивы ведут себя по-другому?

Кто-нибудь здесь достаточно любезен, чтобы освободить меня от моей боли?

1 Ответ

0 голосов
/ 06 марта 2019

В функции отсутствует (), массиву нужно () после переменной при передаче его куда-то еще, поэтому VBA знает его как массив

Private Sub whatever()
  Dim arr(10, 2) As String
  workArray arr
End Sub

Sub workArray(ByRef arr() As String)
  '- do stuff here
End Sub

Редактировать

Я немного осматриваюсь cperson имеет отличное руководство по передаче массивов в функции и обратно. В случае сомнений, проверьте cperson. У него куча полезных вещей, касающихся VBA

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...