VBA 将所有列表框条目输出到单个单元格

VBA outputting all listbox entries to a single cell

我目前有一个表单,用户可以在表单中输入销售订单号和零件号,然后在单击提交按钮时将该信息提交给 sheet。我正在尝试做但目前失败的是能够输入单个销售订单号,但最多有 20 个零件号与该单个销售订单号相关联。

我正在尝试使用列表框执行此操作,用户将零件号信息输入表单字段,单击“添加”,然后将所有信息添加到列表框(该部分正在运行)。但是,当我在主窗体上单击提交时,sheet 仅填充列表框中的第一个条目。这是我必须将信息输入列表框的代码,

Private Sub Add_Part_Click()

PartInfo.AddItem "PartNo:" & PartNo & Space(10) & "Part Quantity:" & PartQnt & Space(10) & "Part Description:" & PartDesc
PartNo.Value = ""
PartQnt.Value = ""
PartDesc.Value = ""

End Sub

下面是我用来填充 sheet 表单信息的代码

    Private Sub Sales_Submit_Click()
    
    If SalesOrderNo = "" Then
    MsgBox "Missing Sales Order Number, Please ensure one is added before attempting to continue", vbCritical, "Missing Sales Order Number"
    Exit Sub
    End If
    
    If Len(SalesOrderNo) <> 7 Then
    MsgBox "Sales Order Number too short, please try again", vbOKOnly, "Sales Order Number Incorrect"
    Exit Sub
    End If
    
    Dim TargetRow As Integer
    
    'Sets the default position to add data from
    TargetRow = Sheets("Backend").Range("O9").Value + 1
    
    'Populates the form data into relevant columns
    Sheets("Sales Order Log").Range("Sales_Data_Start").Offset(TargetRow, 1).Value = SalesOrderNo
    Sheets("Sales Order Log").Range("Sales_Data_Start").Offset(TargetRow, 2).Value = Customer
    Sheets("Sales Order Log").Range("Sales_Data_Start").Offset(TargetRow, 3).Value = SiteName
    Sheets("Sales Order Log").Range("Sales_Data_Start").Offset(TargetRow, 4).Value = GMNo
    Sheets("Sales Order Log").Range("Sales_Data_Start").Offset(TargetRow, 5).Value = PartInfo.list
    Sheets("Sales Order Log").Range("Sales_Data_Start").Offset(TargetRow, 6).Value = SalesDate
End Sub

我想尝试并拥有将列表框内容全部提交到 sheet 上的单个单元格中的功能。

谢谢

您需要手动遍历列表中的所有条目。建议:使用 With-Statement 使您的代码更具可读性。

Dim parts As String
For i = LBound(Me.ListBox1.List) To UBound(Me.PartInfo.List)
    parts = parts & IIf(parts = "", "", ", ") & Me.PartInfo.List(i, 0)
Next

With Sheets("Sales Order Log").Range("Sales_Data_Start")
    .Offset(TargetRow, 1).Value = SalesOrderNo
    ' (...)
    .Offset(TargetRow, 5).Value = parts
End With