【笔记】excel预加载word引用

8 篇文章 0 订阅
5 篇文章 0 订阅

由于工作需要,做了一些excel操作word的小工具。但是头疼的是,给多个同事用的话需要挨个儿手动加载word引用。

于是乎,在网上找到了解决方案:http://www.exceloffice.net/archives/2065

使用的是:

object.AddFromGuid (guidmajorminorAs Reference

我按照我的使用方式修改了一下:

  1. 首先确定当前excel能否使用VBProject,如不能,提示解决方法:“Excel-文件-选项-信任中心-信任中心设置-宏设置-勾选信任对VBA工程对象模型的访问”。(当然,首先当前脚本已加载了 MS VB for App)
  2. 由于不确定同事使用的office版本,需要把当前excel已加载的word引用清除;后来发现无法清除已丢失的word引用,于是把这一步放到了excel关闭的时候操作
  3. 搜索当前excel引用的版本,加载对应的word引用。由于手头office有限,无法获得所有的版本号,所以使用On Error Resume Next把未识别的都加载上。

顺便还学习了一下 On Error 

  1. On Error Resume Next   ‘ 不报错
  2. On Error Goto myErr      ' 发生错误时跳转到myErr,当然此标签段末尾需要加上Exit Function/Sub
  3. On Error Goto 0              ' 恢复默认报错模式

代码如下:


' 
' 一、 预加载word引用
' 
 Function fn_preLoad()
    
    fn_preLoad = 0
    
    Dim oRef As Reference
    Dim iVer
    Dim sArrTmp
    Dim guidWord, guidExcle
    Dim msgErr, msgMethod
    Dim test
    
    guidWord = "{00020905-0000-0000-C000-000000000046}"
    guidExcle = "{00020813-0000-0000-C000-000000000046}"
    
    
    On Error GoTo err_word_ref
    Set test = ThisWorkbook.VBProject.References
    
    With ThisWorkbook.VBProject
        ' 由于打开此脚本的word版本不同,首先清空word引用
        ' 无法清除丢失的word引用,解决方法:excel关闭的时候清除word引用
'        For Each oRef In .References
'            If oRef.GUID = guidWord Then
'                 .References.Remove oRef
'            End If
'        Next
        
        ' 检测当前excel引用的版本,
        ' Description="Microsoft Excel 11.0 Object Library"
        For Each oRef In .References
            If oRef.GUID = guidExcle Then
                sArrTmp = Split(oRef.Description, " ")
                iVer = CInt(sArrTmp(2))
            End If
        Next
        
        ' 加载对应的word引用
        If iVer = 16 Then
            ' word2016
            Set oRef = .References.AddFromGuid(guidWord, 8, 7)
        ElseIf iVer = 14 Then
            ' word2010
            Set oRef = .References.AddFromGuid(guidWord, 8, 5)
        ElseIf iVer = 11 Then
            ' word2003
            Set oRef = .References.AddFromGuid(guidWord, 8, 3)
        Else
            ' office有限。。。无法测试
            On Error Resume Next
            Set oRef = .References.AddFromGuid(guidWord, 8, 4)
            Set oRef = .References.AddFromGuid(guidWord, 8, 6)
            On Error GoTo 0
        End If
        
    End With
    
    fn_preLoad = -1
    Exit Function
    
err_word_ref:
        msgErr = " 错误 " & Err.Number & " : " & Err.Description & vbCrLf
        msgMethod = "解决方法:" & vbCrLf & _
            "  1、Excel-文件-选项;" & vbCrLf & _
            "  2、信任中心-信任中心设置;" & vbCrLf & _
            "  3、宏设置,勾选 ""信任对VBA工程对象模型的访问"";" & vbCrLf & _
            "  4、确定。"
        MsgBox msgErr & msgMethod
    Exit Function
    
End Function

excel关闭时清除word引用代码:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    
    Dim oRef As Reference
    Dim guidWord
    
    guidWord = "{00020905-0000-0000-C000-000000000046}"
    
    On Error Resume Next
    With ThisWorkbook.VBProject
        ' 由于打开此脚本的word版本不同,需清空word引用
        ' 无法清除丢失的word引用,解决方法:excel关闭的时候清除word引用
        For Each oRef In .References
            If oRef.GUID = guidWord Then
                 .References.Remove oRef
            End If
        Next
    End With
    
End Sub

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值