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

回答編集履歴

3

書式の改善

2020/10/15 07:01

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -87,6 +87,7 @@
87
87
  End Sub
88
88
  ```
89
89
  イミディエイトの結果(印刷設定で変わります。)
90
+
90
91
  ```
91
92
  360
92
93
  3951
@@ -94,12 +95,13 @@
94
95
  360
95
96
  3951
96
97
  7542
97
- ```
98
+ ```
99
+
98
100
  3列目は左から7542(TWIPS)の位置ということになります。(567TWIPS≒1cm)
99
101
 
100
102
  レポートの「グループ化と並び替え」で下記の順で並び替えを昇順に設定します
101
- 顧客コード(テーブルの主キーフィールド名)
103
+ - 顧客コード(テーブルの主キーフィールド名)
102
- Num
104
+ - Num
103
105
 
104
106
  あとは詳細セクションのフォーマット時のイベントプロシージャを下記のように記述します。
105
107
 
@@ -112,4 +114,4 @@
112
114
  End Sub
113
115
  ```
114
116
 
115
- 3列目判定は余裕をもって Me.Left > 7000 としましたが、Debug.Print Me.Leftの結果を元に調整してください。
117
+ 3列目判定は余裕をもって `Me.Left > 7000` としましたが、`Debug.Print Me.Left` の結果を元に調整してください。

2

コード追記

2020/10/15 07:01

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -60,4 +60,56 @@
60
60
 
61
61
  グループ毎の連番は下記を参考に。
62
62
 
63
- [グループ毎連番を自動入力する関数 - hatena chips](https://hatenachips.blog.fc2.com/blog-entry-428.html)
63
+ [グループ毎連番を自動入力する関数 - hatena chips](https://hatenachips.blog.fc2.com/blog-entry-428.html)
64
+
65
+ サンプルコード追記
66
+ ---
67
+ 簡単なサンプルを作成してみました。
68
+
69
+ 複数シールの出力は下記の方法にしました。
70
+ 1.b. クエリを使う方法
71
+
72
+ レポートのレコードソースのクエリは下記になります。
73
+ テーブル1は実際のテーブル名にしてください。
74
+
75
+ ```sql
76
+ SELECT テーブル1.*, T_Num.Num FROM テーブル1, T_Num
77
+ WHERE T_Num.Num<=[箱のシール枚数];
78
+ ```
79
+
80
+ また、現在何列目かは、Me.Left で取得する方法にしました。
81
+ Me.Left で用紙の左からの距離を取得できます。
82
+
83
+ 詳細セクションのフォーマット時に下記のように記述すると、イミディエイトウィンドウに結果が出力されます。
84
+ ```vba
85
+ Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
86
+ Debug.Print Me.Left
87
+ End Sub
88
+ ```
89
+ イミディエイトの結果(印刷設定で変わります。)
90
+ ```
91
+ 360
92
+ 3951
93
+ 7542
94
+ 360
95
+ 3951
96
+ 7542
97
+ ```
98
+ 3列目は左から7542(TWIPS)の位置ということになります。(567TWIPS≒1cm)
99
+
100
+ レポートの「グループ化と並び替え」で下記の順で並び替えを昇順に設定します
101
+ 顧客コード(テーブルの主キーフィールド名)
102
+ Num
103
+
104
+ あとは詳細セクションのフォーマット時のイベントプロシージャを下記のように記述します。
105
+
106
+ ```vba
107
+ Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
108
+ If Me.Left > 7000 And Me.Num = 1 And Me.箱のシール枚数 = 2 Then
109
+ Me.NextRecord = False
110
+ Me.PrintSection = False
111
+ End If
112
+ End Sub
113
+ ```
114
+
115
+ 3列目判定は余裕をもって Me.Left > 7000 としましたが、Debug.Print Me.Leftの結果を元に調整してください。

1

説明追記

2020/10/15 06:55

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -40,4 +40,24 @@
40
40
 
41
41
  [NewRowOrCol プロパティ (Access) | Microsoft Docs](https://docs.microsoft.com/ja-jp/office/vba/api/Access.Section.NewRowOrCol)
42
42
 
43
- 以上を組み合わせてコードを書いてみてください。それでうまくいかないなら、できたところまでのコードを提示してうまくいかない部分を質問してください。
43
+ 以上を組み合わせてコードを書いてみてください。それでうまくいかないなら、できたところまでのコードを提示してうまくいかない部分を質問してください。
44
+
45
+
46
+ おまけ
47
+ ---
48
+ もしデータの出力順を変更してもいいのなら、
49
+ 枚数2のデータが連続すると、3列目の空白も連続することになり、用紙が無駄になる。
50
+ 枚数1のレコード内で連番を取得(入力)
51
+ 枚数2のレコード内で連番を取得(入力)
52
+ としておいて、この連番で並び替えを設定しておけば、
53
+
54
+ 1列目 2列目 3列目
55
+ 枚数1 枚数2 枚数2
56
+ 枚数1 枚数2 枚数2
57
+ ・・・
58
+
59
+ というように出力されて空白シールが最小限にできます。
60
+
61
+ グループ毎の連番は下記を参考に。
62
+
63
+ [グループ毎連番を自動入力する関数 - hatena chips](https://hatenachips.blog.fc2.com/blog-entry-428.html)