ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 带劲儿

[分享] 【少同叨叨叨】COM加载项制作过程及代码全解析,有难不求人,求人不入心!

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-20 13:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:插件开发
带劲儿 发表于 2015-5-20 13:21
接下来我们对下面动画演示里的功能进行一个简单VB封装代码以及回调代码的说明,先看下面动画:

要上班了,晚上继续哦~~

TA的精华主题

TA的得分主题

发表于 2015-5-20 22:53 | 显示全部楼层
不要使用封装这个山寨词汇,标准的说法是com插件,或者com加载项。

TA的精华主题

TA的得分主题

发表于 2015-5-21 06:16 | 显示全部楼层
谢谢楼主分享,正是我这初学者需要的,楼主辛苦了

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-21 09:10 | 显示全部楼层
liucqa 发表于 2015-5-20 22:53
不要使用封装这个山寨词汇,标准的说法是com插件,或者com加载项。

好的,我修改一下标题,谢谢指教

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-21 19:26 | 显示全部楼层
本帖最后由 带劲儿 于 2015-5-21 19:35 编辑

  接下来我们来做一个上贴中演示视频里的封装示例,首先要明确我提供的XML文件里面“文件操作”这个按钮的回调是WJCZ,所以我们可以像Ribbon回调一样像下面这样进行回调即可:
  1. Sub WJCZ(control As IRibbonControl)

  2. End Sub
复制代码
  下面这个附件是我已经做好的窗体直接在VB里面添加文件添加进去即可,里面的代码也是我已经封装好的,我们来看一下其中一段代码:
  1. Private Sub CommandButton2_Click()

  2.    
  3.    On Error Resume Next
  4.    Set xlapp = GetObject(, "excel.application")
  5.    If xlapp Is Nothing Then
  6.     'MsgBox "Excel没有运行"
  7.     Exit Sub
  8.    End If


  9.         
  10. Dim cs
  11.    
  12. If TextBox1.Value = "" Then
  13.               
  14.     MsgBox "请选择路径!", 48, "应用宝"
  15.          
  16.      Exit Sub

  17.        End If

  18. If OptionButton4 = True Then
  19.             
  20.     xlapp.Workbooks.Add
  21.       
  22.    
  23.    xlapp.Activate
  24.               
  25.      End If
  26.    
  27. If OptionButton3 = True Then
  28.             
  29.     xlapp.Worksheets.Add After:=xlapp.Sheets(xlapp.Sheets.Count)
  30.          
  31.      End If
  32.    
  33. folderpath = TextBox1.Value
  34.               
  35. Call ShowFolderList(folderpath) '调用ShowFolderList显示当前文件夹中的文件
  36.          
  37. Call subfolder(folderpath) '调用ShowFolderList显示当前文件夹子文件夹中的文件
  38.          
  39. '当前工作表中
  40.       
  41.   xlapp.Range("a1") = "所在文件夹/文件名:/大小/最后修改时间/类型" '为A本赋值
  42.             
  43.       xlapp.Columns("a:a").Select '选择A列
  44.               
  45.     '以下为A列分列操作
  46.               
  47.       xlapp.Selection.TextToColumns Destination:=xlapp.Range("A1"), DataType:=xlDelimited, _
  48.          TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
  49.          Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
  50.          :="/", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
  51.          TrailingMinusNumbers:=True
  52.       
  53.         'A到G列自动列宽
  54.            
  55.         'Dim i, n
  56.            
  57.          i = xlapp.Range("a65536").End(xlUp).Row
  58.    
  59.          For n = 2 To i
  60.      
  61.           xlapp.Range("b" & n).Select
  62.   
  63.           xlapp.ActiveSheet.Hyperlinks.Add Anchor:=xlapp.Selection, Address:=xlapp.Cells(n, 1) & "" & xlapp.Cells(n, 2)
  64.      
  65.          Next

  66.           xlapp.Columns("a:g").AutoFit

  67.          If CheckBox2 = False Then
  68.         
  69.             xlapp.Range("A1").CurrentRegion.Hyperlinks.Delete
  70.       
  71.               End If
  72.         
  73.          If CheckBox1 = False Then
  74.         
  75.             xlapp.Columns(" C:F").Delete
  76.             
  77.              xlapp.Columns("A").Delete

  78.              End If
  79.          

  80.    
  81.          Unload Me
  82.   
  83. End Sub
复制代码
统观以上代码,首先第一步是用Getobject获取Excel对象,然后只要涉及到Excel对象的都要加上xlapp即可。这个应该没有什么可说的了。下面我把文件操作这个窗体对象上传一下,你只需要将这个窗体对象添加到你的VB里面就行了。然后在Conect里面讲下列的回调代码粘进去:
  1. '文件操作
  2. Sub ZtoolsSJTS(control As IRibbonControl)
  3. On Error Resume Next
  4. 文件操作.Show
  5. End Sub
复制代码
然后我们再增加一个VB里面日积月累的功能,在VB里面右键添加一个窗体控件选择日积月累:


然后在Conect的“IDTExtensibility2_OnConnection”里面添加如下代码:
Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
Set xlapp = Application '将xlapp赋值为Excel程序
frmTip.Show
End Sub
再将文件操作的回调代码加进去:
'文件操作
Sub WJCZ(control As IRibbonControl)
On Error Resume Next
文件列表.Show
End Sub
然后把我上传的附件当中的TXT文件跟你的dll放到一个文件夹下,然后编译一下你的dll在Excel里面加载一下看看是不是弹出下面的日积月累了?
日积月累界面.jpg
当你到了这一步就可以继续来看下面的教程了~~等你来呵呵。楼下接附件

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-21 19:37 | 显示全部楼层
完整封装示例.zip (152.54 KB, 下载次数: 596)

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-21 19:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

大家下了这个附件只需要加载里面的dll打开excel即可弹出日积月累

TA的精华主题

TA的得分主题

发表于 2015-5-23 10:43 | 显示全部楼层
向楼主请教一个问题,如何使用自定义的图标呢?请不吝赐教
谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-24 18:50 | 显示全部楼层
JSXYGSHN 发表于 2015-5-23 10:43
向楼主请教一个问题,如何使用自定义的图标呢?请不吝赐教
谢谢

链接的帖子里有方法哦

TA的精华主题

TA的得分主题

发表于 2015-6-3 14:14 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-29 19:43 , Processed in 0.049990 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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