質問編集履歴

2

ミスタイプを修正しました

2020/04/09 14:40

投稿

Chiochan
Chiochan

スコア4

test CHANGED
File without changes
test CHANGED
@@ -88,7 +88,7 @@
88
88
 
89
89
  If Cntl1 <> 1 Then GoTo Fin01 '「印刷」ボタン(Cntl1=1)ではなく
90
90
 
91
- ' 「印刷」ボタン(Cntl1=2)が押されると終了
91
+ ' 「終了」ボタン(Cntl1=2)が押されると終了
92
92
 
93
93
 
94
94
 
@@ -158,7 +158,7 @@
158
158
 
159
159
 
160
160
 
161
- ' 次回印刷の最初の番号を Lst + 1 とし、その最後の番号は、今回の増加分を加えた番号として
161
+ ' 次回印刷の最初の番号を Lst + 1 とし、その最後の番号は、今回の増加分を加えた番号として
162
162
 
163
163
  ' UserForm2 に表示します
164
164
 

1

ソースコードを整理して、注釈を記しました。 また、Tab でインデントを付けました。反映してくれればいいのですが・・・

2020/04/09 14:40

投稿

Chiochan
Chiochan

スコア4

test CHANGED
File without changes
test CHANGED
@@ -1,22 +1,238 @@
1
+ ソースコードを整理して、注釈を記しました。
2
+
3
+ また、Tab でインデントを付けました。反映してくれればいいのですが・・・
4
+
5
+
6
+
7
+ 問題は、以下のマクロで、Np = 2 かつ NPrt = 2 の時
8
+
9
+  If Np = NPrt Then GoTo Adr02 で、ループから抜けてくれないことです
10
+
11
+
12
+
13
+ ### 該当のソースコード
14
+
15
+
16
+
17
+ ソースコード
18
+
19
+
20
+
21
+ Public Fst, Lst, LstP, NPrt, Cntl1 As Variant
22
+
23
+ Option Explicit
24
+
25
+
26
+
27
+ Sub Macro1()
28
+
29
+ '
30
+
31
+ ' Macro1 Macro
32
+
33
+ '
34
+
35
+ ' Keyboard Shortcut: Ctrl+z
36
+
37
+ '
38
+
39
+ Dim Np, No, INp, INo, NpM, Mesage01, Cntl2, Incr As Variant
40
+
41
+
42
+
43
+ Fst = 1 '印刷範囲の最初の番号
44
+
45
+ Lst = 1 '印刷範囲の最後の番号
46
+
47
+ LstP = 0 '前回印刷した範囲の最後の番号
48
+
49
+ NPrt = 2 '印刷部数
50
+
51
+
52
+
53
+
54
+
55
+ Adr01:
56
+
57
+
58
+
59
+ UserForm2.Label3.Caption = "前回印刷の最後の番号は " & LstP & " です"
60
+
61
+
62
+
63
+ ' UserForm2 で処理に必要な値を取得します
64
+
65
+ ' TextBox1~3 に、今回印刷のデフォルト値、あるいは候補値を表示して、
66
+
67
+ ' それらを修正させるか、あるいはそのまま続行する(「印刷」ボタンを押す)
68
+
69
+
70
+
71
+ ' UserForm2 では、「終了」ボタンが押されると、Cntl1 に 2 が代入され
72
+
73
+ '  「印刷」ボタンが押されると、Cntl1 に 1 が代入されます
74
+
75
+
76
+
77
+ UserForm2.TextBox1.Value = Fst
78
+
79
+ UserForm2.TextBox2.Value = Lst
80
+
81
+ UserForm2.TextBox3.Value = NPrt
82
+
83
+
84
+
85
+ UserForm2.Show
86
+
87
+
88
+
89
+ If Cntl1 <> 1 Then GoTo Fin01 '「印刷」ボタン(Cntl1=1)ではなく
90
+
91
+ ' 「印刷」ボタン(Cntl1=2)が押されると終了
92
+
93
+
94
+
95
+ For Np = 1 To NPrt ' 指定された印刷部数(NPrt)まで繰り返す
96
+
97
+
98
+
99
+ For No = Fst To Lst ' 指定された最初の番号から最後の番号まで印刷を繰り返す
100
+
101
+ INp = Np * 7 ' ここでは、印刷の代わりに、変数の値を確認
102
+
103
+ INo = No
104
+
105
+ Cells(INo, INp) = "No = " & No ' No の値を表示
106
+
107
+ Cells(INo, INp + 1) = "Np = " & Np ' Np の値を表示
108
+
109
+ Cells(INo, INp + 2) = "NPrt = " & NPrt ' NPrt の値を表示
110
+
111
+ Next No
112
+
113
+
114
+
115
+ Cells(INo, INp + 3) = "Np2 = " & Np ' Np の値を再表示
116
+
117
+ Cells(INo, INp + 4) = "NPrt2 = " & NPrt ' NPrt の値を再表示
118
+
119
+
120
+
121
+ If Np = NPrt Then ' 必要部数を印刷したら終了(次の印刷の要否確認は不要)
122
+
123
+ GoTo Adr02 ' NPrt が 2 で、Np = 2 ならループを抜けたい
124
+
125
+ Else
126
+
127
+ Cells(INo, INp + 5) = "Np3 = " & Np ' Np の値を再々表示
128
+
129
+ End If
130
+
131
+
132
+
133
+
134
+
135
+ If NPrt = 1 Then ' 必要部数(NPrt)が 1 なら確認は不要(ループを抜ける)
136
+
137
+ GoTo Adr02
138
+
139
+ Else
140
+
141
+ Cells(INo, INp + 6) = "Np4 = " & Np ' Np の値を再々々表示
142
+
143
+ NpM = Np + 1
144
+
145
+ Mesage01 = NpM & " 部目の印刷を行いますか"
146
+
147
+ Cntl2 = MsgBox(Mesage01, vbOKCancel)
148
+
149
+ End If
150
+
151
+
152
+
153
+ If Cntl2 = vbCancel Then GoTo Adr02
154
+
155
+
156
+
157
+ Next Np ' 外側のループの最終行
158
+
159
+
160
+
161
+ ' 次回印刷の最初の番号を Lst + 1 とし、その最後の番号は、今回の増加分を加えた番号として。
162
+
163
+ ' UserForm2 に表示します
164
+
165
+
166
+
167
+ Adr02:
168
+
169
+
170
+
171
+ LstP = Lst
172
+
173
+ Incr = Lst - Fst
174
+
175
+ Fst = Lst + 1
176
+
177
+ Lst = Fst + Incr
178
+
179
+ GoTo Adr01
180
+
181
+
182
+
183
+ Fin01:
184
+
185
+
186
+
187
+ MsgBox "処理を終了します"
188
+
189
+
190
+
191
+ End Sub
192
+
193
+
194
+
195
+
196
+
197
+ ### 試したこと
198
+
199
+
200
+
201
+ NPrt が2のとき、Mesage01 を表示するメッセージボックスが2回表示されます
202
+
203
+ (2回目の MsgBox の表示内容は、「3 回目の印刷を行いますか」です)
204
+
205
+ なお、上記の「Np2 =」、「Np3 =」、「Np4 =」で表示した Np の値は、いずれも、2 になっています。
206
+
207
+ つまり、If Np = NPrt Then GoTo Adr02 でも、Np のループから抜けていないようです・・・
208
+
209
+
210
+
211
+ ### 補足情報(FW/ツールのバージョンなど)
212
+
213
+
214
+
215
+ ここにより詳細な情報を記載してください。
216
+
1
217
  ### 前提・実現したいこと
