VBA实用小程序48: 确保工作簿已装载必需的外部加载宏

论坛 期权论坛 期权     
完美Excel   2019-6-9 21:27   3804   0
学习Excel技术,关注微信公众号:
excelperfect

如果你的Excel应用程序依赖于外部加载项(例如分析工具库或规划求解加载项),那么必须确保在运行应用程序之前加载了该加载项。

Rob Bovey提供了一个通用函数,该函数将确定当前是否加载了指定的加载项。如果还没有加载该加载项,则尝试加载它。如果成功加载该加载项,则函数返回True,否则,如果加载不成功,则返回False。这样,允许你优雅地处理用户计算机上未安装所需加载项的情况。

下面是这个通用函数的代码:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''' 说明:   检查是否装载了指定的加载项
'''         如果没有,则试图装载该加载项
'''
''' 参数:  szAddInWorkbook 加载项工作簿名.例如,对于Excel 2007或
'''                        更高版本,规划求解加载项是SOLVER.XLAM.
'''        szAddInName     出现在加载项对话框列表中的加载项名.
'''                        例如,规划求解加载项
'''
''' 返回值:Boolean         如果该加载项已装载或者通过本程序已装载
'''                        则返回True.
'''                        如果该加载项没有被装载,则返回False.
'''
''' 作者:   Rob Bovey
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Function bLoadAddIn(ByRef szAddInWorkbook As String, _
                    ByRef szAddInName AsString) As Boolean

    Dim wkbAddIn As Excel.Workbook

    ''' 看加载项是否已安装.
    Set wkbAddIn = Nothing
    On Error Resume Next
    Set wkbAddIn =Application.Workbooks(szAddInWorkbook)
    On Error GoTo 0
   
    If wkbAddIn Is Nothing Then
   
        ''' 如果加载项没有安装,试图安装它.
        On Error Resume Next
        ''' 如果已在加载项列表中选择了需要加载的加载项(如规划求解加载项),
        ''' 除非切换了Installed属性,否则不会打开其工作簿.
       Application.AddIns(szAddInName).Installed = False
       Application.AddIns(szAddInName).Installed = True
        Set wkbAddIn =Application.Workbooks(szAddInWorkbook)
        On Error GoTo 0
      
        ''' 如果此时未装载该加载项,失败并退出.
        If wkbAddIn Is Nothing Then
            bLoadAddIn = False
        Else
            bLoadAddIn = True
        End If
      
    Else
        ''' 该加载项已安装并加载.
        bLoadAddIn = True
    End If
End Function

下面是测试程序:
Public Sub DemoLoadAddIn()
    Dim szAddInWorkbook As String
   
    If Application.Version < 12 Then
        szAddInWorkbook ="SOLVER.XLA"
    Else
        szAddInWorkbook ="SOLVER.XLAM"
    End If

    ''' 试图安装规划求解加载项.
    IfbLoadAddIn(szAddInWorkbook, "规划求解加载项") Then
        MsgBox "规划求解加载项已装载.", vbInformation, "装载加载项演示"
    Else
        ''' 在真实开发的应用程序中应通过错误处理发送下面的消息.
        MsgBox "规划求解加载项没有装载.", vbCritical, "装载加载项演示"
    End If
End Sub

如果工作簿已经安装了“规划求解加载项”,如下图1所示:


图1

运行测试程序DemoLoadAddIn过程,会弹出下图2所示的消息框。


图2

下面是bLoadAddIn函数的图片版:



分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:195
帖子:39
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP