VBA: 打开Excel文件的两种方式(GetObject函数和Workbooks.Open方法)

您所在的位置:网站首页 ie打不开excel文件 VBA: 打开Excel文件的两种方式(GetObject函数和Workbooks.Open方法)

VBA: 打开Excel文件的两种方式(GetObject函数和Workbooks.Open方法)

2024-04-14 20:27| 来源: 网络整理| 查看: 265

文章背景: 打开指定路径的Excel文件,在VBA中常用的是Workbooks.Open方法,最近发现有个GetObject函数,也有类似的功能,所以本文探讨下两种打开方式的区别。

1 Workbooks.Open2 GetObject 3 两种打开方式的区别

1 Workbooks.Open

打开一个工作簿。

expression.Open (FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)

编辑结束后,如果要关闭工作簿,可以使用Workbook.Close。

expression.Close (SaveChanges, FileName, RouteWorkbook)

代码示例:

Option Explicit Option Base 1 Sub test() '打开工作簿 Dim wb As Workbook, pathname As String pathname = "D:\OneDrive\文档\test.xlsm" Set wb = Workbooks.Open(pathname) wb.Sheets(1).Range("A1") = "Hello world!" wb.Close SaveChanges:=True MsgBox "Done!" End Sub

打开一份Excel文件,编辑结束后,保存内容并关闭。

2 GetObject

返回对 ActiveX 组件提供的对象的引用。

GetObject ([ pathname ], [ class ])

代码示例:

Sub test2() '使用GetObject函数打开工作簿 Dim wb As Workbook, pathname As String, content As String pathname = "D:\OneDrive\文档\test.xlsm" On Error Resume Next Set wb = GetObject(pathname) On Error GoTo 0 If wb Is Nothing Then MsgBox "File not found or error occurred." Exit Sub End If ' 获取内容 content = wb.Sheets(1).Range("A1").Value2 MsgBox content wb.Close SaveChanges:=False MsgBox "Done!" End Sub

使用GetObject函数,获取对指定Excel文件的引用。如果Excel文件尚未打开,那么程序会在后台打开该工作簿。

注意:通过GetObject函数引用某个工作簿时,如果该工作簿已经打开,但不处于活动(Active)状态,则程序可能会报错。

3 两种打开方式的区别

(1)使用GetObject函数的好处是,可以通过隐藏方式打开指定工作簿。如果目的是获取指定工作簿的数据,而不试图修改数据,那可以使用GetObject函数。

(2)在打开指定工作簿时,如果该工作簿已经提前打开,使用GetObject函数有可能会报错,因为该工作簿一般不处于活动状态;

使用Workbooks.Open方法通常不会导致错误。相反,它会返回对已经打开的工作簿的引用,而不会重新打开它。

(3)通过GetObject函数打开的Excel文件只要被修改(写)并保存后,后续打开该文件就只能在VBE中看到表格,但用户界面却看不到。使用Workbooks.Open方法不存在这个问题。

针对GetObject函数存在的问题,解决的方法有两个:

1)在打开该文件后,通过显示菜单中的取消隐藏功能让表格再显示出来。

2)在wb.Close SaveChanges:=True之前添加一句代码,Application.Windows(wb.name).Visible = True。

代码示例:

Sub test4() '使用GetObject函数打开工作簿,修改内容,文件不会被隐藏 Dim wb As Workbook, pathname As String, content As String pathname = "D:\OneDrive\文档\test.xlsm" Set wb = GetObject(pathname) wb.Sheets(1).Range("A2").Value2 = "No 2" Application.Windows(wb.Name).Visible = True wb.Close SaveChanges:=True MsgBox "Done!" End Sub

参考资料:

[1] getobject和workbooks.open哪个更好

[2] Workbooks.Open method

[3] Workbook.Close method



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3