過去ログ

                                Page     601
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼選択した宛名ラベルだけを印刷したい  水無月 04/4/20(火) 13:58
   ┗Re:選択した宛名ラベルだけを印刷したい  クロ 04/4/21(水) 16:07

 ───────────────────────────────────────
 ■題名 : 選択した宛名ラベルだけを印刷したい
 ■名前 : 水無月
 ■日付 : 04/4/20(火) 13:58
 -------------------------------------------------------------------------
   こんにちは。
またまた困っています。どなたか教えてください。

一枚が3×8で計24片ある宛名ラベルに、客先の住所を印刷したいのです。でも住所録全部を印刷するのではなくて、選択した客先を必要な枚数だけ、指定した場所に印刷したいのです。

現在の状況を説明をします。

住所を選択する方法として、まずフォームを作成しました。そのフォームには非連結のテキストボックスを24個(横3、縦8)作って、そこに住所の主キーであるコードを入力するようにし、更にその24個のテキストボックスそれぞれの下に一つづつテキストボックスを作成し、そこには会社名を表示するようにしました。そしてコードを入力するテキストボックス24個すべてのイベントに下記のような構文を作りました。

Private Sub コード01_Exit(Cancel As Integer)

  Dim db As Database
  Dim rs As Recordset
  Dim strSQL As String
 
  Set db = CurrentDb
 
  strSQL = "SELECT * FROM 住所録 WHERE コード = '" & Me![コード01] & "'"
  Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
  
  If rs.EOF = False Then
    Me![会社名01] = rs![会社名]
  Else
    Me![会社名01] = Null
  End If
  
End Sub

これで、現在はフォームにコードを入力するとその下にコードと同じレコードの会社名が表示されます。
これならば、会社1が3枚必要ならば、3回コードを入力し、会社2は1枚ならば、その次にコードを1回入力し・・・とすれば必要なだけ選ぶことができます。

それでこれを印刷するのに、入力した場所と同じ箇所に印刷を行いたいのです。
つまり、フォーム上で左から3列目の上から2番目の位置にコードを入力したとしたら、宛名ラベルの同じ位置に印刷したいのです。

でも、どうすればいいのか分かりません。
どうかご教授宜しくお願いいたします。

 ───────────────────────────────────────  ■題名 : Re:選択した宛名ラベルだけを印刷したい  ■名前 : クロ  ■日付 : 04/4/21(水) 16:07  -------------------------------------------------------------------------
   ワークテーブルを作成して、追加クエリ(SQL)で[コード00]で抽出
したデータを24回 For...Next で繰り返して作成したワークテーブルに
送りそれをレコードソースとしたレポート(宛名ラベル)を作成しては
如何でしょうか?

ADOは不得手なのでDAOで...参考にしてみてください。

・参照設定でDAO 3.* Object Libraryチェックを入れてください。
・コード入力用のテキストボックス名は [コード1]のように0は抜く
・[会社名00]というテキストボックスは使用しません。
・ワークテーブル名:T_Work_Report
・元テーブル名:T_住所録
・元テーブルのコードのデータ型:テキスト型

適当なコマンドボタン(仮称:cmdBuild)に

Private Sub cmdBuild_Click()
Dim dbs As DAO.Database
Dim strSQL As String, strSQLDel
Dim i As Integer
Dim N As String

'ワークテーブルをリセット
strSQLDel = "DELETE T_Work_Report.* FROM T_Work_Report;"

 Set dbs = CurrentDb
 dbs.Execute strSQLDel
 dbs.Close

For i = 1 To 24

 'テキストボックス名に変数を付ける
 N = "コード" & i

 'テキストボックスの空欄判定 ※空欄になったら抜ける
 If Len(Nz(Me.Controls(N), "")) = 0 Then
  MsgBox i - 1 & "件のデータをワークテーブルにデータ転送しました。", vbInformation, "結果"
  Exit Sub
 Else
 '追加クエリ(SQL)
 strSQL = "INSERT INTO T_Work_Report" & _
        " SELECT T_住所録.*" & _
        " FROM T_住所録" & _
        " WHERE T_住所録.コード='" & Me.Controls(N) & "';"
       'コードが数値型なら...
        " WHERE T_住所録.コード=" & Me.Controls(N) & ";"

  Set dbs = CurrentDb
  dbs.Execute strSQL
  dbs.Close
 End If
Next i

MsgBox "24件のデータをワークテーブルにデータ転送しました。", vbInformation, "結果"

End Sub

後はワークテーブル(T_Work_Report)を利用してレポートを宛名ラベルウィザードで
作成すればいいかと思います。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 601