找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 19953|回复: 22

[求助] 打开EXCEL后,调用VB编写的菜单栏

 火... [复制链接]

3

主题

11

回帖

0

精华

铜牌会员

积分
49
发表于 2012-6-5 18:31:51 | 显示全部楼层 |阅读模式
大家好:
     本人弄了个代码,但是在EXCEL被打开时,菜单代码不被调用,请帮助解决一下,先表示感谢! 菜单学习.zip (10.39 KB, 下载次数: 10846)

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2012-6-7 18:34:41 | 显示全部楼层
你是想写EXCEL的ADDIN?
我就是嗷嗷叫的老马了......

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-9 04:46:19 | 显示全部楼层
本帖最后由 diddom 于 2012-6-9 05:01 编辑

你在

Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
  Set xlApp = Application
  
  CreateMenus  '创建2003菜单 <---你这里是呼叫 CreateMenus

End Sub

但你创建菜单函数名称是写  创建自定义工具栏()

Private Sub 创建自定义工具栏() <--应该改成 CreateMenus
....
...



假如你有宣告严格定义变数 Option Explicit ,

那麽 Form 可能找不到 xlApp这变数

Public xlApp As Excel.Application, 可能必须放在一个新的 Module 里面  



另外你建立了CreateToolBarButtons定义工具栏, 不用时可能也必须 RemoveToolbarButtons

你可以参考下面这篇文章说明, 可能有你要的答案

http://www.thecodenet.com/articles.php?id=38




3

主题

11

回帖

0

精华

铜牌会员

积分
49
 楼主| 发表于 2012-6-9 05:34:58 | 显示全部楼层
diddom老师你好:
我按照你的指点已经修改了代码,但是仍不可调用,请指正(本人水平有限),先谢谢

菜单学习2.zip

21.11 KB, 下载次数: 9688

3

主题

11

回帖

0

精华

铜牌会员

积分
49
 楼主| 发表于 2012-6-9 05:46:34 | 显示全部楼层
马大哈 发表于 2012-6-7 18:34
你是想写EXCEL的ADDIN?

是的,马老师,请给予帮助

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-9 06:37:55 | 显示全部楼层
本帖最后由 diddom 于 2012-6-9 06:53 编辑

你在 Designer Form 下面有设定吗?

例如

AddinSetting.PNG

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-9 07:31:05 | 显示全部楼层
本帖最后由 diddom 于 2012-6-9 11:04 编辑

你的 code 是 OK 的呀{:soso_e113:}

你看我执行你写的 code 之後, execl running 的图片

AddinPic.PNG

Addin Src 如下
ExcelAddIn.rar (40.48 KB, 下载次数: 9663)

Excel Run 如下
Execl Run.rar (7.04 KB, 下载次数: 9621)

http://www.thecodenet.com/articles.php?id=38

依照这篇文章的讲述

When the new project opens you will have a Form called frmAddin and
a Designer object called Connect. Remove the form from the project as it is a sample form and we don’t need it.

新建立的 Addin Project , 里面的 Form 是不需要的, 可以直接移除
(不是 Designer Form, 是在放置控件的 Form)

To do this goto Project/References, uncheck the VB Extensibility Library
and then find the reference to the Microsoft Excel Object Model. Check the box next to it and click OK.

不需要参考 VB Extensibility Library , 但需要参考 Microsoft Excel Object Library


还有

Installing the Addin in Excel

As we set the initial load behaviour to 'Startup' in the designer the Addin should load automatically on reloading Excel. If startup isn’t selected then you may need to load it manually. To do this you need to select the 'Com Addins' menu option in Excel.

上面这段英文讲述的就是6楼贴的那张图



275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2012-6-9 11:27:36 | 显示全部楼层
汗一个.

我知道为什么jsxygshh的代码不工作了.

工程类型错了,ADDIN必须是DLL,EXCEL里面要加载这个DLL才行.

你的工程是EXE类型的.
我就是嗷嗷叫的老马了......

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2012-6-9 11:35:25 | 显示全部楼层
diddom 发表于 2012-6-9 07:31
你的 code 是 OK 的呀

你看我执行你写的 code 之後, execl running 的图片

这两个附件好象损坏了?没上传完成吗?
我就是嗷嗷叫的老马了......

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-9 13:51:33 | 显示全部楼层
马大哈 发表于 2012-6-9 11:35
这两个附件好象损坏了?没上传完成吗?


没坏呀~我这边下载OK呀{:soso_e132:}

3

主题

11

回帖

0

精华

铜牌会员

积分
49
 楼主| 发表于 2012-6-9 17:18:38 | 显示全部楼层
