Excel VBA用户表单列表框条件逻辑未按预期工作

Excel VBA用户表单列表框条件逻辑未按预期工作,excel,vba,listbox,userform,Excel,Vba,Listbox,Userform,我有一个带有列表框的Userform,我使用条件逻辑来确定列表框中选定或未选定项目的输出值。问题是当文本框(Tbl\u AliasName)为空时,代码执行以下操作: ElseIf .Selected(k) = True And Tbl_AliasName = vbNullString Then lstbxRow = lstbxRow + 1 Worksheets("New TRAX").Cells(lstbxRow, 3) = Trim

我有一个带有列表框的Userform,我使用条件逻辑来确定列表框中选定或未选定项目的输出值。问题是当文本框(
Tbl\u AliasName
)为空时,代码执行以下操作:

ElseIf .Selected(k) = True And Tbl_AliasName = vbNullString Then
            lstbxRow = lstbxRow + 1

                Worksheets("New TRAX").Cells(lstbxRow, 3) = Trim(Cells(2, 1).Value2) & "." & .Column(1, k)
但是如果
Tbl_AliasName
不是空的,则代码不执行任何操作,但它应该执行以下操作:

 ElseIf .Selected(k) = True And Tbl_AliasName <> vbNullString Then
            lstbxRow = lstbxRow + 1

                Worksheets("New TRAX").Cells(lstbxRow, 3) = Tbl_AliasName & "." & .Column(1, k)
有没有更好的方法来判断项目是否被选中,因为我觉得按照我在循环中构建项目的方式,如果没有选中所有项目,代码将抛出错误?提前感谢您的任何想法、答案或建议

注意:单击userform上的另一个按钮可填充列表框,该按钮调用以下子项:

Sub FillLstBxCols()  

    Dim ListBx_Target As MSForms.ListBox
    Dim rngSource As Range
    Dim LR As Long

    If Cells(2, 1).Value2 <> vbNullString Then
        LR = Worksheets("New TRAX").Cells(Rows.Count, 2).End(xlUp).Row


        'Set reference to the range of data to be filled
        Set rngSource = Worksheets("New Trax").Range("A" & 2 & ":" & "B" & LR)

        'Fill the listbox
        Set ListBx_Target = UserForm_Finder.ListBx_TblsCols
        With ListBx_Target
            .RowSource = rngSource.Address
        End With
    End If
End Sub
子fillstbxcols()
将ListBx_目标设置为MSForms.ListBox
变暗RNG源作为范围
变暗LR为长
如果单元格(2,1).Value2为空字符串,则
LR=工作表(“新TRAX”)。单元格(Rows.Count,2)。结束(xlUp)。行
'将引用设置为要填充的数据范围
设置rngSource=工作表(“新Trax”)。范围(“A”&2&“:”&“B”&LR)
“填写列表框
设置ListBx_Target=UserForm_Finder.ListBx_TblsCols
使用ListBx_目标
.RowSource=rngSource.Address
以
如果结束
端接头

如果没有样本数据和预期结果,很难说,但我认为这就是您想要的:

Private Sub btnConcat_Click()

    Dim ws As Worksheet
    Dim bSelected As Boolean
    Dim sConcat As String
    Dim i As Long, lRowIndex As Long

    Set ws = ActiveWorkbook.Sheets("New TRAX")
    lRowIndex = 1
    bSelected = False
    sConcat = Trim(Me.txtConcat.Text)
    If Len(sConcat) = 0 Then sConcat = Trim(ws.Cells(2, "A").Value)
    If Len(sConcat) = 0 Then
        MsgBox "You must Search for a Table or Column first.", vbExclamation, "Error Encountered"
        Exit Sub
    End If

    For i = 0 To Me.ListBx_TblsCols.ListCount - 1
        If Me.ListBx_TblsCols.Selected(i) Then
            If bSelected = False Then
                bSelected = True
                ws.Range("C2", ws.Cells(ws.Rows.Count, "C")).Clear  'clear previous concat results (delete this line if not needed)
            End If
            lRowIndex = lRowIndex + 1
            ws.Cells(lRowIndex, "C").Value = sConcat & "." & Me.ListBx_TblsCols.List(i)
        End If
    Next i

    If bSelected = False Then MsgBox "Must select at least one item from the list"

End Sub

您的列表框是如何填充的?@tigeravatar单击另一个调用其Sub的按钮即可填充它:
Sub fillstbxcols()Dim ListBx_Target As MSForms.listbox Dim rngSource As Range Dim LR Long If Cells(2,1)。Value2 vbNullString然后LR=Worksheets(“New TRAX”)。Cells(Rows.Count,2)。结束(xlUp).行集rngSource=工作表(“新Trax”).范围(“A”&2&“:”和“B”&LR)设置ListBx_Target=UserForm_Finder.ListBx_TblsCols和ListBx_Target.RowSource=rngSource.Address如果End Sub
你就是男人!唯一缺少的是,当我在文本框中实际放置一个值时,它只会从列表框的第一列中提取一个值。因此我将
Me.ListBx_TblsCols.List(i)
更改为
Me.ListBx_TblsCols.Column(1,i)
,效果非常好!您的解决方案比我的解决方案优雅得多。我是一名自学成才的程序员,(VBA,R,C#)(也是T-SQL/PL#SQL;尽管两者都不是真正的编程语言)而且我只做了8个月,所以我有很多东西要学。
Sub FillLstBxCols()  

    Dim ListBx_Target As MSForms.ListBox
    Dim rngSource As Range
    Dim LR As Long

    If Cells(2, 1).Value2 <> vbNullString Then
        LR = Worksheets("New TRAX").Cells(Rows.Count, 2).End(xlUp).Row


        'Set reference to the range of data to be filled
        Set rngSource = Worksheets("New Trax").Range("A" & 2 & ":" & "B" & LR)

        'Fill the listbox
        Set ListBx_Target = UserForm_Finder.ListBx_TblsCols
        With ListBx_Target
            .RowSource = rngSource.Address
        End With
    End If
End Sub
Private Sub btnConcat_Click()

    Dim ws As Worksheet
    Dim bSelected As Boolean
    Dim sConcat As String
    Dim i As Long, lRowIndex As Long

    Set ws = ActiveWorkbook.Sheets("New TRAX")
    lRowIndex = 1
    bSelected = False
    sConcat = Trim(Me.txtConcat.Text)
    If Len(sConcat) = 0 Then sConcat = Trim(ws.Cells(2, "A").Value)
    If Len(sConcat) = 0 Then
        MsgBox "You must Search for a Table or Column first.", vbExclamation, "Error Encountered"
        Exit Sub
    End If

    For i = 0 To Me.ListBx_TblsCols.ListCount - 1
        If Me.ListBx_TblsCols.Selected(i) Then
            If bSelected = False Then
                bSelected = True
                ws.Range("C2", ws.Cells(ws.Rows.Count, "C")).Clear  'clear previous concat results (delete this line if not needed)
            End If
            lRowIndex = lRowIndex + 1
            ws.Cells(lRowIndex, "C").Value = sConcat & "." & Me.ListBx_TblsCols.List(i)
        End If
    Next i

    If bSelected = False Then MsgBox "Must select at least one item from the list"

End Sub