我正在尝试根据名称对行进行排序,并将它们放在自己的工作表中。我正在使用字典来跟踪每个字典的当前行。我已经包含了对Microsoft Scripting Runtime的引用。每次运行时,它都会到达代码中指示的行,然后抛出运行时错误1004,应用程序定义或对象定义的错误。此外,当我观看nameDict
时,值为:<Object variable or With block variable not set>
,但类型为Dictionary
。这是因为它没有正确初始化吗?我已经阅读了几种不同的方法来初始化字典,并对最佳方式感到困惑。所有其他变量和函数都可以正常工作,因为它们已经独立测试,并且在其他潜艇中进行了测试。
Private Sub sortTeamWork()
Dim nameDict As New Scripting.Dictionary
Dim index As Integer
index = getTargetColumn("Last Name")
For i = CInt(getUsedRows()) To 2 Step -1
name = Cells(i, index - 1) + " " + Cells(i, index)
'The below line is where the error occurs
If nameDict.Exists(name) Then
nameDict.Items(name) = nameDict.Items(name) + 1
Cells(i, index).EntireRow.Copy Destination:=Worksheets(name).Range("A" & nameDict(name))
Else
nameDict.Items(name) = 2
Cells(i, index).EntireRow.Copy Destination:=Worksheets(name).Range("A" & nameDict(name))
End If
Next i
End Sub
工作表上有一个标题我试图将行复制到第一行并从那里开始递增。任何帮助将不胜感激。
答案 0 :(得分:-1)
您必须通过转到VBA project -> Tools -> References: Tick Microsoft Scripting Runtime.
添加引用并使用词典类型
或 你可以做一个像
这样的后期绑定Dim nameDict As Object
set nameDict = createObject("Scripting.Dictionary")
确保在模块顶部设置Option Explicit
。这将指出所有编译器错误。