谢谢马大哈和diddom两位老师的支持,我的意思是:如何让菜单的代码只在VB打开BOOK1时调用,而在别的工作簿中不调用.

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-9 17:24:31 | 显示全部楼层
本帖最后由 diddom 于 2012-6-10 00:13 编辑

嗯~很好的点子

你想 protect a workbook 是这样吗{:soso_e113:}

希望你的問題是如此單純







3

主题

11

回帖

0

精华

铜牌会员

积分
49
 楼主| 发表于 2012-6-9 18:56:28 | 显示全部楼层
diddom 发表于 2012-6-9 17:24
嗯~很好的点子

你想 protect a workbook 是这样吗

是的,protect a workbook
我以后写东西要注意了,谢谢指正

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2012-6-9 22:05:24 | 显示全部楼层
diddom 发表于 2012-6-9 13:51
没坏呀~我这边下载OK呀

汗,是我这边浏览器的问题,嘿嘿,换了Opera就对了.....之前用的傲游....不过不明白它用IE内核为啥会有问题...
我就是嗷嗷叫的老马了......

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2012-6-9 22:08:43 | 显示全部楼层
jsxygshh 发表于 2012-6-9 18:56
是的,protect a workbook
我以后写东西要注意了,谢谢指正

如果是这样的话,那就是说想动态加载ADDIN,由自己的主程序来决定哪些XLS需要加载对吧.

不过我想,既然是保护,干嘛不直接整个文件加密?

因为自己有一个代理EXE存在,那完全可以HOOK EXCEL的ReadFile/WriteFile,让直接双击打开XLS无效,因为加密了.

只有通过自己的那个EXE打开的XLS,才由自己的程序在内存中解密.....

然后自己的EXE再加个变态壳,哇哈哈哈哈.....
我就是嗷嗷叫的老马了......

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-10 03:57:30 | 显示全部楼层
本帖最后由 diddom 于 2012-6-10 04:55 编辑

修改一下 code 当备份一下

Execl Run.rar (31.75 KB, 下载次数: 8464)

Excel AddIn.rar (33.29 KB, 下载次数: 8590)

Addin 目前只能用判断父进程是不是 svchost.exe,

父进程假如是 svchost.exe, 那麽 Excel 就是由 VB 启动的

至於打开的档案是不是 Book1,还必须找相关资料

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-10 07:34:23 | 显示全部楼层
本帖最后由 diddom 于 2012-6-10 12:48 编辑

沒辦法在 Dll 載入前抓到 WorkBook 的 FullName

Excel AddIn.rar (36.21 KB, 下载次数: 8359)


剛剛改的,還是不行

Excel AddIn 2.rar (34.51 KB, 下载次数: 8296)

看來要用 Addin 達成你的目的可能沒辦法

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-10 13:08:14 | 显示全部楼层

好了~成功了

如你的要求,只有VB打開 Book1 才調用

Excel AddIn 3.rar (34.06 KB, 下载次数: 15)

3

主题

11

回帖

0

精华

铜牌会员

积分
49
 楼主| 发表于 2012-6-10 18:43:00 | 显示全部楼层
谢谢diddom老师的帮助,我试一下

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-11 12:32:35 | 显示全部楼层
本帖最后由 diddom 于 2012-6-11 17:00 编辑

我看要彻底解决你的问题可能要用 VSTO

你有 VS2008 或 VS2010吗?

另外你的 office 是 2003 还是 2007

ExcelWorkbook1.rar (223.7 KB, 下载次数: 8399)

上面的附件, 你执行 ExcelWorkbook1\ExcelWorkbook1\bin\Debug 底下的

ExcelWorkbook1.xlsx

Book1.xlsx

你看有何不同

ExcelWorkbook1.xlsx 他指定了要装载的 Addin

而 Book1.xlsx 并没有





96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-12 09:32:57 | 显示全部楼层
本帖最后由 diddom 于 2012-6-12 17:32 编辑
jsxygshh 发表于 2012-6-12 05:11
是的,是否可以修改要调用的工作簿的扩展名(比如:".didd"),根据扩展名来确定是否调用呢? ...



你是想写 VBA 吗?

还是 Addin?

你要求的功能目的真特殊





96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-6-11 20:10:17 | 显示全部楼层
我等着你上来一起讨论{:soso_e113:}

把你的意思 :如何让菜单的代码只在VB打开BOOK1时调用,而在别的工作簿中不调用.

把它完成

3

主题

11

回帖

0

精华

铜牌会员

积分
49
 楼主| 发表于 2012-6-12 05:11:55 | 显示全部楼层
diddom 发表于 2012-6-11 20:10
我等着你上来一起讨论

把你的意思 :如何让菜单的代码只在VB打开BOOK1时调用,而在别的工作簿 ...

是的,是否可以修改要调用的工作簿的扩展名(比如:".didd"),根据扩展名来确定是否调用呢?
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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