|
▼うくれれ さん:
おはようございます。
>こんにちは。
>帳票印刷のプログラムを作っています。
>
>リストボックスでMultiSelectプロパティで値を「2(拡張(連続)選択を許可する)」にしてます。
ユーザーフォームに貼り付けたリストボックスですか?
こういう説明を怠ってしまうと私にとっても うくれれさんにとっても
マイナスの要因ですよ!!
ユーザーフォームだと思って・・・、
>
>シート1に以下のような表があります(リストボックス上では5行目から表示)。
>またシート2に帳票があります。
> A B C D E ・・・CX
>1
>2
>3
>4
>5 氏名 登録番号 発効日 項目1 項目2・・・項目n
>6 あああ 1111 170516 1 0 0
>7 いいい 2222 170926 0 1 0
>8 ううう 3333 171020 0 0 1
> (以下随時追加される)
>
>リストボックスで選択して(例えばシート1の6行目)コマンドボタンをクリックしたときに、
>
>選択した行の
>1.A6はシート2のA5
>2.B6はシート2のB2
>3.D6は値が1のときはシート2のH8〜J8の外枠に罫線を引く。
>4.E6はシート2のテキストボックス1に値を入れる。
>5.n6はシート2のテキストボックス2に値を入れる。
>5.シート2の帳票を印刷
>以下選択した行について繰り返し。
>
>といったようなことはどのようにすれば出来ますでしょうか。
>よろしくおねがいします。
シート1というシート名を持つシートに上記のデータがあったとします。
ユーザーフォーム(Userform1)には、
リストボックス --- Listbox1
コマンドボタン----- Commandbutton1
が配置されています。
尚、最初は今抱えているブックにこれから提示するコードをいきなりコピー
するのはなく、新規ブックにサンプルシートとデータを作成し、
この新規ブックにユーザーフォームを作成して試してください。
標準モジュールには
'=============================================
sub main()
userform1,show
end sub
userform1のモジュールには
'==========================================================
Const Link_rw As Long = 6 'リストボックスとリンクするシート1の開始行
'===================================================================
Private Sub UserForm_Initialize()
Dim rng As Range
With Worksheets("シート1")
Set rng = .Range(.Cells(Link_rw, 1), .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 3)
With ListBox1
.ColumnHeads = True '見出しも表示する設定
.ColumnCount = 3 'シート1の3列分表示
.RowSource = ""
If rng.Row > Link_rw - 1 Then 'データがあれば、リストボックスに登録
.RowSource = rng.Address(, , , True)
End If
End With
End With
Set rng = Nothing
End Sub
'================================================================
Private Sub CommandButton1_Click()
Dim rw As Long
With ListBox1
For idx = 0 To .ListCount - 1
If .Selected(idx) Then '選択されていたら?
rw = Link_rw + idx 'シート1での行番号をセット
Call pr_data(rw) '一行分の印刷処理
End If
Next idx
End With
End Sub
'==================================================================
Sub pr_data(rw As Long)
' 機能:シート1の指定された行のデータをシート2にレイアウトし、
' 印刷する
' 入力データ: rw---- シート1の印刷対象行
'
MsgBox Worksheets("シート1").Cells(rw, 1).Value
'今は、A列のデータを表示しているだけです。
'ここにrwという行を表す変数を使用して印刷するシート1の行を
'シート2にレイアウトして印刷するコードを書きます
End Sub
これで試してください。
|
|