2
218
 
3
- if文の誤動作について
4
-
5
219
 
6
220
 
7
221
  ここに質問の内容を詳しく書いてください。
8
222
 
223
+ (例)PHP(CakePHP)で●●なシステムを作っています。
224
+
225
+ ■■な機能を実装中に以下のエラーメッセージが発生しました。
226
+
227
+
228
+
9
229
  ### 発生している問題・エラーメッセージ
10
230
 
11
231
 
12
232
 
13
- 簡単なマクロで、If文が正しく判断してくれません。
14
-
15
-
16
-
17
233
  ```
18
234
 
19
- エラーメッセージ:特にありません
235
+ エラーメッセージ
20
236
 
21
237
  ```
22
238
 
@@ -26,165 +242,11 @@
26
242
 
27
243
 
28
244
 
245
+ ```ここに言語名を入力
246
+
29
247
  ソースコード
30
248
 
31
-
32
-
33
- Public Fst, Lst, LstP, NPrt, Cntl1 As Variant
34
-
35
- Option Explicit
36
-
37
-
38
-
39
- Sub Macro1()
40
-
41
- '
249
+ ```
42
-
43
- ' Macro1 Macro
44
-
45
- '
46
-
47
- ' Keyboard Shortcut: Ctrl+z
48
-
49
- '
50
-
51
- Dim Np, No, INp, INo, NpM, Mesage01, Cntl2, Incr As Variant
52
-
53
-
54
-
55
- Fst = 1
56
-
57
- Lst = 1
58
-
59
- LstP = 0
60
-
61
- NPrt = 2
62
-
63
-
64
-
65
-
66
-
67
- Adr01:
68
-
69
-
70
-
71
- UserForm2.Label3.Caption = "?O?????????c???????@" & LstP & "?@???"
72
-
73
-
74
-
75
- UserForm2.TextBox1.Value = Fst
76
-
77
- UserForm2.TextBox2.Value = Lst
78
-
79
- UserForm2.TextBox3.Value = NPrt
80
-
81
-
82
-
83
- UserForm2.Show
84
-
85
-
86
-
87
- If Cntl1 <> 1 Then GoTo Fin01
88
-
89
-
90
-
91
- For Np = 1 To NPrt
92
-
93
-
94
-
95
- For No = Fst To Lst
96
-
97
-
98
-
99
- Sheets("???`3????(??)").Select
100
-
101
- Range("'???`3????(??)'!D3").Value = No
102
-
103
- Application.Calculate
104
-
105
-
106
-
107
- Sheets("????????").Select
108
-
109
- ' ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
110
-
111
- ' IgnorePrintAreas:=False
112
-
113
- ' Sheets("??????^").Select
114
-
115
- ' ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
116
-
117
- ' IgnorePrintAreas:=False
118
-
119
-
120
-
121
- INp = Np * 3 + 5
122
-
123
- INo = No
124
-
125
-
126
-
127
- Cells(INo, INp) = "No = " & No
128
-
129
- Cells(INo, INp + 1) = "Np = " & Np
130
-
131
- Cells(INo, INp + 2) = "Pr = " & NPrt
132
-
133
-
134
-
135
- Next No
136
-
137
-
138
-
139
- If Np = NPrt Then Exit For
140
-
141
- If NPrt > 1 Then
142
-
143
-
144
-
145
- NpM = Np + 1
146
-
147
- Mesage01 = NpM & " ????????????"
148
-
149
- Cntl2 = MsgBox(Mesage01, vbOKCancel)
150
-
151
-
152
-
153
- If Cntl2 = vbCancel Then Exit For
154
-
155
-
156
-
157
- End If
158
-
159
-
160
-
161
- Next Np
162
-
163
-
164
-
165
- LstP = Lst
166
-
167
- Incr = Lst - Fst
168
-
169
- Fst = Lst + 1
170
-
171
- Lst = Fst + Incr
172
-
173
- GoTo Adr01
174
-
175
-
176
-
177
- Fin01:
178
-
179
-
180
-
181
- MsgBox "??????I???????"
182
-
183
-
184
-
185
- End Sub
186
-
187
-
188
250
 
