我不明白问题所在。
我有以下代码:
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参数类型不匹配
我认为如果我更新数组和函数的类型,那么它就可以工作。
所以我将Function更改为String,并将Brands()数组更改为String。然后我收到一个错误:
在编译错误:无法分配给数组
SetupForm
行上的Brands() = GetTonerBrand(wsToner)
子广告中
显然我错过了一些东西,我只是不知道它是什么。
更新
我看到这个other question名称相似,但没有帮助。
答案 0 :(得分:1)
在您的问题的评论中提出了很好的观点,但没有一个解决了VBA不会将您的字典键(Variant
数组)神奇地转换为String
数组的事实。< / p>
我建议您修改函数以返回Variant
数组。在您的主叫代码中,您必须修改声明:
'Parent nodes
Dim Brands() As Variant
在下面的代码中,请注意消除了超级变量,而使用合适的类型声明了剩余的变量。最后,为了返回值,函数的名称被赋予字典键。
Private Function GetTonerBrand(wsSheet As Worksheet) As Variant()
Dim row As Long
Dim tonerBrands As Object
Dim tonerBrand As String
With wsSheet
row = .Cells(.Rows.Count, 2).End(xlUp).row
End With
Set tonerBrands = CreateObject("Scripting.Dictionary")
Do While row > 3
tonerBrand = CStr(wsToner.Cells(row, 2).Value)
If Not tonerBrands.Exists(tonerBrand) Then
tonerBrands.Add tonerBrand, 0
End If
row = row - 1
Loop
GetTonerBrand = tonerBrands.Keys()
End Function
关于变体数组的一个很酷的事情是,您可以使用变量类型变量迭代它们,并使用简单的For Each
。