Excel精英培训网

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

[已解决]请高手看这个怎么封装

[复制链接]
发表于 2012-7-9 12:13 | 显示全部楼层 |阅读模式
我最近在学习封装,在封装中遇到些问题,搜索了一些资料后也无法解决。
比如我要封装这么一段:
sub t()
dim str as string
str=thisworkbook.path
msgbox str
按照论坛提供的方法修改为:
sub t()
dim str as string
str=xlapp.thisworkbook.path
msgbox str
这样的加载后得到的提示是方法作用于对象失败。
但是我要是把这个路径改成str=xlapp.StartupPath却能加载成功,说明其他的部分是写正确了的。
请达人指定thisworkbook.path怎么封装。

其他的代码,如下:
Public xlApp As Excel.Application '声明变量xlapp,它代表Excel就用程序
Dim ButtonEvent As cbEvents, OnlyEvents As Collection
Public Sub CreateToolbarButtons() '创建菜单
    Dim btNew As Office.CommandBarButton     ', SubMenu As Office.CommandBarControl
    Set btNew = xlApp.CommandBars(1).Controls.Add(msoControlButton, , , , True)
    With btNew
        .Style = msoButtonIconAndCaption
        .FaceId = 483
        .Caption = "测试封装"
    End With
    Set ButtonEvent = New cbEvents
    Set ButtonEvent.cbBtn = btNew
End Sub
Public WithEvents cbBtn As CommandBarButton
Private Sub cbBtn_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean) '单击按钮时执行
  Call test2
  CancelDefault = True
End Sub

test.rar (4.26 KB, 下载次数: 34)
发表于 2012-7-9 12:19 | 显示全部楼层
确实要高手才能解决,我的兰版VBA80集才看到第5集,解决不了你的问题,这也再次证实了我确实是个低手{:712:}
回复

使用道具 举报

发表于 2012-7-9 15:00 | 显示全部楼层    本楼为最佳答案   
Thisworkbook是在工作簿中才有的,如果你封装成DLL,就不存在所谓的Thisworkbook,因为你加载DLL后,完全可以一个工作簿也不打开。
而Excel文档型的代码就不一样,一定要文档开开后才有可以运行代码的,也许你可以用
str=app.path代替
回复

使用道具 举报

发表于 2012-7-9 15:27 | 显示全部楼层
  1. xlapp.ActiveWorkbook.Path
复制代码
回复

使用道具 举报

发表于 2012-7-9 21:51 | 显示全部楼层
看吕布的答案就对了。。
回复

使用道具 举报

 楼主| 发表于 2012-7-10 10:47 | 显示全部楼层
本帖最后由 2004098 于 2012-7-16 17:53 编辑
吕?布 发表于 2012-7-9 15:00
Thisworkbook是在工作簿中才有的,如果你封装成DLL,就不存在所谓的Thisworkbook,因为你加载DLL后,完全可以 ...


谢谢谢谢,不过app.path是DLL文件的目录所在。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-6 17:39 , Processed in 0.260720 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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