【问题标题】:Listbox selection to edit worksheet列表框选择以编辑工作表
【发布时间】:2016-08-31 08:29:31
【问题描述】:

这个问题指的是另一个:Listbox populate with specifc rows

在这种情况下,列表框将动态填充工作表数据库的数据。

问题是: 如何在列表框中选择一行(名称)并编辑其对工作表的引用?生病解释。我想选择列表框的一行,然后选择组合框的一个项目并单击按钮确认,这样组合框的项目将填充工作表上的某个单元格。

这是用户表单

userform2

【问题讨论】:

  • 用一个用户表单,用 ListBox、ComoBox 和代码填充它,你有什么要分享的吗?使用您的代码尝试编辑您的帖子

标签: vba listbox


【解决方案1】:

您可以将以下代码添加到您的用户表单代码窗格中:

Private Sub CommandButton1_Click()
    Dim Data() As Variant '<--| use an array to store data to eventually fill destination worksheet cells
    Dim destSht As Worksheet '<--| this will be set to the "destination" worksheet
    Dim i As Long

    With Me
        With .ComboBox1 '<--| refer to combobox (change "ComboBox1" with your actual name)
            If .ListIndex = -1 Then Exit Sub '<--| exit sub if no value selected
            Set destSht = Worksheets(.value) '<--| set the "destination" worksheet to the one with the name selected in Combobox
        End With

        With .ListBox1 '<--| refer to listbox (change "ListBox1" with your actual name)
            If .ListIndex = 0 Then Exit Sub '<--| exit sub if selected the listbox header row
            ReDim Data(1 To 1, 1 To .ColumnCount) '<--resize data array to match listbox columns number
            For i = 1 To .ColumnCount '<--| loop through listbox columns
                Data(1, i) = .List(.ListIndex, i - 1) '<--| fill data array with selected row data (Listbox.List is zero-based)
            Next i
        End With

        With destSht '<--| refer to "destination" sheet
            .Cells(.Rows.Count, 1).End(xlUp).Offset(1).Resize(, 5).value = Data '<--| paste listbox selected row values to selected worksheet after its column "A" last non blank cell
        End With
    End With
End Sub

您应该添加对“目标”工作表设置的最小处理,以防止无效名称处理

【讨论】:

  • @AdrianVillicana:你度过难关了吗?
  • 取得进展。谢谢@user3598756
  • 不客气。然后请将答案标记为已接受。谢谢你。也请给This Post提供适当的反馈。
【解决方案2】:

我尽我所能。不是很优雅。 sheet2 和 listbox 上的第一列是一个连续的数字,所以当单击 listbox 行时,我将该数字复制到 sheet3 中,这样我就可以识别 sheet2 上的行。

Private Sub ListBox1_Click()
    If ListBox1.ListIndex <> -1 Then
        With Worksheets("Hoja3").Range("A1")
            .Value = ListBox1.Value
        End With
    End If
End Sub

然后在 sheet3 和 sheet2 上搜索匹配的内容。

Private Sub asignar_Click()
    Dim z As Integer
    z = Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To z
    If Cells(i, 1) = Sheets("Hoja3").Range("A1") Then
    Sheets("Hoja2").Cells(i, 21) = destinos.Value
    Sheets("Hoja2").Cells(i, 20) = ""
    End If
Next i

它有效。问题是在此之后我无法刷新列表框。

感谢您对 user3598756 感兴趣。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-11
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    相关资源
    最近更新 更多