Pat*_*ald 74
不确定是否可以在当前的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
Run Code Online (Sandbox Code Playgroud)
正如其他人发布的那样,请确保在完成任何已打开的工作簿后进行清理
Pat*_*rez 30
如果这符合您的需求,我会简单地使用
Application.ScreenUpdating = False
Run Code Online (Sandbox Code Playgroud)
还有加速代码的好处,而不是通过使用第二个Excel实例来降低代码速度.
Mun*_*hid 20
使用 ADO(AnonJr已经解释过)并利用SQL可能是从封闭的工作簿中获取数据而无需以传统方式打开该工作簿的最佳选择。请观看此视频。
否则,可能GetObject(<filename with path>)是最简洁的方式。工作表保持不可见,但会出现在 VBE 的项目资源管理器窗口中,就像以传统方式打开的任何其他工作簿一样。
Dim wb As Workbook
Set wb = GetObject("C:\MyData.xlsx") 'Worksheets will remain invisible, no new window appears in the screen
' your codes here
wb.Close SaveChanges:=False
Run Code Online (Sandbox Code Playgroud)
如果您想读取特定工作表,甚至不需要定义工作簿变量
Dim sh As Worksheet
Set sh = GetObject("C:\MyData.xlsx").Worksheets("MySheet")
' your codes here
sh.Parent.Close SaveChanges:=False 'Closes the associated workbook
Run Code Online (Sandbox Code Playgroud)
Ash*_*hok 19
要打开隐藏在现有Excel实例中的工作簿,请使用以下命令:
Application.ScreenUpdating = False
Workbooks.Open Filename:=FilePath, UpdateLinks:=True, ReadOnly:=True
ActiveWindow.Visible = False
ThisWorkbook.Activate
Application.ScreenUpdating = True
Run Code Online (Sandbox Code Playgroud)
Ano*_*nJr 11
即使您已得到答案,对于那些发现此问题的人,也可以将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"
Run Code Online (Sandbox Code Playgroud)
请注意,"RegistrationList"是工作簿中选项卡的名称.网上有一些教程,其中包含您可以和不可以通过这种方式访问工作表的详细信息.
只是想我会添加.:)
一种更简单的方法,不涉及操纵活动窗口:
Dim wb As Workbook
Set wb = Workbooks.Open("workbook.xlsx")
wb.Windows(1).Visible = False
Run Code Online (Sandbox Code Playgroud)
从我可以告诉我的工作簿上的Windows索引应该始终如一1.如果有人知道任何会导致这种不真实的竞争条件,请告诉我.
iDevlop 和 Ashok 的答案的问题在于,根本问题是 Excel 设计缺陷(显然),其中 Open 方法无法遵循 False 的 Application.ScreenUpdating 设置。因此,将其设置为 False 对于此问题没有任何好处。
如果 Patrick McDonald 的解决方案由于启动第二个 Excel 实例的开销而过于繁重,那么我发现的最佳解决方案是通过尽快重新激活原始窗口来最小化打开的工作簿可见的时间:
Dim TempWkBk As Workbook
Dim CurrentWin As Window
Set CurrentWin = ActiveWindow
Set TempWkBk = Workbooks.Open(SomeFilePath)
CurrentWin.Activate 'Allows only a VERY brief flash of the opened workbook
TempWkBk.Windows(1).Visible = False 'Only necessary if you also need to prevent
'the user from manually accessing the opened
'workbook before it is closed.
'Operate on the new workbook, which is not visible to the user, then close it...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
281224 次 |
| 最近记录: |