[[20091027125654]] 『マクロ‐リストボックス』(レインボー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロ‐リストボックス』(レインボー)
 マクロ‐リストボックス(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)

x-men様 お礼がだいぶ遅くなりすみませんでした。
マクロ起動いたしました。本当にありがとうございます。
(レインボー)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.