我想用宏搜索现有的Excel文件,但我不希望在代码打开这些文件时显示这些文件.有没有办法让它们在"背景"中打开,可以这么说?
不确定是否可以在当前的excel实例中无形地打开它们
您可以打开一个新的excel实例,隐藏它然后打开工作簿
Dim app as New Excel.Application app.Visible = False 'Visible is False by default, so this isn't necessary Dim book As Excel.Workbook Set book = app.Workbooks.Add(fileName) ' ' Do what you have to do ' book.Close SaveChanges:=False app.Quit Set app = Nothing
正如其他人发布的那样,请确保在完成任何已打开的工作簿后进行清理
如果这符合您的需求,我会简单地使用
Application.ScreenUpdating = False
还有加速代码的好处,而不是通过使用第二个Excel实例来降低代码速度.
要打开隐藏在现有Excel实例中的工作簿,请使用以下命令:
Application.ScreenUpdating = False Workbooks.Open Filename:=FilePath, UpdateLinks:=True, ReadOnly:=True ActiveWindow.Visible = False ThisWorkbook.Activate Application.ScreenUpdating = True
即使您已得到答案,对于那些发现此问题的人,也可以将Excel电子表格作为JET数据存储打开.借用我用过它的项目的连接字符串,看起来有点像这样:
strExcelConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & objFile.Path & ";Extended Properties=""Excel 8.0;HDR=Yes""" strSQL = "SELECT * FROM [RegistrationList$] ORDER BY DateToRegister DESC"
请注意,"RegistrationList"是工作簿中选项卡的名称.网上有一些教程,其中包含您可以和不可以通过这种方式访问工作表的详细信息.
只是想我会添加.:)
一种更简单的方法,不涉及操纵活动窗口:
Dim wb As Workbook Set wb = Workbooks.Open("workbook.xlsx") wb.Windows(1).Visible = False
从我可以告诉我的工作簿上的Windows索引应该始终如一1
.如果有人知道任何会导致这种不真实的竞争条件,请告诉我.