VB 中后台打开 Excel 文件

作者: , 共 904 字 , 共阅读 0

某些时候需要打开 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.

类似文章:
编程 » Excel, VBA
VBA 的 Date 类型比较奇怪。
编程 » VBA, Excel
如果不提供错误处理方法,VBA在出错时会停留在出错之处。Excel/VBA 提供On Error关键词来处理程序运行过程中的错误,具体有下面两种用法:
编程 » Excel, VBA
无意中发现一个 Excel VBA 对待参数的一个"不正常"现象。这种处理方式可能无意中导致程序结果错误,而且你很难发现你的错误所在:
编程 » Excel, lotus, VBA
公司使用 Lotus ,我每天都通过 Excel 编写 VBA 代码自动调用 Lotus 发送邮件,发现一个奇怪的现象。一般我们通过下面的 VBA 代码指定邮件收件人:
编程 » Excel
在编辑 Excel 文件时经常遇到的一个问题是,我这边用得好好地,换台机器就变了个样,或者根本用不了。下面是我在日常工作中总结的一些避免这些情况的小技巧。
更新一下之前写的Excel 的数据库类,将其改成函数的形式,调用更简单(省却了生成类实例的步骤)。现在这个代码在工作中用了一年多,已经比较健壮。若有问题,请留言指出或与我联系。
编程 » Excel, VBA
最近学到一招,效果不错~
编程 » Excel, VBA
效果图:
2014-03-25 更新:我已经将该类修改成函数形式,并增加新功能,参见更新 Excel 的数据库查询函数库
编程 » dll, Matlab, VB
这里放两个在实际工作中遇到的问题,还没找到解决的方法,向广大网友求助。
时间管理中有重要的一条,保持你的收件箱整洁、干净。Gmail 一个重要的创新就是 Archive (存档),选中邮件后点下「archive」按钮或者按一下快捷键 y ,邮件就被移出收件箱,但又跟删除邮件不一样,这些邮件还可以继续被搜索。这里讲最近写的如何在 Outlook 里实现这个功能。
编程 » Excel, VBA
效果图: