質問編集履歴
2
ミスタイプを修正しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -43,7 +43,7 @@
|
|
43
43
|
UserForm2.Show
|
44
44
|
|
45
45
|
If Cntl1 <> 1 Then GoTo Fin01 '「印刷」ボタン(Cntl1=1)ではなく
|
46
|
-
' 「
|
46
|
+
' 「終了」ボタン(Cntl1=2)が押されると終了
|
47
47
|
|
48
48
|
For Np = 1 To NPrt ' 指定された印刷部数(NPrt)まで繰り返す
|
49
49
|
|
@@ -78,7 +78,7 @@
|
|
78
78
|
|
79
79
|
Next Np ' 外側のループの最終行
|
80
80
|
|
81
|
-
' 次回印刷の最初の番号を Lst + 1 とし、その最後の番号は、今回の増加分を加えた番号として
|
81
|
+
' 次回印刷の最初の番号を Lst + 1 とし、その最後の番号は、今回の増加分を加えた番号として、
|
82
82
|
' UserForm2 に表示します
|
83
83
|
|
84
84
|
Adr02:
|
1
ソースコードを整理して、注釈を記しました。 また、Tab でインデントを付けました。反映してくれればいいのですが・・・
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,15 +1,9 @@
|
|
1
|
-
|
1
|
+
ソースコードを整理して、注釈を記しました。
|
2
|
-
|
2
|
+
また、Tab でインデントを付けました。反映してくれればいいのですが・・・
|
3
3
|
|
4
|
-
ここに質問の内容を詳しく書いてください。
|
5
|
-
|
4
|
+
問題は、以下のマクロで、Np = 2 かつ NPrt = 2 の時
|
5
|
+
If Np = NPrt Then GoTo Adr02 で、ループから抜けてくれないことです
|
6
6
|
|
7
|
-
簡単なマクロで、If文が正しく判断してくれません。
|
8
|
-
|
9
|
-
```
|
10
|
-
エラーメッセージ:特にありません
|
11
|
-
```
|
12
|
-
|
13
7
|
### 該当のソースコード
|
14
8
|
|
15
9
|
ソースコード
|
@@ -25,61 +19,70 @@
|
|
25
19
|
'
|
26
20
|
Dim Np, No, INp, INo, NpM, Mesage01, Cntl2, Incr As Variant
|
27
21
|
|
28
|
-
Fst = 1
|
22
|
+
Fst = 1 '印刷範囲の最初の番号
|
29
|
-
Lst = 1
|
23
|
+
Lst = 1 '印刷範囲の最後の番号
|
30
|
-
LstP = 0
|
24
|
+
LstP = 0 '前回印刷した範囲の最後の番号
|
31
|
-
NPrt = 2
|
25
|
+
NPrt = 2 '印刷部数
|
32
26
|
|
33
27
|
|
34
28
|
Adr01:
|
35
29
|
|
36
|
-
UserForm2.Label3.Caption = "
|
30
|
+
UserForm2.Label3.Caption = "前回印刷の最後の番号は " & LstP & " です"
|
31
|
+
|
37
|
-
|
32
|
+
' UserForm2 で処理に必要な値を取得します
|
33
|
+
' TextBox1~3 に、今回印刷のデフォルト値、あるいは候補値を表示して、
|
34
|
+
' それらを修正させるか、あるいはそのまま続行する(「印刷」ボタンを押す)
|
35
|
+
|
36
|
+
' UserForm2 では、「終了」ボタンが押されると、Cntl1 に 2 が代入され
|
37
|
+
' 「印刷」ボタンが押されると、Cntl1 に 1 が代入されます
|
38
|
+
|
38
39
|
UserForm2.TextBox1.Value = Fst
|
39
40
|
UserForm2.TextBox2.Value = Lst
|
40
41
|
UserForm2.TextBox3.Value = NPrt
|
41
42
|
|
42
43
|
UserForm2.Show
|
44
|
+
|
45
|
+
If Cntl1 <> 1 Then GoTo Fin01 '「印刷」ボタン(Cntl1=1)ではなく
|
46
|
+
' 「印刷」ボタン(Cntl1=2)が押されると終了
|
43
47
|
|
44
|
-
|
48
|
+
For Np = 1 To NPrt ' 指定された印刷部数(NPrt)まで繰り返す
|
45
49
|
|
50
|
+
For No = Fst To Lst ' 指定された最初の番号から最後の番号まで印刷を繰り返す
|
51
|
+
INp = Np * 7 ' ここでは、印刷の代わりに、変数の値を確認
|
52
|
+
INo = No
|
53
|
+
Cells(INo, INp) = "No = " & No ' No の値を表示
|
54
|
+
Cells(INo, INp + 1) = "Np = " & Np ' Np の値を表示
|
55
|
+
Cells(INo, INp + 2) = "NPrt = " & NPrt ' NPrt の値を表示
|
56
|
+
Next No
|
57
|
+
|
58
|
+
Cells(INo, INp + 3) = "Np2 = " & Np ' Np の値を再表示
|
59
|
+
Cells(INo, INp + 4) = "NPrt2 = " & NPrt ' NPrt の値を再表示
|
60
|
+
|
61
|
+
If Np = NPrt Then ' 必要部数を印刷したら終了(次の印刷の要否確認は不要)
|
62
|
+
GoTo Adr02 ' NPrt が 2 で、Np = 2 ならループを抜けたい
|
63
|
+
Else
|
64
|
+
Cells(INo, INp + 5) = "Np3 = " & Np ' Np の値を再々表示
|
65
|
+
End If
|
66
|
+
|
67
|
+
|
68
|
+
If NPrt = 1 Then ' 必要部数(NPrt)が 1 なら確認は不要(ループを抜ける)
|
69
|
+
GoTo Adr02
|
70
|
+
Else
|
71
|
+
Cells(INo, INp + 6) = "Np4 = " & Np ' Np の値を再々々表示
|
46
|
-
|
72
|
+
NpM = Np + 1
|
73
|
+
Mesage01 = NpM & " 部目の印刷を行いますか"
|
74
|
+
Cntl2 = MsgBox(Mesage01, vbOKCancel)
|
75
|
+
End If
|
47
76
|
|
77
|
+
If Cntl2 = vbCancel Then GoTo Adr02
|
78
|
+
|
48
|
-
|
79
|
+
Next Np ' 外側のループの最終行
|
49
|
-
|
50
|
-
Sheets("???`3????(??)").Select
|
51
|
-
Range("'???`3????(??)'!D3").Value = No
|
52
|
-
Application.Calculate
|
53
80
|
|
54
|
-
Sheets("????????").Select
|
55
|
-
' ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
|
56
|
-
' IgnorePrintAreas:=False
|
57
|
-
|
81
|
+
' 次回印刷の最初の番号を Lst + 1 とし、その最後の番号は、今回の増加分を加えた番号として。
|
58
|
-
' ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
|
59
|
-
|
82
|
+
' UserForm2 に表示します
|
83
|
+
|
84
|
+
Adr02:
|
60
85
|
|
61
|
-
INp = Np * 3 + 5
|
62
|
-
INo = No
|
63
|
-
|
64
|
-
Cells(INo, INp) = "No = " & No
|
65
|
-
Cells(INo, INp + 1) = "Np = " & Np
|
66
|
-
Cells(INo, INp + 2) = "Pr = " & NPrt
|
67
|
-
|
68
|
-
Next No
|
69
|
-
|
70
|
-
If Np = NPrt Then Exit For
|
71
|
-
If NPrt > 1 Then
|
72
|
-
|
73
|
-
NpM = Np + 1
|
74
|
-
Mesage01 = NpM & " ????????????"
|
75
|
-
Cntl2 = MsgBox(Mesage01, vbOKCancel)
|
76
|
-
|
77
|
-
If Cntl2 = vbCancel Then Exit For
|
78
|
-
|
79
|
-
End If
|
80
|
-
|
81
|
-
Next Np
|
82
|
-
|
83
86
|
LstP = Lst
|
84
87
|
Incr = Lst - Fst
|
85
88
|
Fst = Lst + 1
|
@@ -88,15 +91,17 @@
|
|
88
91
|
|
89
92
|
Fin01:
|
90
93
|
|
91
|
-
MsgBox "
|
94
|
+
MsgBox "処理を終了します"
|
92
95
|
|
93
96
|
End Sub
|
94
97
|
|
95
98
|
|
96
99
|
### 試したこと
|
97
100
|
|
98
|
-
|
101
|
+
NPrt が2のとき、Mesage01 を表示するメッセージボックスが2回表示されます
|
99
|
-
|
102
|
+
(2回目の MsgBox の表示内容は、「3 回目の印刷を行いますか」です)
|
103
|
+
なお、上記の「Np2 =」、「Np3 =」、「Np4 =」で表示した Np の値は、いずれも、2 になっています。
|
104
|
+
つまり、If Np = NPrt Then GoTo Adr02 でも、Np のループから抜けていないようです・・・
|
100
105
|
|
101
106
|
### 補足情報(FW/ツールのバージョンなど)
|
102
107
|
|