Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

一个控件引用的问题?

asteriod  发表于:2009-12-22 15:35:06  
复制

在做好的access文件中引用了一个office注册控件(OWC10.DLL),要把做好的数据发给用户的时候,老是需要手工修复这个引用(不可能让用户每次都去手工修复引用),能不能用VBA直接建立引用呢,看了些资料,好像要使用GUID识别码,但具体不知道怎么写代码,这个代码放在什么位置,请大家指点一下。谢谢!

 

Top
小魏 发表于:2009-12-22 19:24:10

下面是我专门用于处理引用修复问题的两个代码,你可以参考参考.其中有你要的所有关键代码.

其中,我是把所有的引用的信息建在一张表中的.有新的引用时,自动存入表中.引用损坏时自动修复.

Function xiufuyinYong()
On Error Resume Next
    Dim fs    '用于操作文件及文件目录
    Set fs = CreateObject("Scripting.FileSystemObject")
    '检查前台文件目录是否存在,如果不存在,则创建之
     fs.CreateFolder CurrentProject.path & "\dll\adodb"
     '复制文件
     'fs.copyfile fileNM(3), BackupFileNm(3)
     Dim StrSQL As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
StrSQL = "SELECT * FROM table_Application_References;"
rs.Open StrSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rs.MoveFirst
Do Until rs.EOF
    Debug.Print rs.Fields("FullPath")
    On Error Resume Next
    fs.CopyFile rs.Fields("FullPath"), CurrentProject.path & "\dll"
    rs.MoveNext
    Loop
    rs.Close
Set rs = Nothing
If Err.Number > 0 Then
Debug.Print Err.Description
'Rs.Close
'Set Rs = Nothing
End If
End Function
Function Yinyong()    '检查新的引用,将新加入的引用加入到表中,将表中的引用加入到系统中.
On Error Resume Next
Dim i As Integer
Dim strGuid As String
Dim newGuid As String
Dim StrSQL As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
           
StrSQL = "SELECT * FROM table_Application_References;"
rs.Open StrSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
   For i = 1 To Application.References.Count
      'Debug.Print i
      If Application.References(i).IsBroken = False Then
         'Debug.Print DLookup("guid", "table_Application_References", "guid='" & Application.References(i).Guid & "'")
         If IsNull(DLookup("guid", "table_Application_References", "guid='" & Application.References(i).Guid & "'")) Then
                With rs
                 rs.AddNew
                 !Name = Application.References(i).Name      '引用的名称
                 !FullPath = Application.References(i).FullPath  '引用的路径
                 !Major = Application.References(i).Major     '引用的版本号
                 !Guid = Application.References(i).Guid      '引用的ID号
                 !Minor = Application.References(i).Minor     '引用的版次号
                 .Update
                End With
                Debug.Print "已经将新的引用:'" & Application.References(i).Name & "'加入到表中."
         End If
      End If
   Next i
  
   With rs
     rs.MoveFirst
     Do Until rs.EOF
         'Debug.Print rs.Fields("name")
         strGuid = rs.Fields("guid")
            newGuid = ""
            For i = 1 To Application.References.Count
            If Application.References(i).Guid = strGuid Then
            'Application.References.Count
               'Debug.Print strGuid
               newGuid = strGuid
               'Debug.Print newGuid
               Exit For
            Else
            newGuid = ""
            End If
            Next i
         If newGuid = "" Then
           Debug.Print "引用中未修复的引用:" & rs.Fields("name")
           Application.References.AddFromFile rs.Fields("fullpath")
           Debug.Print "修复的引用:" & rs.Fields("fullpath")
         End If
        
         rs.MoveNext
    Loop
   End With
rs.Close
Set rs = Nothing
If Err.Number <> 0 Then Debug.Print Err.Description
'Application.References.AddFromFile "C:\Windows\system32\SHAPE.OCX"
 
  ' Application.References.AddFromFile "C:\Windows\system32\wmp.dll"   '增加一个新的引用
  ' Application.References.AddFromFile "D:\MDB\tt\技术管理信息化系统V252 - 单机版 - 复制-2009-1-18--12.MDB"   '增加一个新的引用
 ' Application.References.Remove "D:\MDB\tt\技术管理信息化系统V252 - 单机版 - 复制-2009-1-18--12.MDB"   '增加一个新的引用
'Dim yy
'Set yy = Application.References!ACCESS9       '删除一个MDB文件的引用
'References.Remove yy
'RemoveReference = True
End Function



asteriod 发表于:2009-12-24 11:26:05

非常感谢楼上的!但有一个小的疑问,如何知道客户机这个控件的路径?我现在把它打包了,安装时直接copy到指定路径了。楼上的方法怎么得到控件的路径呢?



总记录:2篇  页次:1/1 9 1 :