"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这个代码运行不了是因为什么?
时间: 2023-06-19 14:06:23 浏览: 92
在你的代码中,Range("$A2:$K2").AutoFilter 的 "Filter" 中的 "F" 是小写字母而不是大写字母。这是因为你在单元格引用中使用了小写字母 "l",而不是大写字母 "I",所以代码中的 "AutoFi1ter" 实际上是 "AutoFilter" 的拼写错误。将其更正为 "AutoFilter" 就可以正常运行了。
相关问题
"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:$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
```
这样,当工作表发生变化时,就会自动刷新整个工作簿。
Sheets.Add After:=WB.Sheets.count 如何修改可以实现增加一下SHEET 放在最后
`Sheets.Add(After:=WB.Sheets(WB.Sheets.Count))` 这行代码的作用是在VBScript或类似环境中向工作簿(Workbook)中添加一个新的工作表(Sheet),并将这个新添加的工作表放置在现有的工作表之后,也就是最后一个工作表的后面。
这里的 `WB` 是一个对象,表示一个工作簿。`WB.Sheets` 是一个集合,包含了工作簿中的所有工作表。`WB.Sheets.Count` 是一个属性,返回这个集合中的元素数量,也就是工作表的数量。`WB.Sheets(WB.Sheets.Count)` 表示集合中的最后一个元素,即最后一个工作表。
`After:=` 是一个参数,它指定了新添加的工作表应该放在哪个工作表之后。在这个例子中,它被设置为最后一个工作表,因此新工作表会被添加为工作簿中的最后一个工作表。
如果你要修改这个代码,使其添加的工作表不是放在最后一个工作表之后,而是放在特定的工作表之后,你可以将 `After:=WB.Sheets(WB.Sheets.Count)` 替换为 `After:=WB.Sheets("工作表名称")`,其中 `"工作表名称"` 是你想放在新工作表之后的工作表的名称。例如,如果你想把新工作表放在名为 "Sheet2" 的工作表之后,你可以写成:
```vbscript
Sheets.Add(After:=WB.Sheets("Sheet2"))
```
这会将新工作表添加到 "Sheet2" 工作表之后的位置。
阅读全文