189
251
 
190
252
 
@@ -192,9 +254,7 @@
192
254
 
193
255
 
194
256
 
195
- 一応、動作はしてくれるのですが、NPrtが2のとき、Mesage01のメッセージボックスが3回表示されます
196
-
197
- Mesage01の内容は、「3 回目の印刷ますか」です
257
+ ここに問題に対して試したこと記載してくださ
198
258
 
199
259
 
200
260
 
@@ -203,53 +263,3 @@
203
263
 
204
264
 
205
265
  ここにより詳細な情報を記載してください。
206
-
207
- ### 前提・実現したいこと
208
-
209
-
210
-
211
- ここに質問の内容を詳しく書いてください。
212
-
213
- (例)PHP(CakePHP)で●●なシステムを作っています。
214
-
215
- ■■な機能を実装中に以下のエラーメッセージが発生しました。
216
-
217
-
218
-
219
- ### 発生している問題・エラーメッセージ
220
-
221
-
222
-
223
- ```
224
-
225
- エラーメッセージ
226
-
227
- ```
228
-
229
-
230
-
231
- ### 該当のソースコード
232
-
233
-
234
-
235
- ```ここに言語名を入力
236
-
237
- ソースコード
238
-
239
- ```
240
-
241
-
242
-
243
- ### 試したこと
244
-
245
-
246
-
247
- ここに問題に対して試したことを記載してください。
248
-
249
-
250
-
251
- ### 補足情報(FW/ツールのバージョンなど)
252
-
253
-
254
-
255
- ここにより詳細な情報を記載してください。