简体   繁体   中英

Display content from listbox1 in listbox2 using multiselect and column count properties in MS-Access 2010

I am trying to take a user-selection from Listbox1 (multi-select enabled) to populate Listbox2 (no user selection in Listbox2 ). Listbox1 has 3 columns, and is displaying column(1). I want Listbox2 to display column(2) from Listbox1 user selections.

I have two tables: Summary_Data & Vendor_Parts I have one query: Vendor_PN_Query that is set to use a combo box selection of Vendor to filter to a specific vendor's list of PN's. (Cbo_Vendor) Column(0)=Vendor, Column(1)=PN, Column(2)=Pgm_Name

Cbo_Vendor selection saves to Summary_Data table field Vendor PN selection from Listbox1 saves to Summary_Data table field PN I need the data from Listbox2 to save to Summary_Data table field Pgm

Listbox1 shows PN field from Vendor_PN_Query , based on Cbo_Vendor user selection. User can select single or multiple PN's from this listbox by adding the checkmarks. Listbox2 is supposed to show the Pgm_Name(s) that is/are associated with the selected PN(s), and then record that information back into the Summary_Data table under the Pgm field.

I cannot find any code examples that actually work for this. When I was able to code to retrieve some data, I got a repeat of the vendor name (twice for each PN selected), and that was all, regardless of any column count or row source variations I used in my code.

Here is my current basic code, but his does not retrieve any data for Listbox2:

Private Sub Cbo_Vendor_AfterUpdate()    
    Me.Listbox1.Requery        
End Sub

Private Sub Cmd_Done_Click()

   Dim i As Integer    'Row Index

   If Listbox1.ListCount = 0 Then
       MsgBox "Please select at least one part number."
       Exit Sub
   End If

   For i = 0 To Listbox1.ListCount - 1
      If Listbox1.Selected(i) = True Then
          Listbox2.AddItem Listbox1.Selected(i)
      End If
   Next i

End Sub

Modified code based on http://www.iaccessworld.com/29540-2/ , but I still do not retrieve any results in listbox2.

Private Sub Cbo_Vendor_AfterUpdate()

   Me.Listbox1.Requery

End Sub

Private Sub Cmd_Done_Click()

'Transfer column 2 of selected items in listbox1 to listbox2

Dim i As Integer

  With Me.Listbox1

    For i = 0 To .ListCount - 1
       Me.Listbox2.AddItem (Selected.Column(2, i))
    Next i

End With

End Sub

I am finding examples online for everything from simple code like this to having to create class modules and temporary tables. Is it really this simple and I am missing something?

I finally have code that populates Listbox2 (although it populates in reverse order - not a huge deal). However, now I need to auto-select all items in Listbox2 and automatically save them to my table. The field in the table is set to value list and allows multiple values.

Here is my working code:

Dim i As Integer

For i = Listbox1.ListCount - 1 To 0 Step -1
  If Listbox1.Selected(i) = True Then
    Listbox2.AddItem Listbox1.Column(3, i)
  End If
Next I

Working Code:

Private Sub Cbo_Vendor_AfterUpdate()
   Me.Listbox1.Requery
End Sub

Private Sub Cmd_Done_Click()

'Transfer column 3 of selected items in listbox1 to listbox2
Dim i As Integer

For i = Listbox1.ListCount - 1 To 0 Step -1    'Code works but lists programs in reverse order & does not save to table.
  If Listbox1.Selected(i) = True Then
    Listbox2.AddItem Listbox1.Column(3, i)
  End If
Next I

End Sub

Private Sub Cmd_Save_Click()
    If Me.Dirty Then
        Me.Dirty = False
    End If
End Sub

I have code that now works to transfer selected items from Listbox1 to Listbox 2, without duplicates, and then saves to Table:

Private Sub Cmd_Done_Click()

'Transfer column 3 of selected items in listbox1 to listbox2
Dim i As Integer
Dim j As Integer
Dim strBlock As String
Dim x As Integer
Dim bool As Boolean

For j = Listbox2.ListCount - 1 To 0 Step -1
    Listbox2.Selected(i) = False
Next j

Me.Listbox2.RowSource = ""

For i = Listbox1.ListCount - 1 To 0 Step -1

    strBlock = Me.Listbox1.Column(3, i)

    If Listbox2.ListCount = 0 And strBlock <> "" Then
        If Listbox1.Selected(i) = True Then
          Listbox2.AddItem (strBlock)
          Listbox2.Selected(0) = True
        End If
    Else
        bool = False
         For x = Listbox2.ListCount - 1 To 0 Step -1
            If Listbox2.ItemData(x) <> strBlock Then
               If Listbox2.ItemData(x - 1) <> strBlock Then
                  bool = False
                  If Listbox1.Selected(i) = True Then
                     Listbox2.AddItem (strBlock)
                     Listbox2.Selected(x + 1) = True
                     Exit For
                  End If
               End If
            Else
                bool = True
                Exit For
            End If
        Next x
        End If
Next i
End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM