前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA: 打开Excel文件的两种方式(GetObject函数和Workbooks.Open方法)

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

作者头像
Exploring
发布2024-01-22 15:26:59
8.1K0
发布2024-01-22 15:26:59
举报
文章被收录于专栏:数据处理与编程实践

文章背景: 打开指定路径的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)

代码示例:

代码语言:javascript
复制
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 ])

代码示例:

代码语言:javascript
复制
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

代码示例:

代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据处理与编程实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 Workbooks.Open
  • 2 GetObject
  • 3 两种打开方式的区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档