web-dev-qa-db-ja.com

フォームアクセスvbaのリストボックスに複数の値を追加する

Accessのリストボックスの複数の列に値を追加する際に問題が発生しました。私は次のような解決策を試しました: 複数の列を持つリストボックスにアイテムを追加する そしてこれ: vba listbox multicolumn add [duplicate] 、しかしそれは機能しません。私の場合、リストボックスには「リスト」というプロパティがありません。コンパイルエラーがあります:

enter image description here

Private Sub cmdAddPosition_Click()

Dim i As Integer

Me.lstAddPositions.ColumnCount = 7

If Me.txtAddPos.Value = i And i > 0 And i < 50 Then
     Me.lstAddPositions.AddItem (Me.txtAddPos.Value)
    'Me.lstAddPositions.AddItem(Me.txtAddPos.Value,(i))
     Me.lstAddPositions.List(0, i) = Me.txtAddPos.Value
    'Me.lstAddPositions.Column(0, i) = Me.txtAddPos.Value 'adding number of position
    'Me.lstAddPositions.Column(2, i) = Me.lstAddHidden.Column(0, 0) 'adding titel
End If

Me.lstAddPositions.Requery

End Sub

この状況で私は何ができますか?

5
Beacze

行ソースが値リストの場合、アクセスフォームの複数列のバインドされていないリストボックスにアイテムを追加する例を次に示します。値リストに配置する文字列を作成して追加する必要があります。

Private Sub cmdAddPosition_Click()
    Dim i As Integer

    Me.lstAddPositions.ColumnCount = 7

    If Me.txtAddPos.Value = i And i > 0 And i < 50 Then
         Me.lstAddPositions.AddItem "Col1" & "," & "col2" & "," & "Col3" & "," & _
         "Col4" & "," & "Col5" & "," & "col6" & "," & "col7"  &";"     
    End If

    Me.lstAddPositions.Requery
End Sub
5
Zaider

プロパティを選択

行ソースタイプ=>値リスト

コード:

ListbName.ColumnCount = 2

ListbName.PASSWORD "value column1; value column2"

1
KONG

まず、リストボックスに次のプロパティを設定します

行ソースタイプ:値リスト列数:2

リストボックスの名前が次のようになっているとします。listName2つの異なる列に2つの異なる要素を追加し、2つの異なる文字列がに格納されているとします。

次に、String1とString2はコードに従います

コード:

Dim strName as string
strName=String1&";"&String2
Me.listName.addItem strName
1

私はザイダーの答えを完全には理解していませんでしたが、彼のサンプルを取ると、私はバインドされていないリストボックスで機能するこれで終わりました:

Me.listbox2.AddItem (Me.listbox1.Column(0) & ";" & Me.listbox1.Column(1))
1
Kristian

リストボックスに複数の列を追加する方法の完全な例を次に示します。

テーブルを作成するSQL:

DROP TABLE Test;
CREATE TABLE Test (TestID AUTOINCREMENT(1, 1),
                   TestName TEXT,
                   TestDescription TEXT,
        CONSTRAINT TestPKey PRIMARY KEY (TestID));
INSERT INTO Test (TestName, TestDescription)
          VALUES ('Test A', 'Testing Record A')";
INSERT INTO Test (TestName, TestDescription)
          VALUES ('Test B', 'Testing Record B')";
INSERT INTO Test (TestName, TestDescription)
          VALUES ('Test C', 'Testing Record C')";

ボタンイベントコード:

Private Sub TestButton_Click()
  Dim rst As DAO.Recordset
  Dim fld As DAO.Field
  Dim lb As ListBox
  Dim rowStr As String

  Set rst = CurrentDb.OpenRecordset("Test")
  Set lb = Me.TestListBox

  ' Set the number of listbox columns to reflect recordset fields
  lb.ColumnCount = rst.Fields.Count
  ' Set the row source type to Value List
  lb.RowSourceType = "Value List"
  ' Erase the listbox data so we can populate it
  lb.RowSource = ""

  ' If ColumnHeads property is enabled, then first record is field
  ' names.  Lets populate those.
  If lb.ColumnHeads Then
    rowStr = ""
    ' Build a string for each record
    For Each fld In rst.Fields
      rowStr = rowStr & replace(fld.Name,",","") & ","
    Next
    ' Strip final comma
    rowStr = Left(rowStr, Len(rowStr) - 1)
    ' Add each record (all fields) at once.
    lb.AddItem rowStr
  End If

  ' Loop through each record
  Do Until rst.EOF
    ' Build a record string and add it
    rowStr = ""
    For Each fld In rst.Fields
      rowStr = rowStr & replace(fld.Value,",","") & ","
    Next
    rowStr = Left(rowStr, Len(rowStr) - 1)
    lb.AddItem rowStr
    rst.MoveNext
  Loop

  ' Close and release objects
  rst.Close
  Set fld = Nothing
  Set rst = Nothing
  Set lb = Nothing
End Sub

リストボックスの内容を変更したい場合は、リストボックスのrecordsourceプロパティを吹き飛ばして再構築する必要があります。私の経験では、複数の列が含まれているときに個々の行を変更しようとすると、機能しません。

うまくいけば、それが役立つでしょう。

0
DHW