Excel VBA删除不需要的工作表



我使用MS Access生成了一堆工作簿和工作表。创建工作簿时,工作簿中有名为"Sheetn"的额外工作表

我知道下面的代码是有效的,但我的问题是时间。

Dim ws as excel.worksheet
For each ws in wbWorking.Worksheets
  oxl.DisplayWarnings=False
    If ws.name like "Sheet*" then ws.delete
  oxl.DisplayWarnings=True
Next ws

在我保存工作簿之前,以上代码不起作用。问题是客户端正在监视工作簿以填充目录,并在工作簿显示后立即打开它们。如果运行上述代码并且客户端打开了工作簿,则会出现问题。我希望在保存工作簿之前删除工作表。

请告知。

从你第一次创建新工作簿的时候开始,以下几行应该可以工作:

Public Function BuildWorkbook(wbkToCopy As Excel.Workbook) As Excel.Workbook
  Dim xl As Excel.Application
  Dim dummySheet As Excel.Worksheet
  Dim sheetToClone As Excel.Worksheet
  Dim i As Long
  Set xl = wbkToCopy.Application
  Set BuildWorkbook = xl.Workbooks.Add(1)
  Set dummySheet = BuildWorkbook.Worksheets(1)
  For Each sheetToClone In wbkToCopy.Worksheets
    'This is just to handle naming conflicts
    Do Until sheetToClone.Name <> dummySheet.Name
      dummySheet.Name = Format(Now(), "yyyymmddhhnnss") & CStr(i)
      i = i + 1
      DoEvents
    Loop
    sheetToClone.Copy BuildWorkbook.Worksheets(1)
  Next
  If BuildWorkbook.Worksheets.Count > 1 Then
    dummySheet.Delete
  End If
End Function

显然,你可以根据需要添加表单,但关键是:

  • 创建新工作簿时指定=Workbooks.Add(1),因此它只使用1个工作表创建
  • 设置对首次创建新工作簿时不需要的工作表的引用
  • 使用该初始引用,在保存工作簿之前,在过程的最后删除工作表

相关内容

最新更新