2017-05-18 7 views
0

큰 Excel * .xlsx 테이블을 사용하여 일부 쿼리를 포함하여 MS Access * .accdb 데이터베이스를 만듭니다. 이렇게하면 최종 * .accdb 파일에 사용자 편의를 극대화 할 수있는 기능이 제공됩니다.MS-Excel에서 MS-Access VBA 모듈 만들기

따라서 여러 개의 쿼리를 실행하는 모듈에 VBA 코드를 제공하고 싶습니다.

짧은 이야기 : MS-Excel * .xlsx 파일에서 VBA 스크립트 모듈을 만들고 VBA를 통해 MS-Access * .accdb 파일에 추가하려면 어떻게해야합니까?

나는이 내 대상 파일에 빈 모듈을 만드는 방법을 해결책으로 저를 이끌어이 관련 포스트 From MS Excel VBA, create a Standard Module in MS Access

을 발견 지금부터 "MyCodedModule을"이 빈 모듈을 retreive 수있는 방법

'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 

이 파일은 다음과 같은 코드 라인을 추가합니다.

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

답변

0

그래서 해결책을 찾았습니다. EDS는이

다음 코드는 다음과 같이

  • 적용 aswell
  • 이 새 모듈

그리고 코드에 코드를 추가 새 모듈의 이름을 바꿀 새 기본 모듈을 만들고, MS 엑셀에서 사용 된 것은 다음과 같습니다 :

'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