Ms access 是否可以动态设置对象库引用?

Ms access 是否可以动态设置对象库引用?,ms-access,ms-access-2007,vba,ms-access-2003,Ms Access,Ms Access 2007,Vba,Ms Access 2003,所以我有一个MS Access应用程序,最初是2002-2003格式的。基于生产网络映像开发,当映像推动office升级时,它成为office 2007。因此,这是一种非常非传统的使用方式……销售代表将其带到公司的笔记本电脑上输入数据,它自动完成复杂的ppt演示,并为他们提供excel工作表(他们喜欢它……他们需要它)。数据不像数据库存储库那样保存在这里,只需要足够长的时间来实现他们所需要的自动化,而且它可以工作……为他们节省时间。所以访问是有限的,在用例中,确实是有限的,因为我使用它的方式肯定

所以我有一个MS Access应用程序,最初是2002-2003格式的。基于生产网络映像开发,当映像推动office升级时,它成为office 2007。因此,这是一种非常非传统的使用方式……销售代表将其带到公司的笔记本电脑上输入数据,它自动完成复杂的ppt演示,并为他们提供excel工作表(他们喜欢它……他们需要它)。数据不像数据库存储库那样保存在这里,只需要足够长的时间来实现他们所需要的自动化,而且它可以工作……为他们节省时间。所以访问是有限的,在用例中,确实是有限的,因为我使用它的方式肯定不是有意使用的。我明白了,但正如我所说的,它工作得很好

我遇到的一个问题是,如果有人出于任何原因使用另一台计算机(虽然不经常发生,但这让我思考),并说他们拥有2002-2003版access,该工具将运行,但一旦我们找到ppt和outlook的代码例程/模块,对象库显示缺失,因为使用此工具似乎会自动使库升级到下一个可用版本,但不会向下查找版本

最初我做这个的时候…它使用了MS PowerPoint 11.0和MS Outlook 11.0,然后当我在2007年开始工作时,这两个版本的版本都变成了12.0,在某些情况下,我看到它升到了14.0,所有的ups都没有问题,但是现在我有了Office 2007的图像,我尝试给他们的新文件版本将库默认设置为12.0,如果他们遇到这样的情况,他们会将文件放在光盘上,并在装有office 2003的计算机上使用,这些库就会丢失,并且不再识别相应的11.0对象库

所以最后我的问题是…有没有任何建议(保存明显的内容并构建一个真正的应用程序…哈哈…愿意…没有美元)来处理这个问题?是否有代码可以/将评估使用vba打开文件时需要设置哪些库?这可能吗?

您可以使用它删除引用,然后添加引用

AddFromFile方法是在回答最近的StackOverflow问题时提供的:但是,请确保阅读。。。如果您将应用程序作为MDE分发,那么您就是SOL

考虑切换到PowerPoint和Outlook内容的后期绑定。这样您就不必处理引用(后期绑定不需要引用)。后期绑定的一个缺点是在开发过程中失去了IntelliSense的好处。但是,您可以使用早期绑定进行开发,然后切换到后期绑定进行部署。替换使用引用库中任何命名常量的值。。。调试将突出显示您忽略的任何内容

一个常见的反驳是,延迟绑定会造成“性能惩罚”。然而,我还没有遇到一个用例,其中“减速”足够大,可以被人类观察者注意到

无论如何,我多年来一直在使用后期绑定,专门是为了避免您现在所面临的部署问题

编辑:下面是一个使用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
您可以使用它删除引用,然后添加引用

AddFromFile方法是在回答最近的StackOverflow问题时提供的:但是,请确保阅读。。。如果您将应用程序作为MDE分发,那么您就是SOL

考虑切换到PowerPoint和Outlook内容的后期绑定。这样您就不必处理引用(后期绑定不需要引用)。后期绑定的一个缺点是在开发过程中失去了IntelliSense的好处。但是,您可以使用早期绑定进行开发,然后切换到后期绑定进行部署。替换使用引用库中任何命名常量的值。。。调试将突出显示您忽略的任何内容

一个常见的反驳是,延迟绑定会造成“性能惩罚”。然而,我还没有遇到一个用例,其中“减速”足够大,可以被人类观察者注意到

无论如何,我多年来一直在使用后期绑定,专门是为了避免您现在所面临的部署问题

编辑:下面是一个使用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

谢谢你,汉斯……也许有什么资源可以帮助你了解后期绑定的建议吗?我不熟悉这种区别。谢谢从Tony在回答另一个问题时提供的链接开始。我不知道,贾斯汀。我敢肯定我们中有一个人错过了什么;也许是我。我添加了一个使用Excel进行早期绑定与后期绑定的简单示例。对于我来说,使用早期绑定进行开发并切换到后期绑定进行部署似乎不需要太多努力。如果这比你认为合理的努力要多,那么你就得花时间解决因Office类型库版本差异而产生的问题。我不想在这上面花时间。我真的不知道你为什么抵制这个。后期绑定很有效。试试看。你坚持早期绑定,这让事情变得更复杂了……我确实试过了……的确如此!谢谢大家!谢谢你,汉斯……也许有学习ab的资源吗