Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6494|回复: 10

[已解决]Workbook_Open事件中为何不能隐藏被引用的工作簿

[复制链接]
发表于 2013-5-13 17:33 | 显示全部楼层 |阅读模式
本帖最后由 pubuflash2 于 2013-5-13 18:21 编辑

Sub TRY()
Rem 目的:在Workbook_Open事件中,自动添加VBProject引用,然后Windows(表名).Visible =false 关闭被引用的工作簿
Rem 问题:本段宏语句在模块中运行正常,能实现上述目的,但将此段程序复制到本工作簿的Workbook_Open事件中,则不能关闭被引用的工作簿
Rem 另外,本人已通过Workbook_BeforeClose,取消本工作簿的VBProject引用,然后关闭被引用的工作簿,已成功
Rem 本工作簿工程名称已更改为VBProject2,以避免引用时冲突,被引用工作簿路径和名称以及工作簿名已保存在指定单元格中,便于程序调用。
On Error Resume Next
Application.ScreenUpdating = False
Call vb信任设置
        Rem 被引用工作簿路径和名称 = worksheets(1).Range("A1")      ‘待各位调试时使用
        Rem 被引用工作簿名称= worksheets(1).Range("A2")                   ’待高手们调试时修改
    If 被引用工作簿路径和名称 <> "" Then
       ThisWorkbook.VBProject.References.AddFromFile 被引用工作簿路径和名称
        Windows(被引用工作簿名称).Visible = False       ‘问题句子:模块中能运行且隐藏了,open中运行了,但不能隐藏   
End If
Application.ScreenUpdating = True
End Sub
Sub vb信任设置()
'**********************************
  '信任对于VB项目的访问,此段是照抄本论坛的
  On Error Resume Next
    Dim Chgset As Boolean
      Debug.Print ThisWorkbook.VBProject.Protection
        If Err.Number = 1004 Then
            Err.Clear
            Application.SendKeys "%TMS%T%V{ENTER}"
            Chgset = True
            DoEvents
       End If
       If Chgset Then Application.SendKeys "%TMS%T%V{ENTER}"
End Sub
发表于 2013-5-13 18:51 | 显示全部楼层
本帖最后由 hwc2ycy 于 2013-5-13 18:53 编辑

添加了引用,还得打开对VBA工程模型访问的信任才成。

你调试过没,在哪一步出错的。

回复

使用道具 举报

 楼主| 发表于 2013-5-13 19:49 | 显示全部楼层
本帖最后由 pubuflash2 于 2013-5-13 20:18 编辑
hwc2ycy 发表于 2013-5-13 18:51
添加了引用,还得打开对VBA工程模型访问的信任才成。

你调试过没,在哪一步出错的。


不是哪一步出了问题,我的意思是程序在模块中调试没有一步错误,能达到目的,但一旦将程序代码放在workbook_open中,让工作簿打开时,建立工程引用(引用之前,已通过call调用了网上下载的工程信用设置程序,没问题),并随后将被引用的表隐藏,但达不到目的。是不是问题出在这里,虽然在workbook_open中,隐藏被引用的工作簿的语句运行了,但之后系统又进行了一次工程引用的调用。
    就象本论坛关于关闭链接更新提示类似的问题:即在有链接的情况下,在工作簿打开事件中(workbook_open)中虽然添加了Application.AskToUpdateLinks = False 语句,但还是不能关闭打开时更新的提示,因在 workbook_open之前,系统就运行了更新提示对话框。这么说来,关于系统选项设置(除人工勾选设置外),有的虽然在模块中能够正常运行的程序,将其放至workbook_open或关闭事件中虽然运行了,但不能达到想实现的效果,因系统还要另外运行。有待高手验证。
回复

使用道具 举报

发表于 2013-5-13 19:56 | 显示全部楼层
你要隐藏什么,你把要隐藏的内容放在A1和A2。

另外,你要隐藏的工作簿,起码得打开才不会报错吧。

你上传你测试的附件吧。

回复

使用道具 举报

 楼主| 发表于 2013-5-14 01:34 | 显示全部楼层
hwc2ycy 发表于 2013-5-13 19:56
你要隐藏什么,你把要隐藏的内容放在A1和A2。

另外,你要隐藏的工作簿,起码得打开才不会报错吧。

谢谢指点,Workbook_Open中关于被引用工作簿隐藏的语句仍不起作用,但在模块中起作用。
回复

使用道具 举报

 楼主| 发表于 2013-5-14 01:39 | 显示全部楼层
pubuflash2 发表于 2013-5-14 01:34
谢谢指点,Workbook_Open中关于被引用工作簿隐藏的语句仍不起作用,但在模块中起作用。

第一次附件大了没传成功

工程引用VBAProject.zip

24.71 KB, 下载次数: 12

回复

使用道具 举报

 楼主| 发表于 2013-5-14 01:44 | 显示全部楼层
pubuflash2 发表于 2013-5-14 01:34
谢谢指点,Workbook_Open中关于被引用工作簿隐藏的语句仍不起作用,但在模块中起作用。

谢谢指点,Workbook_Open中关于被引用工作簿隐藏的语句仍不起作用,但在模块中起作用
回复

使用道具 举报

发表于 2013-5-14 07:09 | 显示全部楼层    本楼为最佳答案   
QQ截图20130514070925.jpg
回复

使用道具 举报

发表于 2013-5-14 07:11 | 显示全部楼层
为什么没有隐藏楼主应该知道了吧。
代码单步也只能到addfromfile那一行,所以我加了DEBUG输出信息到立即窗口。
回复

使用道具 举报

发表于 2013-5-14 07:28 | 显示全部楼层
  1. Application.Windows(被引用工作簿名称).Visible = False
复制代码
改成这样就可以了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 10:25 , Processed in 0.321813 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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