7,762
社区成员
发帖
与我相关
我的任务
分享
Option Explicit
' 若希望在不启动IDE的情况下直接运行宏,则需要编译此工程
' 若需要扩展功能可另外添加模块/类模块,窗体等部件
' 但是请不要修改此类的类名及当前工程的名称
Implements IVB6MacroModule ' 请勿修改
' 接口函数,在运行宏的时候会调用此函数
' 参数objVBInstance为VB的IDE对象,若要了解其函数及属性可以按F2键查看VBIDE类型库,浏览时可按F1键定位帮助
' 参数strFunc为宏名称字符串,此参数可以用来分配任务,最简单的方式是用Select Case语句来判断
' 返回值为布尔类型,此值说明了本函数是否成功处理了strFunc指定的宏
Private Function IVB6MacroModule_Execute(objVBInstance As VBIDE.VBE, ByVal strFunc As String) As Boolean
Select Case strFunc
Case "打开宏插件对话框"
' 使用菜单控件的Execute执行打开操作,这里忽略错误
Call objVBInstance.CommandBars("Add-Ins").Controls("VB宏插件(&M)").Execute
Case "设置注释块"
Call objVBInstance.CommandBars.FindControl(Id:=192).Execute
Case "解除注释块"
Call objVBInstance.CommandBars.FindControl(Id:=2552).Execute
Case "切换为大写"
Call ChangeSelectionCase(objVBInstance, True)
Case "转换为小写"
Call ChangeSelectionCase(objVBInstance, False)
Case Else
' 运行到这里,说明是无法识别的宏,此时需要返回False
IVB6MacroModule_Execute = False
Exit Function
End Select
' 运行到这里,说明宏已经正确处理过了
IVB6MacroModule_Execute = True
End Function
Private Sub ChangeSelectionCase(ByVal objVBInstance As VBIDE.VBE, ByVal blnUpperCase As Boolean)
Dim strTemp As String
strTemp = Clipboard.GetText(vbCFText)
Dim a As Long
Dim b As Long
Dim c As Long
Dim d As Long
Call objVBInstance.ActiveCodePane.GetSelection(a, b, c, d)
Dim i As Integer
For i = 1 To 100
DoEvents
Next
Call objVBInstance.CommandBars.FindControl(Id:=19).Execute ' 复制
For i = 1 To 100
DoEvents
Next
Dim strData As String
strData = Clipboard.GetText()
If blnUpperCase Then
strData = UCase(strData)
Else
strData = LCase(strData)
End If
Call Clipboard.Clear
Call Clipboard.SetText(strData)
Debug.Print strData
Call objVBInstance.CommandBars.FindControl(Id:=22).Execute ' 粘贴
For i = 1 To 100
DoEvents
Next
Call objVBInstance.ActiveCodePane.SetSelection(a, b, c, d)
For i = 1 To 100
DoEvents
Next
Call Clipboard.SetText(strTemp, vbCFText)
End Sub
' 接口函数,在插件需要更新功能列表时会调用此函数
' 参数colFuncInfos为函数信息的集合对象,通过它的AddNew可以向其添加新的功能信息
Private Sub IVB6MacroModule_LoadFuncInfos(colFuncInfos As VBMacroAddin.FuncInfos)
' 这里可以添加宏,同时指定宏的名称,快捷键,以及是否重置
Call colFuncInfos.AddNew("打开宏插件对话框", vbKeyM, vbCtrlMask, False) ' 默认热键为 Ctrl + M
Call colFuncInfos.AddNew("设置注释块")
Call colFuncInfos.AddNew("解除注释块")
Call colFuncInfos.AddNew("切换为大写", vbKeyU, vbShiftMask Or vbCtrlMask, False)
Call colFuncInfos.AddNew("转换为小写", vbKeyU, vbCtrlMask, False)
End Sub
3.编译宏工程,覆盖原来的dll.
4.在VB(非宏工程)的外接程序菜单中,选择VB宏插件,在对话框中修改相应快捷键.
5.完成上面的步骤之后,就可以使用宏来完成操作了.