1

手動でエントリを追加した 2 列のリストボックスがあります。

.AddItem (potato)
.List(.ListCount - 1, 1) = bananaTbx.Text

ユーザーがユーザーフォームを閉じると、すべてのデータが失われるため、データをシートに保存する保存と終了ボタンが必要です。ただし、リストのサイズは動的であり、シートのマスター リストに継続的に追加されるため、特定のセルに保存することはできません。

データを抽出するために次のようなことをしようとしました:

Dim i As Integer

'loop through each row number in the list
For i = 0 To Userform1.Listbox1.ListCount - 1
    'create sequence 1,1,2,2,3,3,4,4 ... to reference the current list row
    j = Application.WorksheetFunction.RoundDown(i + 0.5, 0)
    'create sequence 0,1,0,1,0,1,0,1 ... to reference current column in list
    If Len(CStr(i / 2)) > 1 Then
        k = 0
    Else
        k = 1
        Sheets("Data").Range("A1" & ":" & "A" & i).Value = Userform1.ListBox1.List(j, k)
    End If

エラー:

1004 Object defined error

これを適切に、またはより効率的な方法で行うにはどうすればよいですか?

4

1 に答える 1

0

ユーザーフォームの複数列のリストボックスから値/データを抽出する方法を示すために、単純なユーザーフォームを作成しました

いくつかのコントロールを備えた単純なユーザーフォームを作成することから始めます

ユーザーフォーム

プロジェクトに新しいものを追加しModule1、以下のコードを貼り付けます

Sub TestUserForm()
    UserForm1.Show
    Unload UserForm1
End Sub

プロジェクト エクスプローラー (VBE) で、右クリックしてUserForm1ヒットします。View Code

以下のコードをコピーして貼り付けます

Private Sub CommandButton1_Click()

    With ListBox1
        .AddItem TextBox1.Value
        .List(.ListCount - 1, 1) = TextBox2.Value
    End With

End Sub

Private Sub CommandButton2_Click()

    Dim ws As Worksheet
    ' create a results sheets if you do not already have one
    Set ws = Sheets("Results")

    Dim nextAvailableRow As Long
    Dim i As Long
    For i = 0 To ListBox1.ListCount - 1
        nextAvailableRow = ws.Range("A" & Rows.Count).End(xlUp).Row + 1
        ws.Range("A" & nextAvailableRow) = ListBox1.Column(0, i)
        ws.Range("B" & nextAvailableRow) = ListBox1.Column(1, i)
    Next i

    Me.Hide
End Sub

新しいスプレッドシートを作成して名前を付けるResults

TestUserFormマクロを実行する

サンプルデータをリストに追加してSaveボタンをクリック

結果

于 2013-08-23T12:13:13.503 に答える