[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロ‐リストボックス』(レインボー)
マクロ‐リストボックス(sheet1のリスト)で選択した行を、 テキストボックスとチェックボックスに反映し、上書きするやり方を教えてください
初めて質問させていただきます。マクロ初心者2003_Windows2000を使用しています。 ユーザーフォームにリストボックスを作り(sheet1のリスト)、その1つを選択いたします。 コマンドボタン1を押すと、選択したデータの一部がテキストボックスに反映するようにしています。 ここまではできるのですが、 テキストボックスに選択されたデータの上書き(文字や数字(プラス、マイナス)日付を上書きもしくは、 Deleteキーで消したもの)を、sheet1のその行のリストに反映させるコマンドボタン2がうまく作動しません。 また、1つチェックボックスを入れているのですが、ユーザーフォームへの読み込み(チェックをつけり消したり)、 sheet1への反映がうまくいきません。
下記コードが長くなってしまいすみませんが、どなたかお力を貸していただきたくよろしくお願いいたします。
(リストボックスに出るsheet1のデータ) A8から題(管理番号や品名など)がはじまり、Uまであります。 (Fは、管理番号なため必ず値が入りますが、I以降Uまでは空白のセルも存在しています) 表は伸縮いたします。
(ユーザーフォーム) リストボックスには、sheet1のA9〜U9の最終行までのデータを引用しています。 コマンドボタン1を押すと、 テキストボックス9=O (空白、数字たとえば10など) テキストボックス10=P (空白、マイナスも含む数字たとえば-10など) テキストボックス11=Q (空白、日付) テキストボックス12=R (空白、数字) テキストボックス14=U (空白、コメント欄のため文字や数字など) が、リストボックスで選択した行のものが反映されます。
コマンドボタン2を押すと、 テキストボックス9=O (空白、数字たとえば10など) テキストボックス10=P (空白、マイナスも含む数字たとえば-10など) テキストボックス11=Q (空白、日付) テキストボックス12=R (空白、数字) テキストボックス14=U (空白、コメント欄のため文字や数字など) deleteキーで空白にしたり、上書きしたものを、 リストボックスで選択したsheet1のその行に上書きしたいのですが、うまくいきません。
チェックボックス1は、sheet1のS行で、リストボックスで選択された行のS行に、 終了と書かれていたら、チェックボックスのチェックがついて表示され、書かれていなかったらチェックされず表示されます。 ユーザーフォーム上でチェックをつけたりはずしたりした際、 常にその選択行に反映させるようにしたいのですが、作動しません。
(コード)
Private Sub UserForm_Initialize()
Dim r As Range Set r = Sheets("Sheet1").Range("A8").CurrentRegion.Offset(1) Set r = r.Resize(r.Rows.Count - 1)
With ListBox1 .ColumnWidths = "0;0;0;0;0;50;50;50;0;0;0;0;0;0;0;0;0;0;0;0;0" .ColumnCount = 21 .RowSource = r.Address(A8, U) End With
End Sub
Private Sub CommandButton1_Click()
If ListBox1.ListIndex <> -1 Then TextBox9.Value = ListBox1.List(ListBox1.ListIndex, 14) TextBox10.Value = ListBox1.List(ListBox1.ListIndex, 15) TextBox12.Value = ListBox1.List(ListBox1.ListIndex, 17) TextBox14.Value = ListBox1.List(ListBox1.ListIndex, 20) End If
If Not IsEmpty(ListBox1.List(ListBox1.ListIndex, 16)) Then TextBox11.Value = Format(CDate(ListBox1.List(ListBox1.ListIndex, 16)), "m/d") Else TextBox11.Value = "" End If
If ListBox1.List(ListBox1.ListIndex, 18) = "終了" Then
CheckBox1.Value = True Else CheckBox1.Value = False End If
End Sub
Private Sub CheckBox1_Click()
Dim l As Range
Set l = Sheets("Sheet1").Range("A8").CurrentRegion.Offset(1)
Set l = l.Resize(l.Rows.Count - 1)
If CheckBox1.Value = True Then
l(ListBox1.ListIndex + 1, 19).Value = "終了" Else l(ListBox1.ListIndex + 1, 19).Value = "" End If
End Sub
Private Sub CommandButton2_Click()
If ListBox1.ListIndex <> -1 Then Dim r As Range Set r = Sheets("Sheet1").Range("A8").CurrentRegion.Offset(1) Set r = r.Resize(r.Rows.Count - 1)
If IsDate(TextBox11.Value) Or TextBox11.Value = "" Then r(ListBox1.ListIndex + 1, 17) = TextBox11.Value End If r(ListBox1.ListIndex + 1, 15) = TextBox9.Value r(ListBox1.ListIndex + 1, 16) = TextBox10.Value r(ListBox1.ListIndex + 1, 18) = TextBox12.Value r(ListBox1.ListIndex + 1, 21) = TextBox14.Value End If End Sub
<コマンドボタン2>と<チェックボックス1>がリストボックスで選択したSheet1のその行に反映されない点で困っています。 ながながと書きすみませんが、ご教示よろしくお願いいたします。
1) CommandButton1_Click で >If Not IsEmpty(ListBox1.List(ListBox1.ListIndex, 16)) Then IsEmpty 関数は機能していますか?
2) ListBox1.ListIndex + 1 が違っている ということですか? > Sheet1のその行に反映されない点で困っています。 どのように期待通りに反映されていないのかがわかりません。 (seiya)
大分書き換えてしまいましたが、このような事であってますか?
Private Sub UserForm_Initialize() Dim tbl With Sheets("Sheet1") tbl = .Range(.Range("F9"), .Range("F9").End(xlDown)).EntireRow.Columns("F:H").Value End With With Me.ListBox1 .ColumnCount = 3 .ColumnWidths = "50;50;50" .List = tbl End With End Sub
Private Sub CommandButton1_Click() Dim tbl, n As Long With Sheets("Sheet1") tbl = .Range(.Range("F9"), .Range("F9").End(xlDown)).EntireRow.Columns("A:U").Value End With With Me n = .ListBox1.ListIndex + 1 If n > 0 Then .TextBox9.Value = tbl(n, 14) .TextBox10.Value = tbl(n, 15) .TextBox12.Value = tbl(n, 17) .TextBox14.Value = tbl(n, 20) If tbl(n, 16) = "" Then .TextBox11.Value = "" Else .TextBox11.Value = Format(CDate(tbl(n, 16)), "m/d") End If If tbl(n, 18) = "終了" Then .CheckBox1.Value = True Else .CheckBox1.Value = False End If End If End With End Sub
Private Sub CheckBox1_Click() With Sheets("Sheet1").Range("R8").Offset(Me.ListBox1.ListIndex + 1) If Me.CheckBox1.Value = True Then .Value = "終了" Else .Value = "" End If End With End Sub
Private Sub CommandButton2_Click() Dim n As Long n = Me.ListBox1.ListIndex + 1 If n > 0 Then With Sheets("Sheet1").Rows(8 + n).Columns("A:U") If IsDate(Me.TextBox11.Value) Or Me.TextBox11.Value = "" Then .Cells(17) = Me.TextBox11.Value End If .Cells(14) = Me.TextBox9.Value .Cells(15) = Me.TextBox10.Value .Cells(17) = Me.TextBox12.Value .Cells(20) = Me.TextBox14.Value End With End If End Sub
(x-men)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.