我使用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个工作表创建 - 设置对首次创建新工作簿时不需要的工作表的引用
- 使用该初始引用,在保存工作簿之前,在过程的最后删除工作表