Я не понимаю, в чем проблема.
У меня есть следующий код:
Public Sub SetupForm()
Dim wbMain As Workbook
Dim wsToner As Worksheet
Set wbMain = ActiveWorkbook
Set wsToner = wbMain.Sheets("Toner")
With DashboardForm
'Parent nodes
Dim Brands() As String
Brands() = GetTonerBrand(wsToner)
Последняя строка вызывает следующую функцию:
Private Function GetTonerBrand(wsSheet As Worksheet) As String
Dim col, Counter
Dim LastCol
Counter = 0
Dim LastRow
Dim Brands() As String
With wsSheet
LastRow = .Cells(.Rows.Count, 2).End(xlUp).Row
Dim RowCount
RowCount = LastRow
End With
Dim dict
Set dict = CreateObject("Scripting.Dictionary")
Do While RowCount > 3
If Not dict.exists(wsToner.Cells(RowCount, 2).Value) Then
dict.Add wsToner.Cells(RowCount, 2).Value, 0
End If
RowCount = RowCount - 1
Loop
ReDim Brands(0 To dict.Count)
Brands() = dict.keys()
GetTonerBrand Brands
End Function
Когда я пытаюсь запустить это, я получаю сообщение об ошибке ниже:
Ошибка компиляции: несоответствие типа аргумента ByRef
Я думал, что если я обновлю тип массива и функции, то это сработает.
Поэтому я изменил функцию на строку, а массивы Brands() также были изменены на строку. Затем я получаю сообщение об ошибке:
Ошибка компиляции: невозможно присвоить массиву
в подразделе SetupForm
на строке Brands() = GetTonerBrand(wsToner)
Очевидно, я что-то упускаю, я просто не вижу, что это такое.
ОБНОВЛЕНИЕ
Я видел этот другой вопрос с похожим названием, это бесполезно.
GetTonerBrand = Brands
. - person   schedule 14.11.2017GetTonerBrand = Brands
- person newacc2240   schedule 14.11.2017GetTonerBrand
говорит, что возвращает строку, но вы возвращаете массив строк, поэтому также измените наAs String()
- person Alex K.   schedule 14.11.2017