所以我最初有一个2002-2003格式的MS Access应用程序。在生产网络图像上开发,当图像推动办公室升级时,它成为了Office 2007.所以这是以非常传统的方式使用...代表在公司笔记本电脑上随身携带输入数据,并自动化复杂的ppt演示文稿,以及他们的excel工作表(他们喜欢它......他们需要它)。数据不像数据库存储库那样保存,只需要足够长的时间来生成他们需要的自动化,并且它可以工作....节省时间。因此访问是有限的,并且在用例中,因为我以某种方式使用它确实有限,因此它当然不打算使用。我明白了,但就像我说到目前为止,它工作得很好.....
我遇到的一个问题是,如果有人因为某种原因不得不使用另一台计算机(经常不会发生,但它让我思考),并说他们有2002-2003版本的访问权限,该工具将会运行,但是一旦我们进入ppt&的代码例程/模块outlook,对象库显示MISSING,因为使用此工具似乎会自动导致库升级到下一个可用版本,但不能找到版本.....
所以最初当我做这个......它使用的是MS PowerPoint 11.0和MS Outlook 11.0,然后当我不得不在2007年开始工作时,两者都成了12.0,有些情况下我看到它升到了14.0,并没有任何问题,但现在因为我有一个Office 2007的图像,我尝试给他们的新文件版本默认为12.0的库,如果他们遇到他们将采取该文件的情况一张光盘并在具有office 2003的计算机上使用它,这些库只是缺失而且它不再识别适当的11.0对象库。
所以最后我的问题....任何暗示(除了显而易见的,并构建一个真正的应用程序......大声笑...会喜欢....没有$)处理这个?是否有代码可以/将评估使用vba打开文件时需要设置的库?这可能吗?
答案 0 :(得分:4)
您可以使用Remove Method删除引用,然后AddFromFile Method或AddFromGuid Method添加引用。
AddFromFile方法是在最近的StackOverflow问题的答案中提供的:Add references programatically但是,请务必阅读Tony's answer ...如果您将应用程序作为MDE分发,那么您就是SOL
考虑切换到PowerPoint和Outlook内容的后期绑定。这样你就不必使用引用(后期绑定不需要引用)。后期绑定的一个缺点是您在开发过程中失去了IntelliSense的优势。但是,您可以使用早期绑定进行开发,然后切换到后期绑定以进行部署。替换您在引用库中使用任何命名常量的值... debug将突出显示您忽略的任何内容。
一个经常反驳的观点是,后期绑定会造成“性能损失”。但是,我还没有遇到一个用例,其中“减速”大到足以让人类观察者注意到。
无论如何,我多年来一直在使用后期绑定,以避免您现在正在努力解决的部署问题。
编辑:以下是使用Excel类型库的示例。我把它设置为使用早期绑定。要将其转换为后期绑定,请在'*早期绑定... 下注释掉声明,并取消注释'*后期绑定下的声明...
另请注意包含命名常量的两行,xlAutomatic。
Public Sub EarlyVsLateBinding()
Dim strFullPath As String
'* early binding requires reference to Excel type library *'
Dim objExcel As Excel.Application
Set objExcel = New Excel.Application
Dim objBook As Excel.Workbook
Dim objSheet As Excel.Worksheet
'* late binding; no reference required *'
' Dim objExcel As Object '
' Dim objBook As Object '
' Dim objSheet As Object '
' Set objExcel = CreateObject("Excel.Application") '
strFullPath = CurrentProject.Path & Chr(92) & "foo.xls"
Set objBook = objExcel.Workbooks.Open(strFullPath)
Set objSheet = objBook.Worksheets("bar")
objSheet.Range("B1").Select
With objExcel.Selection.Font
.Name = "Arial"
.FontStyle = "Regular"
.Size = 10
.ColorIndex = xlAutomatic 'named constant available with reference set '
'.ColorIndex = -4105 'substitute xlAutomatic value so we drop reference
End With
objBook.Close SaveChanges:=True
objExcel.Quit
Set objSheet = Nothing
Set objBook = Nothing
Set objExcel = Nothing
End Sub