打开EXCEL后,调用VB编写的菜单栏
大家好:本人弄了个代码,但是在EXCEL被打开时,菜单代码不被调用,请帮助解决一下,先表示感谢! 你是想写EXCEL的ADDIN? 本帖最后由 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
diddom老师你好:
我按照你的指点已经修改了代码,但是仍不可调用,请指正(本人水平有限),先谢谢 马大哈 发表于 2012-6-7 18:34 static/image/common/back.gif
你是想写EXCEL的ADDIN?
是的,马老师,请给予帮助 本帖最后由 diddom 于 2012-6-9 06:53 编辑
你在 Designer Form 下面有设定吗?
例如
本帖最后由 diddom 于 2012-6-9 11:04 编辑
你的 code 是 OK 的呀{:soso_e113:}
你看我执行你写的 code 之後, execl running 的图片
Addin Src 如下
Excel Run 如下
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楼贴的那张图
汗一个.
我知道为什么jsxygshh的代码不工作了.
工程类型错了,ADDIN必须是DLL,EXCEL里面要加载这个DLL才行.
你的工程是EXE类型的. diddom 发表于 2012-6-9 07:31 static/image/common/back.gif
你的 code 是 OK 的呀
你看我执行你写的 code 之後, execl running 的图片
这两个附件好象损坏了?没上传完成吗? 马大哈 发表于 2012-6-9 11:35 static/image/common/back.gif
这两个附件好象损坏了?没上传完成吗?
没坏呀~我这边下载OK呀{:soso_e132:} 谢谢马大哈和diddom两位老师的支持,我的意思是:如何让菜单的代码只在VB打开BOOK1时调用,而在别的工作簿中不调用. 本帖最后由 diddom 于 2012-6-10 00:13 编辑
嗯~很好的点子
你想 protect a workbook 是这样吗{:soso_e113:}
希望你的問題是如此單純
diddom 发表于 2012-6-9 17:24 static/image/common/back.gif
嗯~很好的点子
你想 protect a workbook 是这样吗
是的,protect a workbook
我以后写东西要注意了,谢谢指正 diddom 发表于 2012-6-9 13:51 static/image/common/back.gif
没坏呀~我这边下载OK呀
汗,是我这边浏览器的问题,嘿嘿,换了Opera就对了.....之前用的傲游....不过不明白它用IE内核为啥会有问题... jsxygshh 发表于 2012-6-9 18:56 static/image/common/back.gif
是的,protect a workbook
我以后写东西要注意了,谢谢指正
如果是这样的话,那就是说想动态加载ADDIN,由自己的主程序来决定哪些XLS需要加载对吧.
不过我想,既然是保护,干嘛不直接整个文件加密?
因为自己有一个代理EXE存在,那完全可以HOOK EXCEL的ReadFile/WriteFile,让直接双击打开XLS无效,因为加密了.
只有通过自己的那个EXE打开的XLS,才由自己的程序在内存中解密.....
然后自己的EXE再加个变态壳,哇哈哈哈哈..... 本帖最后由 diddom 于 2012-6-10 04:55 编辑
修改一下 code 当备份一下
Addin 目前只能用判断父进程是不是 svchost.exe,
父进程假如是 svchost.exe, 那麽 Excel 就是由 VB 启动的
至於打开的档案是不是 Book1,还必须找相关资料
本帖最后由 diddom 于 2012-6-10 12:48 编辑
沒辦法在 Dll 載入前抓到 WorkBook 的 FullName
剛剛改的,還是不行
看來要用 Addin 達成你的目的可能沒辦法
好了~成功了
如你的要求,只有VB打開 Book1 才調用
谢谢diddom老师的帮助,我试一下 本帖最后由 diddom 于 2012-6-11 17:00 编辑
我看要彻底解决你的问题可能要用 VSTO
你有 VS2008 或 VS2010吗?
另外你的 office 是 2003 还是 2007
上面的附件, 你执行 ExcelWorkbook1\ExcelWorkbook1\bin\Debug 底下的
ExcelWorkbook1.xlsx
Book1.xlsx
你看有何不同
ExcelWorkbook1.xlsx 他指定了要装载的 Addin
而 Book1.xlsx 并没有
本帖最后由 diddom 于 2012-6-12 17:32 编辑
jsxygshh 发表于 2012-6-12 05:11 static/image/common/back.gif
是的,是否可以修改要调用的工作簿的扩展名(比如:".didd"),根据扩展名来确定是否调用呢? ...
你是想写 VBA 吗?
还是 Addin?
你要求的功能目的真特殊
我等着你上来一起讨论{:soso_e113:}
把你的意思 :如何让菜单的代码只在VB打开BOOK1时调用,而在别的工作簿中不调用.
把它完成 diddom 发表于 2012-6-11 20:10 static/image/common/back.gif
我等着你上来一起讨论
把你的意思 :如何让菜单的代码只在VB打开BOOK1时调用,而在别的工作簿 ...
是的,是否可以修改要调用的工作簿的扩展名(比如:".didd"),根据扩展名来确定是否调用呢?
页:
[1]