質問編集履歴
6
コード修正
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -67,9 +67,13 @@
|
|
|
67
67
|
’複数の仕入先を処理することがあるため、A1列に会社名をセットし、Do~Loop処理を行います
|
|
68
68
|
|
|
69
69
|
EE.Run "シミュ_Macro"
|
|
70
|
+
↓追記
|
|
71
|
+
EE.Application.DisplayAlarts = False
|
|
72
|
+
EE.Quit
|
|
70
73
|
|
|
71
74
|
Set wb = Nothing
|
|
72
75
|
Set EE = Nothing
|
|
76
|
+
|
|
73
77
|
|
|
74
78
|
MsgBox "END"
|
|
75
79
|
|
5
コード編集
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -78,6 +78,25 @@
|
|
|
78
78
|
```
|
|
79
79
|
```
|
|
80
80
|
Excelマクロ
|
|
81
|
+
Dim LCNT As Long
|
|
82
|
+
Dim LCNT1 As Long
|
|
83
|
+
Dim LCNT2 As Long
|
|
84
|
+
Dim LCNT3 As Long
|
|
85
|
+
Dim LCNT4 As Long
|
|
86
|
+
Dim M_NAME
|
|
87
|
+
Dim F_NAME
|
|
88
|
+
Dim HIRAITA_F As String
|
|
89
|
+
Dim IDX1 As Integer
|
|
90
|
+
Dim RA, RB, RC
|
|
91
|
+
Dim YMD
|
|
92
|
+
Dim WS As Object
|
|
93
|
+
Dim WN(3) As String
|
|
94
|
+
Dim Bar
|
|
95
|
+
Dim PT
|
|
96
|
+
Dim MM
|
|
97
|
+
Dim NENGETU As String
|
|
98
|
+
Dim i As Integer
|
|
99
|
+
Dim wb As Workbook
|
|
81
100
|
|
|
82
101
|
Do
|
|
83
102
|
Workbooks(M_NAME).Activate
|
4
コードの編集
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
Dim RR As Integer 'ROW
|
|
9
9
|
Dim CC As Integer 'Cell
|
|
10
10
|
Dim EE As Object
|
|
11
|
-
Dim wb As
|
|
11
|
+
Dim wb As Object
|
|
12
|
-
Dim ws As
|
|
12
|
+
Dim ws As Object
|
|
13
13
|
Dim i As Integer
|
|
14
14
|
Dim idx1 As Integer, idx2 As Integer
|
|
15
15
|
Dim CNT1 As Integer, CNT2 As Integer
|
3
アイコン追加
title
CHANGED
|
File without changes
|
body
CHANGED
|
File without changes
|
2
追記
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -75,4 +75,45 @@
|
|
|
75
75
|
|
|
76
76
|
End Sub
|
|
77
77
|
|
|
78
|
-
```
|
|
78
|
+
```
|
|
79
|
+
```
|
|
80
|
+
Excelマクロ
|
|
81
|
+
|
|
82
|
+
Do
|
|
83
|
+
Workbooks(M_NAME).Activate
|
|
84
|
+
l_cnt = l_cnt + 1
|
|
85
|
+
MM = Range("B" & l_cnt)
|
|
86
|
+
|
|
87
|
+
If MM = "" Then
|
|
88
|
+
Exit Do
|
|
89
|
+
End If
|
|
90
|
+
|
|
91
|
+
LCNT1 = 1
|
|
92
|
+
|
|
93
|
+
Workbooks(M_NAME).Activate
|
|
94
|
+
|
|
95
|
+
//省略// 製表処理しています。
|
|
96
|
+
loop
|
|
97
|
+
'閉じるときにAB列の値を消す
|
|
98
|
+
Range("A1:B21").Select
|
|
99
|
+
Selection.ClearContents
|
|
100
|
+
|
|
101
|
+
’開いているExcelを保存して閉じる
|
|
102
|
+
For Each wb In Workbooks
|
|
103
|
+
If Not wb Is ThisWorkbook Then
|
|
104
|
+
wb.Close SaveChanges:=True
|
|
105
|
+
End If
|
|
106
|
+
Next wb
|
|
107
|
+
’Excelファイル『Macro』を閉じる
|
|
108
|
+
ThisWorkbook.Save
|
|
109
|
+
```
|
|
110
|
+
ここまでの処理を、teratailで質問させていただき何とか作成することが出来ました。
|
|
111
|
+
|
|
112
|
+
ここで困っていることはきちんと任意の選択した仕入先のファイルが作成され、製表を出来てきちんと保存されているのですが、
|
|
113
|
+
さて確認してみようと思うと、なぜか作成されたファイルだけ起動しているのに『Macro』ファイルも一緒に立ち上がってしまいます。
|
|
114
|
+
そしてACCESSでもう一度処理を行おうとするとずっと実行中(フリーズ?)した状態になってしまします。
|
|
115
|
+
|
|
116
|
+
処理が終わって『END』が表示されるようにしたので処理が終わった後にタスクマネジャーで確認したところ、Excelは起動していませんでした。
|
|
117
|
+
|
|
118
|
+
Excel『Macro』がきちんと終了できていないということでしょうか??
|
|
119
|
+
ご教示お願い致します。
|
1
追記途中です
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
ACCESSからデータを起こし、Excelマクロと連携し製表するまでの処理を行っています。
|
|
2
2
|
|
|
3
3
|
```ここに言語を入力
|
|
4
|
+
ACCESSのコード
|
|
4
5
|
Private Sub Export_Click()
|
|
5
6
|
|
|
6
7
|
Dim RS1 As Recordset, RS2 As Recordset
|
|
@@ -27,14 +28,10 @@
|
|
|
27
28
|
For idx1 = 1 To 21
|
|
28
29
|
省略(選択した取引先の処理を繰り返しています)
|
|
29
30
|
Next
|
|
31
|
+
|
|
32
|
+
’RS1でセットした内容をExcelにはきだします
|
|
30
33
|
|
|
31
|
-
Set RS1 = DB.OpenRecordset("SELECT M_仕入先会社マスタ.仕入先コード,M_仕入先会社マスタ.会社名 FROM M_仕入先会社マスタ WHERE (((M_仕入先会社マスタ.[CHK])=-1));")
|
|
32
|
-
|
|
33
|
-
CNT1 = 0
|
|
34
|
-
CNT2 = 0
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
Do Until RS1.EOF
|
|
37
|
-
|
|
38
35
|
Set EE = CreateObject("Excel.Application")
|
|
39
36
|
'本番はfalse
|
|
40
37
|
EE.Visible = False
|
|
@@ -44,47 +41,10 @@
|
|
|
44
41
|
Set wb = .Workbooks.Add
|
|
45
42
|
Set ws = wb.Sheets("Sheet1")
|
|
46
43
|
End With
|
|
47
|
-
|
|
48
|
-
For idx2 = 1 To 4
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
Set RS2 = DB.OpenRecordset("SELECT Q_シミュレート_" & idx2 & ".* FROM Q_シミュレート_" & idx2 & " WHERE (((Q_シミュレート_" & idx2 & ".仕入先コード)='" & RS1!仕入先コード & "'));")
|
|
52
|
-
|
|
53
|
-
Q_N = RS2!会社名
|
|
54
|
-
|
|
55
|
-
If idx2 = 1 Then
|
|
56
|
-
CNT1 = DCount("*", "Q_シミュレート_" & idx2 & "", "仕入先コード = '" & RS2!仕入先コード & "'")
|
|
57
|
-
|
|
44
|
+
//省略//
|
|
58
|
-
For i = 0 To RS2.Fields.Count - 1
|
|
59
|
-
|
|
60
|
-
ws.Cells(1, i + 1).Value = RS2.Fields(i).Name
|
|
61
|
-
'ActiveSheet.Cells(1, i + 1).Value = RS2.Fields(i).Name
|
|
62
|
-
Next i
|
|
63
|
-
'CopyFromRecordsetメソッドで基準セルを指定してデータの書き出し
|
|
64
|
-
ws.Range("A2").CopyFromRecordset RS2
|
|
65
|
-
'ActiveSheet.Range("A2").CopyFromRecordset RS2
|
|
66
|
-
|
|
67
|
-
CNT1 = CNT1 + 2
|
|
68
|
-
CNT2 = CNT1
|
|
69
|
-
|
|
70
|
-
Else
|
|
71
|
-
|
|
72
|
-
For i = 0 To RS2.Fields.Count - 1
|
|
73
|
-
ws.Cells(CNT2 + 1, i + 1).Value = RS2.Fields(i).Name
|
|
74
|
-
'ActiveSheet.Cells(CNT2 + 1, i + 1).Value = RS2.Fields(i).Name
|
|
75
|
-
Next i
|
|
76
|
-
'CopyFromRecordsetメソッドで基準セルを指定してデータの書き出し
|
|
77
|
-
ws.Range("A" & CNT2 + 2).CopyFromRecordset RS2
|
|
78
|
-
|
|
79
|
-
CNT2 = CNT2 + CNT1
|
|
80
|
-
|
|
81
|
-
End If
|
|
82
|
-
|
|
83
|
-
Next
|
|
84
45
|
|
|
85
46
|
With EE
|
|
86
|
-
|
|
87
|
-
wb.SaveAs "J:\
|
|
47
|
+
wb.SaveAs "J:\シミュレート表_2018\" & Q_N & ".xlsx"
|
|
88
48
|
wb.Close
|
|
89
49
|
.Quit 'Excel終了
|
|
90
50
|
Set EE = Nothing '参照開放
|
|
@@ -96,44 +56,23 @@
|
|
|
96
56
|
RS1.MoveNext
|
|
97
57
|
Loop
|
|
98
58
|
|
|
99
|
-
'''Macroへの書き出し'''''''''''
|
|
100
|
-
|
|
101
|
-
Set myQuery = DB.QueryDefs("Q_出力会社")
|
|
102
|
-
strSQL = myQuery.SQL
|
|
103
|
-
myQuery.SQL = "SELECT M_仕入先会社マスタ.仕入先コード, M_仕入先会社マスタ.会社名 FROM M_仕入先会社マスタ WHERE (((M_仕入先会社マスタ.CHK)=-1));"
|
|
104
|
-
myQuery.Close
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
59
|
+
//マクロ実行処理//
|
|
108
|
-
|
|
109
60
|
Set EE = CreateObject("Excel.Application")
|
|
110
|
-
'本番はfalse
|
|
111
61
|
EE.Visible = False
|
|
112
62
|
EE.UserControl = False
|
|
113
|
-
|
|
114
|
-
Set RS1 = DB.OpenRecordset("SELECT M_仕入先会社マスタ.仕入先コード,M_仕入先会社マスタ.会社名 FROM M_仕入先会社マスタ WHERE (((M_仕入先会社マスタ.[CHK])=-1));")
|
|
115
63
|
|
|
64
|
+
’同じフォルダに『Macro』というファイルをセットし、そこから実行しています
|
|
116
|
-
|
|
65
|
+
Set wb = EE.Workbooks.Open("J:\シミュレート表_2018\Macro.xlsm")
|
|
117
66
|
Set ws = wb.Sheets("Sheet1")
|
|
118
|
-
|
|
67
|
+
’複数の仕入先を処理することがあるため、A1列に会社名をセットし、Do~Loop処理を行います
|
|
119
68
|
|
|
120
69
|
EE.Run "シミュ_Macro"
|
|
121
70
|
|
|
122
71
|
Set wb = Nothing
|
|
123
72
|
Set EE = Nothing
|
|
124
73
|
|
|
125
|
-
'wb.Close
|
|
126
|
-
'EE.Quit
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
'M_仕入先会社マスタのCHKをnullにする処理
|
|
130
|
-
|
|
131
|
-
DoCmd.SetWarnings False
|
|
132
|
-
DoCmd.OpenQuery ("Q_CHK_Clear")
|
|
133
|
-
DoCmd.SetWarnings True
|
|
134
|
-
|
|
135
74
|
MsgBox "END"
|
|
136
75
|
|
|
137
76
|
End Sub
|
|
138
|
-
|
|
77
|
+
|
|
139
78
|
```
|