Получение ошибки «Аргумент не необязательный» в сегменте кода - PullRequest
1 голос
/ 18 июня 2019

Я продолжаю получать «Аргумент не является обязательным» на этом Sub.Слово .Add также всегда подсвечивается.

Я пытался использовать Set и объявить коллекцию в Sub и в вызывающей функции.Установка аргумента как ByRef или Optional работает либо.

Sub getDescriptions(ByRef descriptions As Collection)
    Dim i As Integer
    i = 0
    Set descriptions = New Collection
    Do While Cells(i + 3, 1).Value <> "" And Cells(i + 3, 2).Value <> ""
        descriptions.Add = Cells(i + 3, 2).Value & " - Test Period " & Cells(i + 3, 4).Value & " - " & Cells(i + 3, 5).Value
        i = i + 1
    Loop
End Sub

Public descriptions as Collection

Private Sub UserForm_Initialize()    'calling Sub
    With Application.ActiveWindow
        Me.Left = .Left + (.Width - Me.Width) / 2
        Me.Top = .Top + (.Height - Me.Height) / 2
    End With
    Set descriptions = New Collection
    getDescriptions (descriptions)
...

1 Ответ

3 голосов
/ 18 июня 2019

Есть проблема:

descriptions.Add = {expression}

Вы вызываете метод Add без каких-либо параметров, а затем пытаетесь присвоить его возвращаемому значению (а я недумаю, что он есть).

Синтаксически это выглядит следующим образом:

  • Возьмите descriptions коллекцию
  • Запустите метод Add без каких-либо аргументов (компилироватьошибка: аргумент не является обязательным)
  • Возьмите возвращаемое значение (его нет, но это синтаксически не имеет значения) и, предполагая, что это объект со свойством по умолчанию, присвойте его выражению с правой стороныоператора =.

Если метод Add не требует никаких аргументов и возвращает ссылку на объект, ваш код может быть действительным.Поскольку действительно имеет необязательный параметр и ничего не возвращает, это ошибка компиляции.

Удалите оператор =, вы получите следующее:

descriptions.Add {expression}

Что выглядит следующим образом:

  • Возьмите description collection
  • Вызовите метод Add, передайте {expression} в качестве аргумента

Это также проблема:

getDescriptions (descriptions)

Снять скобки;они вынуждают ссылку на объект оценивать как выражение значения - а свойство по умолчанию Collection class '(вызывается при разрешении объекта во время вычисления выражения) является его параметризованным членом Item(Index), вы не можете сделать это юридически,Обратите внимание, что если свойство по умолчанию не параметризовано, вы будете передавать его значение ByVal, независимо от того, getDescriptions указывает ByRef.

При этом параметр descriptions нужно только передать ByRef потому что вы переназначаете ссылку на сам объект с этим оператором Set - довольно подверженная ошибкам вещь, связанная с глобальной переменной.

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