Excel的xll加载宏的开发(7):xla和xll的混合使用_SCYANGYU

来源:百度文库 编辑:神马文学网 时间:2024/03/29 06:25:50
Excel的xll加载宏的开发(7):xla和xll的混合使用2007-11-16 18:26

    原本的准备把用户接口(菜单、工具条、定制窗口等)在xll中实现,后来发现这样也不是很方便,最后就决定采用xla+xll混合方式。用户接口用xla,核心计算用xll。office自带的ANALYSIS TOOLPAK也是这种方式(ATPVBACS.XLA+ANALYS32.XLL)。
   
    xla当然是在Excel中用VBA来实现。在xla创建菜单、工具条、定制窗口都非常的容易。但设计与xll混合使用是,就涉及两个关键的问题:
   
    (1)xllL和xla的加载问题
   
    当然应是先加载xll,然后再加载xla。这需要加载两个加载宏。如果只加载了xla会怎么样?可能就会出错。最好能让xla自动判断,如果已加载过xll则好,否则在VBA中动态加载xll。
   
    Dim WASPCNPath As String
   
Sub auto_open()
      VerifyOpen                                \'验证xll是否注册,如果没有注册就注册它
End Sub

\'验证xll是否注册,如果没有注册就注册它
Private Sub VerifyOpen()
      Dim XLLName As String, Quote As String
      Dim theArray As Variant
      Dim i As Integer
      Dim XLLFound As Boolean
     
      XLLName = "WASPCN.XLL"          \'XLL文件名称
      \'Application.RegisteredFunctions 属性返回包含所有已登记函数列表的数组
      theArray = Application.RegisteredFunctions
      If Not (IsNull(theArray)) Then
          For i = LBound(theArray) To UBound(theArray)
              If (InStr(theArray(i, 1), XLLName)) Then          \'列1 动态链接库或代码资源的名称
                  Exit Sub                                      \'需要配套的xll已经注册或加载
              End If
          Next i
      End If
     
      Quote = String(1, 34)
      WASPCNPath = ThisWorkbook.Path
     
      WASPCNPath = WASPCNPath & "\\"
      XLLFound = Application.RegisterXLL(WASPCNPath & XLLName) \'载入 XLL 代码源,并自动登记该代码源中包含的函数和命令。
      If (XLLFound) Then                                          \'如果指定代码源载入成功则本方法返回 True;否则本方法返回 False。
          Exit Sub
      End If
         
      WASPCNPath = "" & "\\"
      XLLFound = Application.RegisterXLL(WASPCNPath & XLLName) \'载入 XLL 代码源,并自动登记该代码源中包含的函数和命令。
      If (XLLFound) Then                                         \'如果指定代码源载入成功则本方法返回 True;否则本方法返回 False。
          Exit Sub
      End If
         
      WASPCNPath = "\\LIBRARY\\WASPCN" & "\\"
      XLLFound = Application.RegisterXLL(WASPCNPath & XLLName) \'载入 XLL 代码源,并自动登记该代码源中包含的函数和命令。
      If (XLLFound) Then                                         \'如果指定代码源载入成功则本方法返回 True;否则本方法返回 False。
          Exit Sub
      End If
     
      \'出错信息
      MsgBox ("Cannot find WASPCN.XLL")
      ThisWorkbook.Close (False)
End Sub