excel - 使用 VBA 在 Excel 中将主电子表格拆分为多个工作表

标签 excel vba

(抱歉,我是新来的,所以请多多包涵哈哈)所以我从 YouTube 教程 (https://www.youtube.com/watch?v=5bOFNsdHiPk&t=326s) 中获得了这段代码,我希望能得到进一步的帮助...

Sub SplitandFilterSheet()
'Step 1 - Name your ranges and Copy sheet
'Step 2 - Filter by Department and delete rows not applicable
'Step 3 - Loop until the end of the list
Dim Splitcode As Range
Sheets("Master").Select
Set Splitcode = Range("Splitcode")

For Each cell In Splitcode
Sheets("Master").Copy After:=Worksheets(Sheets.Count)
ActiveSheet.Name = cell.Value

With ActiveWorkbook.Sheets(cell.Value).Range("MasterData")
.AutoFilter Field:=4, Criteria1:="<>" & cell.Value, Operator:=xlFilterValues
.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With

ActiveSheet.AutoFilter.ShowAllData
Next cell
End Sub

我一直收到“该名称已被占用。尝试使用不同的名称。”在线错误(ActiveSheet.Name = cell.Value)。它似乎只是完整地复制了“母版”工作表,而不是通过其余的过滤/复制过程,因为每次我点击运行时它都会生成一个母版 (2) 和母版 (3) 工作表。

最佳答案

您的错误消息是因为代码试图使用已经存在的名称重命名工作表。您的代码几乎是一种“运行一次”的方法。

您可以先删除任何现有工作表来处理错误。

Sub SplitandFilterSheet()

    Dim Splitcode As Range, wb As Workbook, cell As Range, nm As String
    Dim wsMaster As Worksheet

    Set wb = ActiveWorkbook
    Set wsMaster = wb.Sheets("Master")
    Set Splitcode = wsMaster.Range("Splitcode")
    
    For Each cell In Splitcode.Cells
        nm = cell.Value

        On Error Resume Next   'ignore error if no sheet with this name
        wb.Sheets(nm).Delete   'delete any existing sheet with this name
        On Error Goto 0        'stop ignoring errors

        wsMaster.Copy After:=wb.Worksheets(wb.Sheets.Count)
        With wb.Worksheets(wb.Sheets.Count)
            .Name = nm
            With .Range("MasterData")
                .AutoFilter Field:=4, Criteria1:="<>" & nm, Operator:=xlFilterValues
                .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
            End With
            .AutoFilter.ShowAllData
        End with
    Next cell
End Sub

关于excel - 使用 VBA 在 Excel 中将主电子表格拆分为多个工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66694136/

相关文章:

java - 在 Excel 中将单元格拆分为字符串 - Apache POI JAVA

vba - 通过 VBA 得出的公式结果不正确

excel - 在 Excel 中单击鼠标更改单元格颜色

python - 将 "#N/A"转换为 42 的 xlrd Excel 脚本

excel - 从vba中的单元格地址获取Excel合并单元格的值

excel - 获取脚本中声明的 'Filename'

excel - 用户定义类型与类速度

vba - 连接列(用户选择)并将其替换为新列

PHP - 从不同的文件格式 Word/Excel/Powerpoint/PDF/RTF 中提取文本

excel - 生成协方差矩阵的更快方法