"Sub 按关键字拆分工作表() Dim d As New Dictionary With Sheets("汇总表") arr = .[a2].CurrentRegion For i = 3 To UBound(arr) d(arr(i, 4)) = i Next For j = 0 To d.Count - 1 .Range("$A2:$N2").AutoFilter 4, d.Keys(j) Sheets.Add , Sheets(Sheets.Count) ActiveSheet.Name = d.Keys(j) .[a1].CurrentRegion.Copy ActiveSheet.[a1] Next j .Range("$A2:$N2").AutoFilter .Activate End With End Sub"请添加下面的代码"Private Sub Worksheet_Change(ByVal Target As Range) ActiveWorkbook.RefreshAll End Sub"怎么修改
时间: 2023-12-10 18:41:56 浏览: 29
您可以将新的代码添加到原有的代码之后,如下所示:
```
Sub 按关键字拆分工作表()
Dim d As New Dictionary
With Sheets("汇总表")
arr = .[a2].CurrentRegion
For i = 3 To UBound(arr)
d(arr(i, 4)) = i
Next
For j = 0 To d.Count - 1
.Range("$A2:$N2").AutoFilter 4, d.Keys(j)
Sheets.Add , Sheets(Sheets.Count)
ActiveSheet.Name = d.Keys(j)
.[a1].CurrentRegion.Copy ActiveSheet.[a1]
Next j
.Range("$A2:$N2").AutoFilter
.Activate
End With
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveWorkbook.RefreshAll
End Sub
```
这样,当工作表发生变化时,就会自动刷新整个工作簿。
相关问题
"Sub 按关键字拆分工作表() Dim d As New Dictionary With Sheets("总表") arr = .[a2].CurrentRegion For i = 3 To UBound(arr) d(arr(i, 4)) = i Next For j = 0 To d.Count - 1 .Range("$A2:$K2").AutoFilter 4, d.Keys(j) Sheets.Add , Sheets(Sheets.Count) ActiveSheet.Name = d.Keys(j) .[a1].CurrentRegion.Copy ActiveSheet.[a1] Next j .Range("$A2:$K2").AutoFi1ter .Activate End With End Sub" 代码中Range("$A2:$K2").AutoFi1ter这个代码运行不了是因为什么?
在你的代码中,Range("$A2:$K2").AutoFilter 的 "Filter" 中的 "F" 是小写字母而不是大写字母。这是因为你在单元格引用中使用了小写字母 "l",而不是大写字母 "I",所以代码中的 "AutoFi1ter" 实际上是 "AutoFilter" 的拼写错误。将其更正为 "AutoFilter" 就可以正常运行了。
Sub 流量源MB() Dim sPath As String Dim fso As Object, objmainFolder As Object, objFile As Object Dim n%, t% Dim arr As Variant Application.ScreenUpdating = False With Application.FileDialog(msoFileDialogFolderPicker) .Show If .SelectedItems.Count = 0 Then MsgBox "您没有选择相应路径!", vbInformation + vbOKOnly, "警告" Exit Sub Else sPath = .SelectedItems(1) End If End With Set fso = CreateObject("scripting.filesystemobject") Set objmainFolder = fso.getfolder(sPath) On Error Resume Next tms = Timer For Each objFile In objmainFolder.Files If LCase(Right(objFile.Name, 3)) = "xls" Then With GetObject(objFile.Path) With .Sheets(1) intlastrow = .[a6].CurrentRegion.Rows.Count .Range("ag6:ag1" & intlastrow) = Mid(objFile.Name, 18, 10) arr = .Range("a6:ag1" & intlastrow) End With .Close False End With With Sheets("流量源-MB") .Cells(.Rows.Count, 3).End(xlUp).Offset(1).Resize(UBound(arr), UBound(arr, 2)) = arr End With End If n = n + 1 Next objFile t = t + 1 Set objFolder = Nothing Set fso = Nothing MsgBox "您刚刚汇总了" & t & "个文件夹,总计" & n & "个文件!" & "总耗时" & Int((Timer - tms) / 60) & "分" & ((Timer - tms) Mod 60) & "秒", vbOKOnly, "温馨提示" End Sub
这段代码是一个 VBA(Visual Basic for Applications)宏,用于汇总特定文件夹中的 Excel 文件数据到一个名为 "流量源-MB" 的工作表中。以下是代码的主要步骤:
1. 弹出一个文件夹选择对话框,让用户选择要汇总数据的文件夹。
2. 如果用户未选择文件夹,则显示一个警告消息框并退出宏。
3. 使用文件系统对象 (FileSystemObject) 创建一个对选定文件夹的引用。
4. 遍历选定文件夹中的每个文件。
5. 如果文件是以 ".xls" 结尾,则打开该文件。
6. 在打开的工作簿的第一个工作表中,获取数据区域的最后一行。
7. 将文件名的一部分(第 18 到 27 个字符)写入数据区域的 "AG6:AG" & 最后一行 单元格范围。
8. 将数据区域的值存储在变量 arr 中。
9. 关闭打开的工作簿,而不保存更改。
10. 将 arr 的值写入名为 "流量源-MB" 的工作表中的下一个空行。
11. 计算已处理文件和文件夹的计数。
12. 显示一个消息框,其中包含已处理文件夹和文件的计数以及总耗时。
请注意,这段代码假设目标工作簿中已经存在名为 "流量源-MB" 的工作表。如果该工作表不存在,代码将会引发错误。