Vba 脚本不从“复制数据”;电子邮件;第页至“;新表格";-运行时错误:对象必需错误

Vba 脚本不从“复制数据”;电子邮件;第页至“;新表格";-运行时错误:对象必需错误,vba,excel,Vba,Excel,我目前正在编写一个脚本,该脚本将一些数据从一个工作表复制到另一个工作表,但我不断收到以下错误消息: 运行时错误:需要对象 在 Set uRng=.Range(“F1”和.Range(“F”和.Rows.Count).End(xlUp)) 是什么引起的 代码如下: Sub Collapse() Dim uRng As Range, cel As Range Dim comps As Variant, comp As Variant, r As Variant, v As Variant 'Dim

我目前正在编写一个脚本,该脚本将一些数据从一个工作表复制到另一个工作表,但我不断收到以下错误消息:

运行时错误:需要对象

Set uRng=.Range(“F1”和.Range(“F”和.Rows.Count).End(xlUp))

是什么引起的

代码如下:

Sub Collapse()
Dim uRng As Range, cel As Range
Dim comps As Variant, comp As Variant, r As Variant, v As Variant
'Dim d As Dictionary '~~> Early bind, for Late bind use commented line
Dim d As Object
Dim a As String

With Emails '~~> Sheet that contains your data
    Set uRng = .Range("F1", .Range("F" & .Rows.Count).End(xlUp))
End With

Set d = CreateObject("Scripting.Dictionary")
With d
    For Each cel In uRng
        a = Replace(cel.Offset(0, -3), "{", "}")
        comps = Split(a, "}")
        Debug.Print UBound(comps)
        For Each comp In comps
            If InStr(comp, "Computer") <> 0 _
            And Len(Trim(comp)) <= 10 Then '~~> I assumed max Comp# is 99
                If Not .Exists(cel) Then
                    .Add cel, comp
                Else
                    If IsArray(.Item(cel)) Then
                        r = .Item(cel)
                        ReDim Preserve r(UBound(r) + 1)
                        r(UBound(r)) = comp
                        .Item(cel) = r
                    Else
                        r = Array(.Item(cel), comp)
                        .Item(cel) = r
                    End If
                End If
            End If
        Next
    Next
End With

For Each v In d.Keys
    With Sheet2 '~~> sheet you want to write your data to
        If IsArray(d.Item(v)) Then
            .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0) _
                .Resize(UBound(d.Item(v)) + 1) = v
            .Range("B" & .Rows.Count).End(xlUp).Offset(1, 0) _
                .Resize(UBound(d.Item(v)) + 1) = Application.Transpose(d.Item(v))
        Else
            .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0) = v
            .Range("B" & .Rows.Count).End(xlUp).Offset(1, 0) = d.Item(v)
        End If
    End With
Next
Set d = Nothing

End Sub
Sub-Collapse()
变暗燃烧范围,电池范围
变光组件作为变型,组件作为变型,r作为变型,v作为变型
“Dim d As Dictionary”~~~>早期绑定,对于后期绑定使用注释行
将d作为对象
像线一样变暗
使用包含您的数据的电子邮件“~~>工作表
设置uRng=.Range(“F1”、.Range(“F”&.Rows.Count).End(xlUp))
以
Set d=CreateObject(“Scripting.Dictionary”)
与d
对于uRng中的每个cel
a=替换(单元偏移量(0,-3),“{”,“}”)
comps=拆分(a,“}”)
调试。打印UBound(comps)
对于每个comp中的comp
如果仪表(组件,“计算机”)0_
以及要将数据写入的Len(Trim(comp))表
如果是(d.第(v)项),则
.Range(“A”和.Rows.Count).End(xlUp).Offset(1,0)_
.调整大小(UBound(d.项(v))+1)=v
.Range(“B”和.Rows.Count).End(xlUp).Offset(1,0)_
.Resize(UBound(d.Item(v))+1)=Application.Transpose(d.Item(v))
其他的
.Range(“A”和.Rows.Count).End(xlUp).Offset(1,0)=v
.范围(“B”和.Rows.Count).结束(xlUp).偏移量(1,0)=d.项目(v)
如果结束
以
下一个
设置d=无
端接头

如果您有一个名为“电子邮件”的工作表,那么您需要:

Dim Emails As Worksheet
Set Emails = Sheets("Emails")

靠近潜艇顶部。

你确定它在那条线上吗?你有没有试过用F8键单步通过它?