【问题标题】:Delete sheet if cell content doesn't match a list value如果单元格内容与列表值不匹配,则删除工作表
【发布时间】:2014-06-14 03:30:15
【问题描述】:

我已经在这里潜伏了几个月,学习 vba 来帮助我的工作自动生成一些报告,但我终于明白了,我完全陷入困境,无法在线找到答案。

我有一份自动生成的报告,其中包含公司中每个人的单独表格 这每周不会有一个静态文件名,所以我想我需要类似的东西:

Dim thiswb as string
thiswb = activeworkbook.name

我想要做的是,对于 thiswb 中的每个工作表,除非 C4 中单元格中的名称与我保存在另一个工作簿中的列表中的名称匹配(这具有不会更改的静态名称)工作报告”),该工作表被删除。所以最后我留下了一个工作簿,我的列表中的每个名字都有单独的工作表。

任何帮助将不胜感激。如果您需要更多信息,请告诉我。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    Excel clear cells based on contents of a list in another sheet

    我相信这应该可以帮助您。在线搜索答案总是值得的,因为很可能有人已经尝试过您正在尝试做的事情:)

    7 的

    【讨论】:

      【解决方案2】:

      在使用此代码之前,请将您的姓名列表从“工作报告”复制到同一个工作表中。然后,此宏循环遍历工作簿中的每个工作表,并使用FIND 来确定名称是否出现在名为“staffnames”的选项卡上的任何位置。

      Dim focus_SHEET As Worksheet
      Dim Rng As Range
      For Each focus_SHEET In Sheets
          focus_SHEET.Select
          Set Rng = Sheets("staffnames").Cells.Find(Range("C4"), LookIn:=xlValues)
      
          If focus_SHEET.Name = "staffnames" Then
              'skip over the staff list
              'do nothing
              MsgBox ("skip " & focus_SHEET.Name)
          ElseIf Not Rng Is Nothing Then
              'found name on the list
              'do nothing
              MsgBox ("found " & Range("C4"))
          Else:
              'did not find name on the list
              MsgBox ("unrecognized name: " & Range("C4"))
      
              'delete the tab
              Application.DisplayAlerts = False
              focus_SHEET.Delete
              Application.DisplayAlerts = True
          End If
      Next focus_SHEET
      Set focus_SHEET = Nothing
      Set Rng = Nothing
      
      End Sub
      

      您还可以添加更多功能,这些功能将自动打开员工姓名的来源。但这应该会让你朝着正确的方向前进。

      【讨论】:

      • 这是完美的。还添加了将每个工作表格式化为打印并将工作表重命名为 C4 中的名称(如果它在列表中)。非常感谢!
      猜你喜欢
      • 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
      相关资源
      最近更新 更多