Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


51243 / 76738 ←次へ | 前へ→

【30367】Re:リスト選択からのデータ移動
発言  ichinose  - 05/10/26(水) 8:23 -

引用なし
パスワード
   ▼うくれれ さん:
おはようございます。
>こんにちは。
>帳票印刷のプログラムを作っています。
>
>リストボックスで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

これで試してください。

0 hits

【30365】リスト選択からのデータ移動 うくれれ 05/10/25(火) 23:59 質問
【30367】Re:リスト選択からのデータ移動 ichinose 05/10/26(水) 8:23 発言
【30409】Re:リスト選択からのデータ移動 うくれれ 05/10/26(水) 22:27 お礼

51243 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free