【发布时间】:2011-07-27 05:14:38
【问题描述】:
我有:
Public Class ExcelProcess
Private App As New Excel.Application
Private Books As Excel.Workbooks = App.Workbooks
Private WB As Excel.Workbook
Public Sub deleteSheets()
Dim sheet As Excel.Worksheet = getSheetToDelete()
sheet.Activate()
sheet.Delete()
WB.Save()
WB.Close()
End Sub
Private Function getSheetToDelete() As Excel.Worksheet
Try
WB = Books.Open("file.xlsx")
Catch ex As Exception
InputOutput.print(ex.Message)
End
End Try
Return WB.Sheets(1)
End Function
End Class
我运行了上面的代码,运行成功,绝对没有错误或异常!
但工作表没有被删除!
我也试过了:
sheet.Select()
sheet.Delete()
' Now, this gave me an exception:
Unhandled Exception: System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x800A03EC
at Microsoft.Office.Interop.Excel._Worksheet.Select(Object Replace)
at DealerCapReport.ExcelProcess.deleteSheets()
at DealerCapReport.MainModule.Main()
我尝试检查 sheet.Delete() 布尔值是否成功:
If sheet.Delete() Then ' Error: Expression does not produce a value.
Console.WriteLine("Can-not Delete")
End If
它说 Error: Expression does not generate a value. 在 sheet.Delete() 中。
奇怪的是Microsoft API reference 说它会产生一个布尔值,但它不会,因为它是一个 Sub 而不是一个函数。
发生了什么以及发生了什么?
我做错了吗?
请帮我解决这个问题!
【问题讨论】:
-
getSheetToDelete() 的邮政编码
-
我已经发布了 getSheetToDelete() 函数。
-
我还尝试在删除之前选择工作表,这给了我一个例外。不知道为什么会这样!
-
拥有更多调用函数的代码上下文可能会有所帮助。看我的回答。
-
您的代码无法编译(例如,
Private对于局部变量声明无效)。请创建一个不起作用的代码的最小工作示例,有关详细信息,请参阅tinyurl.com/so-hints 上的“示例代码”部分。