|
数据量少下面的代码可以正常运行,但数据量大就提示“类型不匹配”,求大神帮忙修改!
Sub 根据关键字自动生成新的子表()
Dim Arr, Rng As Range, sht As Worksheet, Dic As Object
Dim k, t, Str As String, i As Long, lc As Long
Application.ScreenUpdating = False '关闭屏幕更新
Arr = Range("A1").CurrentRegion.Value
lc = UBound(Arr, 2) '求取最后一列的列号
Set Rng = Rows(1) '标题行
Set Dic = CreateObject("Scripting.Dictionary") '创建字典
For i = 2 To UBound(Arr)
Str = Arr(i, 1) '订单号,关键字,1为第一列,2为第二列,以此类推
If Not Dic.Exists(Str) Then '如果字典没有关键字
Set Dic(Str) = Cells(i, 1).Resize(, lc) '把当前行装入到字典中
Else '否则(字典中存在关键字)
Set Dic(Str) = Union(Dic(Str), Cells(i, 1).Resize(, lc)) '把行连合起来
End If
Next
k = Dic.Keys '字典关键字集合
t = Dic.Items '字典项目集合
On Error Resume Next
With Sheets
For i = 0 To Dic.Count - 1 '循环关键字的个数
Set sht = .Item(k(i)) '给变量赋值(工作表名为关键字)
If sht Is Nothing Then '该工作表不存在则插入一个空工作表
.Add(After:=.Item(.Count)).Name = k(i) '新建的工作表将置于所有工作表之后,并命名为关键字
Set sht = ActiveSheet '活动工作表给变量
Else '否则
sht.Cells.Clear '清除工作中所有内容和格式
End If
Rng.Copy sht.Range("A1") '把标题写入第一行
t(i).Copy sht.Range("A2") '写入其他内容
sht.Cells.EntireColumn.AutoFit '自动调整全工作表单元格的列宽
sht.Columns(1).Delete '加入此列自动删除表内第一列,不想删除第一列,请删除此行。
Set sht = Nothing '变量处于初始状态
Next
End With
Sheets(1).Activate '第1个工作表处于激活状态
Application.ScreenUpdating = True '打开屏幕更新
End Sub
|
|