【问题标题】:Create an Excel Macro to filter sheets with a certain title to a new workbook创建 Excel 宏以将具有特定标题的工作表过滤到新工作簿
【发布时间】:2020-07-13 19:10:30
【问题描述】:

我有一个包含约 50 张不同工作表的 Excel 工作簿。这些工作表被组织成原始数据和有组织的数据摘要。

数据摘要是我尝试上传到 Access 数据库的工作表,这些工作表都包含字符串“Summary”或“Sum”作为其名称的一部分。我是 VBA 的新手,我想知道是否有一种方法可以设置脚本来过滤工作表,这样我就只剩下摘要表,而不是作为工作簿一部分的原始数据表。

理想情况下,我会将汇总表复制到新的 Excel 工作簿中,因为我不想丢失原始数据。有什么帮助吗?或者这根本不可能?

【问题讨论】:

  • 你试过录制宏了吗?那将是开始获取一些代码的好地方。
  • 我同意这是一个很好的起点,而且它很有帮助,我被卡住的地方是试图仅识别具有字符串“sum”或“summary”作为其一部分的工作表名称

标签: excel ms-access vba


【解决方案1】:

使用InStr() 函数非常适合这个!额外的好处是工作表将被隐藏并且不会删除。

由于“Summary”已经包含字符串“Sum”,所以我没有费心为此添加逻辑。

隐藏包含“Sum”的表格的宏

Sub HideSheets()

   Dim sht As Worksheet

   For Each sht In Worksheets
      If (InStr(sht.Name, "Sum")) Then
         sht.Visible = xlSheetHidden
      End If
   Next

End Sub

显示所有表格的宏

Sub ShowSheets()

   Dim sht As Worksheet

   For Each sht In Worksheets
      sht.Visible = xlSheetVisible
   Next

End Sub

【讨论】:

    【解决方案2】:
    Option explicit
    
    Sub CopySumSheetsOver()
    
    Const SUBSTRING as string = "Sum" 'Change this to whatever string you want to search for.'
    
    With thisworkbook
    
    Dim ws as Worksheet
    Dim SheetNames() as string
    Redim SheetNames(1 to .worksheets.count)
    
    Dim SheetIndex as long
    
    For each ws in .worksheets
    SheetIndex = SheetIndex + 1
    SheetNames(SheetIndex) = ws.name
    Next ws
    
    Redim preserve sheetnames(1 to sheetindex)
    
    SheetNames = filter(sheetnames,SUBSTRING,True,vbTextCompare) 'vbBinaryCompare is faster, but case-sensitive, use whichever one you need.'
    
    Dim DestinationWorkbook as workbook
    Set DestinationWorkbook = application.workbooks.add
    
    .worksheets(SheetNames).copy destinationworkbook.worksheets(destinationworkbook.worksheets.count)
    
    End with
    
    End sub
    

    未经测试,在移动设备上编写。抱歉格式错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多