【问题标题】:Importing a module into access programmatically from a *.cls or similar file从 *.cls 或类似文件以编程方式将模块导入访问
【发布时间】:2015-10-14 06:55:37
【问题描述】:

如果您打开 Microsoft Access,请打开 Visual Basic 窗口,以便查看 Access 项目中的模块和代码列表。您可以从 Windows 资源管理器中拖动基于文本的文件(txt、cls、bas 等)并将其放入您的模块文件夹中。

此拖放操作会将基于文本的文件中的代码导入您的项目并提示您保存(默认名称为您拖放的文件的名称。

有没有办法使用 VBA 以编程方式执行此操作?这似乎是一个简单的任务,应该有一个简单的解决方案,但我已经研究了几天,似乎找不到一个简单的方法来做到这一点。

【问题讨论】:

    标签: ms-access vba ms-access-2010


    【解决方案1】:

    您可以使用 VBE 对象模型中的 VBComponents.Import 方法。有关详细信息,请参阅 Access 帮助系统中的导入方法(VBA 加载项对象模型)主题。

    此示例代码从存储我的数据库的文件夹中导入 modImportMe.bas

    Dim strFile As String
    Dim strPath As String
    Dim strProject As String
    
    strFile = "modImportMe.bas"
    strPath = CurrentProject.Path & Chr(92) & strFile
    Debug.Print strPath
    If Len(Dir(strPath)) > 0 Then
        'VBE.ActiveVBProject.VBComponents.Import strPath
        VBE.VBProjects("Database2").VBComponents.Import strPath
        DoCmd.RunCommand acCmdCompileAndSaveAllModules
    Else
        MsgBox "File not found: " & strPath, vbOKOnly + vbCritical, "Oops!"
    End If
    

    注意这个数据库实际上只包含一个VBProject,所以我可以用VBE.ActiveVBProject 来引用它。但是,如果您的VBProject 包含多个VBProject,则通过名称引用它会更安全,即使只有一个VBProjects("<Name>") 也应该可以工作。

    【讨论】:

    • 我认为这可以通过一些调整来实现。我让它将一些代码导入到我的项目中,但它把它放入了我正在引用的文件中,而不是当前的 accdb。一开始就很奇怪。然后它开始给我错误。所以我认为通过一些工作,这也将是一个可行的解决方案,因此,我感谢你,但为了简单起见,我和 Gustav 一起回答了我的问题。也许其他人会发现你的替代品是更好的选择。
    • 这是正确的方法,特别是如果您的代码中有类模块。我通常从同一个应用程序导入,所以,我使用 Application.VBE.ActiveVBProject.VBComponents.Import "filename"
    【解决方案2】:

    是的,这就是要使用的命令 LoadFromText

    用法:

    LoadFromText acModule, "NameOfObject", "FileName"
    

    【讨论】:

    • 由于LoadFromText 没有被记录,您可能应该详细说明如何使用它。
    • 好吧,尽管 IntelliSense 说明了一切。
    • 有趣的是,您还可以使用 SaveAsText 导出表、查询和表单,然后使用 LoadFromText 加载它们,这样您就可以将整个 Access 应用程序保存到版本控制存储库中。
    • 我不会导出和导入。那可能行不通。它是SaveAsTextLoadFromText。这两个命令用于存储库传输。无法判断 2013 年,因为我没有安装它,但 2016 年它可以工作 - 至少在这里。
    • 是的,我就是这么做的。两个表单,两个小类模块,保存,然后从一个新的空数据库加载。立即工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2021-10-30
    • 1970-01-01
    • 2011-03-25
    • 2019-03-12
    • 2019-06-10
    相关资源
    最近更新 更多