选择选项后,VBA Excel组合框不显示该值

时间:2013-02-18 19:56:44

标签: excel vba combobox clear populate

Private Sub ComboBox1_DropButtonClick()

    If ComboBox1.ListCount > 0 Then
    ActiveSheet.ComboBox1.Clear
    End If

    For N = 1 To ActiveWorkbook.Sheets.Count - 1
    ComboBox1.AddItem ActiveWorkbook.Sheets(N).Name
    Next N

End Sub

我是VBA的新手所以请耐心等待。我可能不会这样做是最好的开始。

代码将获取工作簿中每个工作表的名称(最后一个工作表除外)并将它们添加到组合框列表中。首先,每次单击下拉列表时,都会再次添加所有工作表名称,使列表在每次单击时继续增长。我的补救措施是在每次点击时首先清除组合框并重新填充。

但是,如果使用clear选项,则在进行选择时不会显示该值。不使用clear选项时显示正常。其他一切仍然有效,但我需要它来显示所选值,这样用户就不会感到困惑。

有没有更好的方法来完成我的需要?

编辑:如果重要,这不是用户形式,它只是一个直接位于工作表上的有效x组合框。

3 个答案:

答案 0 :(得分:1)

下面的东西会起作用。但是,我想问为什么每次有人点击它时你都想重新组合组合框。为什么不在工作簿打开或激活工作表时这样做?

Private Sub ComboBox1_DropButtonClick(ComboBox1 As ComboBox)
    Dim strSelected As String
    If ComboBox1.ListIndex > -1 Then
      strSelected = ComboBox1.List(ComboBox1.ListIndex)
    End If
    If ComboBox1.ListCount > 0 Then
      ActiveSheet.ComboBox1.Clear
    End If

    For N = 1 To ActiveWorkbook.Sheets.Count - 1
      ComboBox1.AddItem ActiveWorkbook.Sheets(N).Name
      If strSelected = ActiveWorkbook.Sheets(N).Name Then
        ComboBox1.ListIndex = N - 1
      End If
    Next N
End Sub

答案 1 :(得分:1)

这是一种非常奇怪的行为 - 但是当您在列表中选择项目时,会再次触发DopButtonClick事件。因此,刚刚分配的值将在第二次运行时.Clear清除。

此代码修复了它:

Private Sub ComboBox1_DropButtonClick()
    Dim strValue As String
    Dim n As Integer
    strValue = ComboBox1.Value

    If ComboBox1.ListCount > 0 Then
        ActiveSheet.ComboBox1.Clear
    End If

    For n = 1 To ActiveWorkbook.Sheets.Count - 1
        ComboBox1.AddItem ActiveWorkbook.Sheets(n).Name
    Next n
    ComboBox1.Value = strValue

End Sub

答案 2 :(得分:0)

很好的解决方案彼得。 就我而言,我列出了可以在两次组合框运行之间更改的项目列表。如果所选的组合框项目不在组合列表中,则在下一次运行时,显示以下行:

ComboBox1.Value = strValue

引发错误。

我发现声明了一个公共索引:

Public nr As Integer

并在组合框代码内进行计数以运行。每个按钮操作仅清除一次即可使其独立于列表更新而工作:

Private Sub ComboBox1_DropButtonClick()
Dim n As Integer

If nr = 0 Then
    ActiveSheet.ComboBox1.Clear
    nr = 1
Else
    nr = 0
End If

For n = 1 To ActiveWorkbook.Sheets.count - 1
    ComboBox1.AddItem ActiveWorkbook.Sheets(n).Name
Next n
End Sub