删除空的工作表

我试图写一个代码来删除工作簿中的空工作表。 到目前为止,我已经能够使用代码删除从最高到最低的工作表:

Dim i As Integer Dim objExcel As Object = CreateObject("Excel.Application") objExcel.Visible = True objExcel.DisplayAlerts = False Dim objWorkbook As Excel.Workbook = objExcel.Workbooks.Open(TextBox1.Text) i = objWorkbook.Worksheets.Count Do Until i = 2 objWorkbook.Worksheets(1).Delete() i = i - 1 Loop 

我在网上看了一下,但没有find有用的东西。 任何人都可以帮助我指导我正确的方向,我可以获得有关如何使用VB.net只检测单个工作簿中的空工作表的信息。

谢谢

这应该在vb.net中做的伎俩

 Private Sub DeleteBlankWorksheets(xlWorkBook As Excel.Workbook) For i As Integer = xlWorkBook.Worksheets.Count To 1 Step -1 Dim ws As Excel.Worksheet = CType(xlWorkBook.Worksheets(i), Excel.Worksheet) If Convert.ToInt64(ws.UsedRange.CountLarge) <= 1 Then ws.Delete() End If Next End Sub 

将您的整个循环replace为对此函数的调用,并将objWorkBook对象作为parameter passing。

 Dim objExcel As Object = CreateObject("Excel.Application") objExcel.Visible = True objExcel.DisplayAlerts = False Dim objWorkbook As Excel.Workbook = objExcel.Workbooks.Open(TextBox1.Text) DeleteBlankWorksheets(objWorkbook) 

'添加这个来保存文件

 objWorkbook.Save() objWorkbook.Close() 'closes the files 

'如果您仍然无法打开文件对象,这意味着您可以在任务pipe理器中看到EXCEL.exe,然后添加以下代码

  For Each instance As Process In Process.GetProcesses If InStr(instance.MainWindowTitle, Textbox1.Text) <> 0 Then p.Kill() Next 

注:确保处置所有的Excel对象(应用程序,工作簿,工作表等)比杀死进程更好。 这将确保所有数据按预期保存,无副作用。 如果你发现你有额外的excel.exe实例在运行,请确保仔细检查一切正确处理和释放。

这将完成这项工作

 Sub DeleteBlankWs() Dim ws As Worksheet For Each ws In Worksheets If WorksheetFunction.CountA(ws.Cells) = 0 Then Application.DisplayAlerts = False ws.Delete Application.DisplayAlerts = True End If Next ws End Sub 

我创build了5张工作表,表2和4是空的,然后我编辑了一个微型和运行它(F5键或绿色的播放图标)…

在这里输入图像说明