+ -
当前位置:首页 → 问答吧 → 通过VBA自动加入引用

通过VBA自动加入引用

时间:2010-08-23

来源:互联网

'Name: Excel Major: 1 Minor: 7 GUID: {00020813-0000-0000-C000-000000000046}
'Name: DAO Major: 5 Minor: 0 GUID: {00025E01-0000-0000-C000-000000000046}
'Name: WMPLib Major: 1 Minor: 0 GUID: {6BF52A50-394A-11D3-B153-00C04F79FAA6}
'Name: VBIDE Major: 5 Minor: 3 GUID: {0002E157-0000-0000-C000-000000000046}
'Name: Office Major: 2 Minor: 5 GUID: {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}
'Name: stdole Major: 2 Minor: 0 GUID: {00020430-0000-0000-C000-000000000046}
'Name: Word Major: 8 Minor: 5 GUID: {00020905-0000-0000-C000-000000000046}
'Name: VBA Major: 4 Minor: 1 GUID: {000204EF-0000-0000-C000-000000000046}
sub AutoAddRef()
Dim strGUID As String
strGUID = "{6BF52A50-394A-11D3-B153-00C04F79FAA6}" 'Microsoft Windows Media Player Marjor=1 Minor=0
ThisDocument.VBProject.References.AddFromGuid GUID:=strGUID, Major:=1, Minor:=0
end sub

作者: ngcg   发布时间: 2010-08-23

谢谢ngcg兄的分享,能否解释一下?

作者: tangqingfu   发布时间: 2010-08-23

在执行VBA的某些指令,需要引用的支持,例如播放MP3音频文件,需要WindowsMediaPlayer的支持。一般上我们是通过VBA编辑器的工具栏(Tools)下的引用(Reference)加入所需的引用。这对完全不懂得VBA的用户,是可望不可及的。通过程序自动为使用者加入引用,就简单得多了。

作者: ngcg   发布时间: 2010-08-23

请教如何才能获取引用这些指令的代码?
如'Name: WMPLib Major: 1 Minor: 0 GUID: {6BF52A50-394A-11D3-B153-00C04F79FAA6}

作者: tangqingfu   发布时间: 2010-08-23

路过,学习下

作者: 海婷   发布时间: 2010-08-23

先用人工加入引用,然后利用以下代码读出相关信息。

  Dim strGUID As String, theRef As Variant
   For i = ThisDocument.VBProject.References.Count To 1 Step -1
    Set theRef = ThisDocument.VBProject.References.Item(i)
    Selection.TypeText Text:="Name: " + theRef.Name
    Selection.TypeText Text:=" Major: " & theRef.Major
    Selection.TypeText Text:=" Minor: " & theRef.Minor
    Selection.TypeText Text:=" GUID: " + theRef.GUID
    Selection.TypeText Text:=vbCrLf
   Next i

作者: ngcg   发布时间: 2010-08-23

谢谢cgng兄无私的分享,明白了,收藏学习!

作者: tangqingfu   发布时间: 2010-08-23

还是不太明白

作者: rzz8118   发布时间: 2010-08-24

很好!
有的引用,系统没有怎么办,如listview控件,有的电脑装的都是精简版的office,这个方法,可以测试出来吗?

作者: zl2010   发布时间: 2010-08-24

本程序只能检测已安装的控件。

作者: ngcg   发布时间: 2010-08-25

自动加入引用的另一个指令:
dim FullPath as string
FullPath="C:\windows\System32\wmp.dll"
ThisDocument.VBProject.References.AddFromFile(FullPath)

作者: ngcg   发布时间: 2010-08-26

不错,谢谢分享,这个应该能应用到office所有的产品中

作者: dsd999   发布时间: 2010-08-26

一般而言,直接使用后期绑定对象即可,否则的话,实际上是编译无法通过的,除非定义对象时仍为Object。

类似问题的常规做法:
使用CreateOjbect方法创建一个后期绑定的对象。为了使用该对象库的对象浏览器,可以在本机中先期引用该对象库,定义为明确的对象类型,编译通过以及测试没有问题后,去除前期引用,将所有该对库库的相关对象声明为Object类型,常量改为常数。

作者: 守柔   发布时间: 2010-08-28

请版主提供明确的实例以供参考。谢谢。

作者: ngcg   发布时间: 2010-08-28

引用:
原帖由 ngcg 于 2010-8-28 18:11 发表
请版主提供明确的实例以供参考。谢谢。
论坛上比比皆是。
我示例一下,仅供理解。

Option Explicit

Sub Example_AddReference()
'''VBE 引用Microsoft Excel 11.0 Object  Library
    Dim xlApp As New Excel.Application
    Dim xlWBK As Excel.Workbook
    Dim xlSht As Excel.Worksheet
    Dim xlRng As Excel.Range
    Dim C As Excel.Range
    Set xlWBK = xlApp.Workbooks.Open("D:\Temp\sample.xls")
    Set xlSht = xlWBK.Worksheets(1)
    With xlSht
        Set xlRng = .Range(.Cells(1, 1), .Cells(65536, 1).End(xlUp))
    End With
    For Each C In xlRng
        Debug.Print C.Value
    Next
    xlWBK.Close False
    Set xlWBK = Nothing
    xlApp.Quit
    Set xlApp = Nothing
End Sub

Sub Example_CreateObject()
    Dim xlApp As Object
    Dim xlWBK As Object
    Dim xlSht As Object
    Dim xlRng As Object
    Dim C As Object
    Set xlApp = CreateObject("Excel.Application")
    Set xlWBK = xlApp.Workbooks.Open("D:\Temp\sample.xls")
    Set xlSht = xlWBK.Worksheets(1)
    With xlSht
        Set xlRng = .Range(.Cells(1, 1), .Cells(65536, 1).End(-4162))
    End With
    For Each C In xlRng
        Debug.Print C.Value
    Next
    xlWBK.Close False
    Set xlWBK = Nothing
    xlApp.Quit
    Set xlApp = Nothing
End Sub

''''前者为前期绑定,即在VBE中勾选对于MS EXCEL 库的引用;后期为后期绑定,使用CreateObject创建一个已注册的库的类的实例。
'''前者如果开发机上引用为高版本时(如12.0),在低端用户机上(如11.0)时将发生引用丢失现象,反之则不会出现。但后期绑定时则不存在此问题,CreateObject时总是创建一个当前环境下已注册的类的实例。

作者: 守柔   发布时间: 2010-08-29

'谢谢版主的示例。
我的构思是不要通过VBE人工引用Microsoft Excel 11.0 Object  Library,而是借助编码引用
Microsoft Excel 11.0 Object  Library
''VBE 引用Microsoft Excel 11.0 Object  Library

作者: ngcg   发布时间: 2010-08-29

在PPT中如何借助编码引用?

作者: chuhaiou   发布时间: 2010-08-29

ActivePresentation.vbproject.references.addfromfile("c:\windows\system32\wmp.dll")
执行前,必须勾选Tools->Macro->Security->->TrustedSources->TrustaccesstoVisualBasicProject

作者: ngcg   发布时间: 2010-08-30

谢谢,学会了引用!
Sub 引用msdxm.ocx()
ActivePresentation.VBProject.references.addfromfile ("c:\windows\system32\msdxm.ocx")
End Sub

作者: chuhaiou   发布时间: 2010-08-30

收藏了!我要学习!

作者: yb010   发布时间: 2010-11-15