VB中后台打开Excel文件

作者:

某些时候需要打开 Excel 文件来获取或者写入数据,但又不希望跳出打开的 Excel 文件窗口,可以用下面的代码:

Dim eb As New excel.Application, wb as excel.Workbook
Set wb = eb.Application.Workbooks.Open(FileName:=nameOfFile, ReadOnly:=False) ' open

' do your work

wb.Close True ' save and close

原理: New Excel.Application 新建了一个 Excel 实例,这个实例默认不可见。具体而言,获取 Excel.Application 实例有两种方式:

Dim eb As Excel.Application
Set eb = CreateObject(, "Excel.Application")
    ' 新建Excel实例,同dim eb as new Excel.Application
Set eb = GetObject(, "Excel.Application")
    ' 从Windows环境获取Excel实例,如果当前没有打开的Excel窗口,将出现错误

如果对是否后台打开没有要求的话,最好结合上面两种方式获取 Excel 实例:

' 获取Excel实例,如果当前已经有excel窗口,则直接获取当前实例,否则新建实例
Function GetExcelApp() As Excel.Application
    On Error Resume Next
    Set GetExcelApp = GetObject(, "Excel.Application")
    If Err.Number > 0 Then Err.Clear: Set GetExcelApp = New Excel.Application
End Function

Q. E. D.

类似文章:
编程 » VBA, Excel
如果不提供错误处理方法, VBA在出错时会停留在出错之处。Excel/VBA 提供 On Error关键词来处理程序运行过程中的错误,具体有下面两种用法:
编程 » Excel, VBA
无意中发现一个 Excel VBA 对待参数的一个"不正常"现象。这种处理方式可能无意中导致程序结果错误,而且你很难发现你的错误所在:
编程 » Excel, VBA
Excel VBA 出错时给出的错误信息极少,需要充分利用各种工具来进行调试。
编程 » Excel, VBA
最近学到一招,效果不错~
时间管理中有重要的一条, 保持你的收件箱整洁、干净 。Gmail 一个重要的创新就是 Archive (存档),选中邮件后点下「archive」按钮或者按一下快捷键 y ,邮件就被移出收件箱,但又跟删除邮件不一样,这些邮件还可以继续被搜索。这里讲最近写的如何在 Outlook 里实现这个功能。
编程 » Excel, VBA
效果图: