删除空的工作表
我试图写一个代码来删除工作簿中的空工作表。 到目前为止,我已经能够使用代码删除从最高到最低的工作表:
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键或绿色的播放图标)…