質問するログイン新規登録

回答編集履歴

2

コード修正

2018/08/08 07:00

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -33,6 +33,7 @@
33
33
  FileName:=OutDir & acObj.Name & ".txt"
34
34
  Next
35
35
  appAccess.CloseCurrentDatabase
36
+ appAccess.Quit
36
37
  Set appAccess = Nothing
37
38
 
38
39
  MsgBox "処理終了"

1

訂正コードの追記

2018/08/08 06:59

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -1,5 +1,4 @@
1
1
  `Set Containers = CurrentDb.Containers`の`CurrentDb`は開いているAccdbのDataBaseという意味だから、ここを、下記のように他のAccdbファイルを開いて使用すればいいでしょう。
2
-
3
2
  ```vba
4
3
  Dim Db As DAO.DataBase
5
4
  Set Db = OpenDatabase("accdbファイルのパス")
@@ -8,5 +7,34 @@
8
7
  '中略
9
8
 
10
9
  Db.Close: Set Db = Nothing
10
+ ```
11
+ 訂正
12
+ ---
13
+ `SaveAsText`メソッドは、`Access.Application`のメソッドなので、下記のコードになりますね。
14
+ マクロ名は、`CurrentProject.AllMacros`を`For Each`でループさせれば取得できますので、 `OpenDatabase`は不要です。
11
15
 
16
+ ```vba
17
+ Sub ExportMacro()
18
+ Dim OutDir As String
19
+ Dim acObj As AccessObject
20
+ Dim appAccess As Access.Application
21
+ Dim strDB As String
22
+
23
+ strDB = "C:\TEST1\Database1.accdb"
24
+ OutDir = "C:\TEST1\"
25
+
26
+ Set appAccess = CreateObject("Access.Application")
27
+ appAccess.OpenCurrentDatabase strDB
28
+
29
+ 'マクロの数だけ繰り返し
30
+ For Each acObj In appAccess.CurrentProject.AllMacros
31
+ appAccess.Application.SaveAsText ObjectType:=AcObjectType.acMacro, _
32
+ ObjectName:=acObj.Name, _
33
+ FileName:=OutDir & acObj.Name & ".txt"
34
+ Next
35
+ appAccess.CloseCurrentDatabase
36
+ Set appAccess = Nothing
37
+
38
+ MsgBox "処理終了"
39
+ End Sub
12
40
  ```