ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA代码通用性性如何解决?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-3-30 17:30 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
新建一个工作簿,里面放了一个过程,这个过程很通用,如
SUB 报告()
MSGBOX "启动成功!"
END SUB
我想把它做成通用性的过程,即只要打开一个新的EXCEL,在VBA编辑器里,写入调用
CALL ***.报告
即可调报告过程,而不是每次都将报告过程复制到新的EXCEL中去,
这个怎么做呀?
即这段报告代码放哪里,又如何去调用..?

[ 本帖最后由 lqh123108 于 2011-3-30 17:31 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-3-30 17:49 | 显示全部楼层
另存为加载宏,或者封装为DLL。

TA的精华主题

TA的得分主题

发表于 2011-3-30 17:50 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-31 08:48 | 显示全部楼层
原帖由 Zamyi 于 2011-3-30 17:49 发表
另存为加载宏,或者封装为DLL。


如何去调用?
这样写错误的:CALL 报告,
---------------------------
Microsoft Visual Basic
---------------------------
编译错误:子过程或函数未定义
---------------------------
如何调用?

另外,楼上的兄弟→人人工作簿,怎么设置,最好详细点

TA的精华主题

TA的得分主题

发表于 2011-3-31 09:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
。。。。。。。。。。。。。。。
aa.gif

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-31 11:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 zez 于 2011-3-31 09:18 发表
。。。。。。。。。。。。。。。


看懂是怎么制作通用性的宏
但,这个宏被当前工作簿中的VBA调用,怎么写语句 ?
还有这个通用宏把它放在工具栏中,怎么做吗?
非常感谢!

TA的精华主题

TA的得分主题

发表于 2011-3-31 11:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
建议楼主学习一下利用VB开发COM加载宏的方法

转贴:

创建一个COM加载宏的步骤
1、打开VB6应用程序,在“新建工程”中选择“外接程序”,打开新工程。
2、在右侧工程资源管理器窗口中将会有一个名为frmAddin的窗体和一个名为Connect的设计器对象。移除frmAddin窗体,然后对Connect设计器对象进行设置。
双击设计器对象,出现一个设计器窗体,窗体中有如下字段及相应的文本框:
• 外接程序显示名称 – 填写加载宏的名字。
• 外接程序描述 – 描述你所创建的加载宏的作用和功能。
• 应用程序 – 使用你所创建的加载宏的应用程序。在这里,选择Microsoft Excel。
• 应用程序版本 – 使用你所创建的加载宏的应用程序版本。当在应用程序文本框中选择了Microsoft Excel后,该文本框自动出现Microsoft Excel 11.0。
• 初始化加载行为 – 当应用程序开启时,是否自动装载该加载宏,有四个选项。若设置这为Startup,那么当Excel开始时将装载该加载宏;若设置为Load on demand,则在Excel中需要时再装载该加载宏。
3、添加对Excel的引用。选择菜单“工程——引用”命令,在出现的“引用”对话框中选中Microsoft Excel 11.0 Object Liabrary前的复选框。
4、设置工程属性。选择菜单“工程——MyAddIn属性”命令,或在工程资源管理器窗口中击右键选择“MyAddIn属性”命令,在出现的工程属性对话框中设置工程名称和工程描述。
5、编辑Connect设计器代码。在Connect设计器对象上右击并选择“查看代码”或者点选Connect设计器后单击窗口顶部的“查看代码”按钮,将出现VB自动生成的代码。删除其中的代码,只保留OnConnection过程和OnDisconnection过程,用于在应用程序中装载和卸载加载宏,并在其中添加自已实现加载宏功能所需要的代码。在本示例中,Connect设计器中的最终代码如下:
'****************************************
Option Explicit
Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
   '设置应用程序变量
   Set xlApp = Application
   '设置自已的菜单的子程序
   CreateToolbarButtons
End Sub
Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
  '释放占用的内存
   Set xlApp = Nothing
  '移除自已的菜单的子程序
   RemoveToolbarButtons
End Sub
'****************************************
6、选择菜单“工程——添加模块”命令,添加一个标准的模块并添加相应的代码。在本示例中,该标准模块的代码如下:
'****************************************
'声明变量、类实例和集合
Public xlApp As Excel.Application
Dim ButtonEvent As cbEvents
Dim ButtonEvents As Collection
'定义自已菜单的子程序
Public Sub CreateToolbarButtons()
     '为了确保只添加按钮一次,先移除它们
    RemoveToolbarButtons
     '声明变量
    Dim cbBar As Office.CommandBar
    Dim btNew As Office.CommandBarButton
     '创建一个新的集合
    Set ButtonEvents = New Collection
    '查找excel中的工作表菜单栏(带有文件,编辑、视图等命令)
    Set cbBar = xlApp.CommandBars("Worksheet Menu Bar")
     '添加一个新按钮到工具菜单
    Set btNew = cbBar.FindControl(Id:=30007).Controls.Add(msoControlButton, , , , True)
    With btNew
        .
         '设置一个唯一的标签,使我们自定义控件在后面容易找到或删除
        .Tag = "COMAddinTest"
         '设置提示文本
        .ToolTipText = "Calls Sub1"
         '设置显示在菜单中的标题
        .Caption = "Sub1"
    End With
    '获取cbevents类中的一个新实例
    Set ButtonEvent = New cbEvents
     '将它指定给我们所创建的按钮
    Set ButtonEvent.cbBtn = btNew
    ButtonEvents.Add ButtonEvent
    '添加另一个按钮
    Set btNew = cbBar.FindControl(Id:=30007).Controls.Add(msoControlButton, , , , True)
    With btNew
        .
         '设置一个唯一的标签,使我们自定义控件在后面容易找到或删除
        .Tag = "COMAddinTest"
         '设置提示文本
        .ToolTipText = "Calls Sub2"
         '设置显示在菜单中的标题
        .Caption = "Sub2"
    End With
    '获取cbevents类中的一个新实例
    Set ButtonEvent = New cbEvents
     '将它指定给我们所创建的按钮
    Set ButtonEvent.cbBtn = btNew
ButtonEvents.Add ButtonEvent
End Sub
'删除自已定义的菜单的子程序
Public Sub RemoveToolbarButtons()
    Dim cbBar As CommandBar
    Dim cbCtr As CommandBarControl
     '忽略错误
    On Error Resume Next
     '需要从命令条中移除按钮
     '首先找到该按钮
    Set cbBar = xlApp.CommandBars("Worksheet Menu Bar")
     '运用我们所设置的标签查找控件
    Set cbCtr = cbBar.FindControl(, , "COMAddinTest")
    While Not cbCtr Is Nothing
         '删除
        cbCtr.Delete
        Set cbCtr = cbBar.FindControl(, , "COMAddinTest")
    Wend
     '恢复占用的内存
    Set ButtonEvents = Nothing
    Set ButtonEvent = Nothing
End Sub
'示例子过程
Sub sub1()
  MsgBox "Hello!"
End Sub
'示例子过程
Sub sub2()
  MsgBox "Hi!"
End Sub
'****************************************
7、创建一个类模块来处理菜单栏事件。选择菜单“工程——添加类模块”,并命名为cbEvents,然后添加如下代码:
'****************************************
Public WithEvents cbBtn As CommandBarButton
Private Sub cbBtn_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
  '忽略产生的任何错误
  On Error Resume Next
  '检查OnAction属性并执行相应的程序
  Select Case Ctrl.OnAction
    Case "Sub1"
      sub1
    Case "Sub2"
      sub2
  End Select
  '查找指定给OnAction属性的程序删除Excel
  CancelDefault = True
End Sub
'****************************************
8、生成dll文件。选择菜单“文件——生成dll”命令,将工程生成dll文件。
安装Excel COM加载宏
注册Dll
(1) Dll文件需要注册到Windows中以便能够运行。如果是在VB6中生成Dll文件,将在所创建该加载宏的计算机上自动注册。
(2)当然,也可以手工注册。点击屏幕左下角“开始”按钮,选择“运行”,在出现的“运行”对话框中的“打开”文本框中输入“regsvr32.exe <dllfilename>。
(3)若要移除或删除dll,先要注销它,即在“运行”对话框中使用regsvr32.exe命令并附加/u参数实现。
在Excel中安装加载宏
(1)若在VB6中创建该加载宏时,在设计器中设置初始化加载行为时选择“Startup”,则在装载Excel时,加载宏会自动装载并运行。
(2)如果没有选择“Startup”,则需要手动装载。选择菜单“工具——自定义”,在出现的“自定义”对话框中,选取“命令”标签,选择左侧“类别”中的“工具”项,在右侧中找到“COM加载项…”,拖动它到菜单栏中,关闭“自定义”对话框。此时,点击菜单栏中的“COM加载项…”命令,出现“COM加载项”对话框,刚才所生成的加载宏已出现在“可用加载项”列表中,选中或取消该加载宏前面的复选框来装载或卸载加载宏。

[ 本帖最后由 ldhyob 于 2011-3-31 11:51 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-4-14 20:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这是怎么回事啊,谢谢!
dabc.JPG

TA的精华主题

TA的得分主题

发表于 2011-4-15 17:13 | 显示全部楼层
原帖由 jygzcj 于 2011-4-14 20:34 发表
这是怎么回事啊,谢谢!

请将代码放置于类模块中.

TA的精华主题

TA的得分主题

发表于 2011-4-15 17:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个好,学到了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 04:10 , Processed in 0.027131 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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