ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: jygzcj

[已解决] getobject和workbooks.open哪个更好!

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2016-1-8 20:25 | 显示全部楼层

这个帖子关于 GETOBJECT 和open归纳得很好啊,支持。

TA的精华主题

TA的得分主题

发表于 2016-7-12 16:34 | 显示全部楼层
收藏一下。

TA的精华主题

TA的得分主题

发表于 2016-12-26 12:58 | 显示全部楼层
hustnzj 发表于 2012-3-24 06:48
个人感觉Getobject函数没有Workbooks.Open好用:
1) 通过getobject打开的Excel文件只要被修改(写)并保 ...

以下是我测试的两个过程,都是在excel中打开ppt,看一看:
Sub 打开()
'Dim ptapp As New PowerPoint.Application
Dim ptapp As Object
Set ptapp = CreateObject("powerpoint.application")
pth = ThisWorkbook.Path & "\71政治(2016秋).pptm"
Set nppt = GetObject(pth)
nppt.Windows(pth).Visible = True
nppt.Close
Set nppt = Nothing
End Sub

Sub 打开2()
Dim ptapp As Object
Set ptapp = CreateObject("powerpoint.application")
pth = ThisWorkbook.Path & "\71政治(2016秋).pptm"
Set nppt = ptapp.Presentations.Open(pth)
nppt.Windows(pth).Visible = False
nppt.Close
ptapp.Quit
Set nppt = Nothing
End Sub
前一过程错在:nppt.Windows(pth).Visible = True
后一过程错在:nppt.Windows(pth).Visible = false
到底为什么错?能解释一下吗?怎样改正?

TA的精华主题

TA的得分主题

发表于 2016-12-26 13:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhw79 发表于 2012-3-20 21:09
调试了下,感觉getobject最大的好处是能隐藏方式打开工作簿,用OPEN再隐藏的话会闪1下,不知道还有其他方面 ...

请看一看最后一楼,我将你的两个过程贬了一下,出了问题。请指点一下。

TA的精华主题

TA的得分主题

发表于 2017-12-21 18:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhw79 发表于 2012-3-20 21:09
调试了下,感觉getobject最大的好处是能隐藏方式打开工作簿,用OPEN再隐藏的话会闪1下,不知道还有其他方面 ...

getobject一样会打开文件,当文件较大或者是网络上的excel文件时,是看得到打开的。

TA的精华主题

TA的得分主题

发表于 2018-1-12 10:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 zorsite 于 2018-1-12 10:36 编辑


通过getobject打开的Excel文件只要被修改(写)并保存后,就只能在VBE中看到,但用户界面却看不到。就算你重启Excel,再去手动打开此文件,也是什么都看不到。不保存就没有这个问题!如果要解决这个问题,必须在wb.close 前加一句Application.Windows(wb.name).Visible = True。

  1. Private Sub CommandButton1_Click()  
  2.     On Error Resume Next  
  3.     文件目录 = ThisWorkbook.Path & "\Excel"  
  4.     Set fso = CreateObject("Scripting.FileSystemObject")  
  5.     Set fldr = fso.GetFolder(文件目录)  
  6.     For Each s In fldr.Files  
  7.         With GetObject(文件目录 & s.Name)  
  8.             .Sheets(1).Cells.Replace What:=" ", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False    '随便做一点改动  
  9.             .SaveAs ThisWorkbook.Path & "\Excel_修改后" & s.Name    '保存  
  10.             .Windows(1).Visible = True    '工作表可见  
  11.             .Close (True)    '保存改动  
  12.         End With  
  13.     Next  
  14. End Sub  
复制代码



评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-1-9 11:10 | 显示全部楼层
熊仁科 发表于 2015-9-11 11:46
那么问题来了:我现在有一个汇总工作簿里面内容的代码也是用getobjct的,但是我需要汇总的工作簿是从网页 ...

信任中心,受保护的视图,3个全部取消勾选,OK。
另外,不要用 ‘那么问题来了’ 这种 ‘杠精专属口头禅’,换成 ‘我遇到一个问题需要求助’ 更好哈

TA的精华主题

TA的得分主题

发表于 2019-4-30 13:46 | 显示全部楼层
hustnzj 发表于 2012-3-24 06:48
个人感觉Getobject函数没有Workbooks.Open好用:
1) 通过getobject打开的Excel文件只要被修改(写)并保 ...

解决了我的困惑,收藏!感谢感谢!

TA的精华主题

TA的得分主题

发表于 2019-5-6 05:49 | 显示全部楼层
用getobject,操作页面无跳转,用open则操作页面跳转。

TA的精华主题

TA的得分主题

发表于 2019-7-23 10:11 | 显示全部楼层
workooks.open(pathfile)和getobject(pathfile)实现的效果应该是一样的,都会返回workbook对象,都起到打开表格文件的作用,默认处理完后都会自动关闭,并且不会保存。因此在处理修改完数据后应调用save方法保存一下。好像getobject速度更快一点点。
另外表格文件的显式或者隐式打开是windows(wb.name).visible属性设置的。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-19 07:31 , Processed in 0.036804 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表