【问题标题】:Excel VBA for Mac: ComboBox WorkaroundExcel VBA for Mac:组合框解决方法
【发布时间】:2015-01-04 22:17:11
【问题描述】:

我无法在 Mac 上的用户窗体上填充我的 ComboBox。

我创建了一个名为“nameList”的动态命名范围,其公式如下所示:

"=OFFSET('MEMBERS LIST'!$D$4,0,0,COUNTA('MEMBERS LIST'!$D:$D)-1)"

在 Sheet1(名称:HOME)上,我创建了一个宏,它调用了一个 UserForm(名称:PostForm),我在其中创建了一个 ComboBox(名称:username_Insert)。在 Windows 上,我只需转到“属性”框并在“行源”属性中键入“nameList”。这将使用我的动态名称列表填充 ComboBox。但是,当我尝试在 Mac 上阅读我的工作表时,列表显示为空。

我在代码中尝试了多种解决方案:

Private Sub PostForm_Initialize()
    'Populate Username combo box.
    'Me.username_Insert.List = [nameList]
    'Me.username_Insert.List = Range("nameList")
    'Me.username_Insert.List = Range([nameList])

    'Me.username_Insert.AddItem = [nameList]
End Sub

我不确定我是否在正确的 sub 中输入代码,或者我是否应该在以下 sub 中输入我的代码:Private Sub username_Insert_Change()

/*******已解决*******/

修改了代码以接收我拥有的其他动态列表,得到以下代码。实现到用户窗体代码中,就像一个魅力:

Private Sub UserForm_Activate()
    Dim nme As Range
    Dim ws As Worksheet

    Set ws = Sheets("Members List")
    For Each nme In ws.Range("nameList")
        Me.username_Insert.AddItem nme.Value
    Next nme

    Set ws = Sheets("SONY DATA")
    For Each nme In ws.Range("phoneList")
        Me.phone_Insert.AddItem nme.Value
    Next nme

    For Each nme In ws.Range("ampm")
        Me.daynight_Insert.AddItem nme.Value
    Next nme

    For Each nme In ws.Range("typeList")
        Me.type_Insert.AddItem nme.Value
    Next nme

End Sub

【问题讨论】:

    标签: excel macos vba combobox


    【解决方案1】:

    看起来您必须逐项填充组合框。 鉴于它是一个动态列表,我建议您将代码放在 Userform 的 Activate 事件中。 请注意,此事件是在用户窗体的代码模块中而不是在通用代码模块中找到的(并且应该放置代码)。

    Private Sub UserForm_Activate()
    Dim nme As Range
    Dim ws As Worksheet
    
    Set ws = Sheets("Members List")
        For Each nme In ws.Range("nameList")
            Me.username_Insert.AddItem nme.Value
        Next nme
    
    End Sub
    

    【讨论】:

    • 谢谢!像魅力一样工作!
    【解决方案2】:

    逐行添加项目工作,但可以更直接(和优雅)通过简单地在一行代码中使用所有值填充组合框的 LIST 属性来完成,如下所示:

    Private Sub Userform_Activate()
        username_Insert.List = Sheets("Members List").Range("nameList").value
    End sub
    

    您在最初的尝试中非常接近,您只需将 .value 添加到

    =Range("nameList")

    线。 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      相关资源
      最近更新 更多