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键单步通过它?