删除空工作表
Deleting empty worksheets
我正在尝试编写代码来删除工作簿中的空工作表。到目前为止,我已经能够使用代码从最高到最低删除工作表:
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
我上网查了一下,但没有找到有用的东西。任何人都可以帮助我引导我走向正确的方向,在那里我可以获得有关如何仅使用 VB.net 检测单个工作簿中的空工作表的信息。
谢谢
这样就可以了
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
我创建了一个excel有5个sheets,sheet2和4是空的,然后我编辑了一个micro并且运行它(F5 键或绿色播放图标)...
这应该可以解决 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
用调用此函数替换整个循环,将 objWorkBook
对象作为参数传递。
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
'如果您遇到文件对象仍然打开的问题,这意味着您可以在任务管理器中看到EXCEL.exe 然后添加以下代码
For Each instance As Process In Process.GetProcesses
If InStr(instance.MainWindowTitle, Textbox1.Text) <> 0 Then p.Kill()
Next
注意:最好确保释放所有 excel 对象(应用程序、工作簿、工作表等),而不是终止进程。这将确保所有数据都按预期保留而没有副作用。如果您发现有额外的 excel.exe 个实例 运行,请务必仔细检查所有内容是否已正确处置和发布。
我正在尝试编写代码来删除工作簿中的空工作表。到目前为止,我已经能够使用代码从最高到最低删除工作表:
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
我上网查了一下,但没有找到有用的东西。任何人都可以帮助我引导我走向正确的方向,在那里我可以获得有关如何仅使用 VB.net 检测单个工作簿中的空工作表的信息。
谢谢
这样就可以了
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
我创建了一个excel有5个sheets,sheet2和4是空的,然后我编辑了一个micro并且运行它(F5 键或绿色播放图标)...
这应该可以解决 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
用调用此函数替换整个循环,将 objWorkBook
对象作为参数传递。
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
'如果您遇到文件对象仍然打开的问题,这意味着您可以在任务管理器中看到EXCEL.exe 然后添加以下代码
For Each instance As Process In Process.GetProcesses
If InStr(instance.MainWindowTitle, Textbox1.Text) <> 0 Then p.Kill()
Next
注意:最好确保释放所有 excel 对象(应用程序、工作簿、工作表等),而不是终止进程。这将确保所有数据都按预期保留而没有副作用。如果您发现有额外的 excel.exe 个实例 运行,请务必仔细检查所有内容是否已正确处置和发布。