【问题标题】:Create MS-Access VBA module from MS-Excel从 MS-Excel 创建 MS-Access VBA 模块
【发布时间】:2017-05-18 10:23:56
【问题描述】:

我正在使用一个大型 Excel *.xlsx 表来创建一个 MS Access *.accdb 数据库,包括一些查询。这提供了一个最终的 *.accdb 文件,该文件具有为用户提供最大便利的功能。

因此我想在一个模块中提供一些VBA代码,一个接一个地运行多个查询。

长话短说: 如何从 MS-Excel *.xlsx 文件中的 VBA 脚本创建模块并通过 VBA 将其附加到 MS-Access *.accdb 文件?

我找到了这个相关的帖子 From MS Excel VBA, create a Standard Module in MS Access

这引导我找到如何在我的目标文件中创建空白模块的解决方案

'REQUIRES: MS Access 12.0 Object Library 
Dim ObjAccess As Access.Application 
Dim strPath As String 
strPath = "C:\Temp\MyDB_DEV_1.MDB" 
Set ObjAccess = New Access.Application 
With ObjAccess 
    .OpenCurrentDatabase strPath, True 
    .DoCmd.RunCommand acCmdNewObjectModule 
    .DoCmd.Save acModule, "Module1" 
    .DoCmd.Rename "MyCodedModule", acModule, "Module1" 
    .CloseCurrentDatabase 
   .Quit 
End With 
Set ObjAccess = Nothing

我现在如何从这个文件中检索这个空白模块“MyCodedModule”,以添加类似的代码行

 Dim m as DAO.Module
 Set m = GetModuleFromDataBase("MyCodedModule") 'HOW?
 m.AddFromString "Sub foo()" & vbCrLf & _
                 "  Debug.Print ""FOO""" & vbCrLf & _
                 "End Sub"

【问题讨论】:

    标签: excel vba ms-access


    【解决方案1】:

    所以我找到了解决方案,在这里分享,以防有人也需要这个

    以下代码应用这些步骤

    • 创建一个新的默认模块
    • 重命名新模块
    • 向新模块添加代码

    MS Excel 中使用的代码如下:

    'REQUIRES: MS Access <version> Object Library 
    
    Dim dbpath            As String              'Path of the database to add the module to
    Dim moduleName        As String              'Name of the new module to be created in the database
    Dim strCode           As String              'String for the code to be added to new module
    Dim defaultModuleName As String              'Default module name chosen by Access
    Dim ObjAccess         As Access.Application  'Access Application Object
    
    'Set database path
    dbpath = "C:\PATH\To\MY\database.accdb"
    
    'Define Code String with line breaks (vbCrLf)
    strCode = "Sub foo()" & vbCrLf & _
              "  Debug.Print ""FOO""" & vbCrLf & _
              "End Sub"
    
    '(English 'Module1', German 'Modul1', ...)
    defaultModuleName = "Module1"
    
    'Set new module name
    moduleName = "MyModule"
    
    'Initialize Access Application Object
    Set ObjAccess = New Access.Application
    
    'Open Database and add blank default module, rename afterwards
    ObjAccess.OpenCurrentDatabase dbpath, True
    ObjAccess.DoCmd.RunCommand acCmdNewObjectModule
    ObjAccess.DoCmd.Save acModule, defaultModuleName
    ObjAccess.DoCmd.Rename moduleName, acModule, defaultModuleName
    ObjAccess.DoCmd.Save acModule, moduleName
    
    'Loop Modules in Database
    For i = 0 To ObjAccess.Modules.Count - 1
        'Find module name
        If ObjAccess.Modules(i).Name = moduleName Then
             'add code to module
             ObjAccess.Modules(i).AddFromString strCode
             Exit For
        End If
    Next
    
    'Save and Close
    ObjAccess.DoCmd.Save acModule, moduleName 
    ObjAccess.CloseCurrentDatabase
    ObjAccess.Quit
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 1970-01-01
      相关资源
      最近更新 更多