通过函数调用填充各种组合框

时间:2016-09-05 13:19:13

标签: excel vba excel-vba combobox

早上好!

我正在尝试通过使用函数来填充各种ComboBox来使我的代码更通用,但是,我很难做到这一点......

在UserForm中:

Private Sub UserForm_Initialize()    
    Call Lista_Vendedores
    ComboBox1.List = Lista_Vendedores    
End Sub

在模块中:

Public Function Lista_Vendedores() As Variant

Dim Lista As New Collection
Dim Cont_Vendedores As Integer

Cont_Vendedores = Plan1.Cells(1, 8).Value

Sheets("Plan1").Select

For i = 3 To Cont
    Lista (Row.Cells(i, 8))
    MsgBox Lista
Next i 

Set Lista_Vendedores = Lista
Set Lista = Nothing    

End Function

当我尝试运行代码时,没有任何反应,但是,没有显示任何错误。

2 个答案:

答案 0 :(得分:2)

您的代码可以简化很多。它不需要在函数中,只需按照以下示例给它一个范围:

用户窗体:

Private Sub UserForm_Initialize()
    ComboBox1.List = ThisWorkbook.Worksheets("Sheet1").Range("A1:A8")
End Sub

模块:

Public Sub ShowUserform()
    UserForm1.Show
End Sub

答案 1 :(得分:2)

你的代码犯了很多错误,虽然CallumDA33解决方案更好,但我认为你应该看看这个:

首先,您没有正确调用您的功能。子应该是:

Private Sub UserForm_Initialize()    
    ComboBox1.List = Lista_Vendedores    
End Sub

Call行不是必需的。 (并且几乎不需要关键字Call本身)。我真的不知道你的语法来自哪里。

  • Lista_Vendedores函数中,您没有正确使用Lista Collection
  • Cont未定义。您应该始终在模块的开头使用Option Explicit
  • 您不会影响该集合的任何价值。
  • 您还应该尽可能避免使用Select
  • List属性需要变量数组,而不是集合,因此函数应返回变量数组,而不是包含单个(空)集合对象的变量,因此我还更改了Lista的类型。 / LI>

遵循经过纠正但未经测试的代码:

Public Function Lista_Vendedores() As Variant()   

    Dim Lista As Variant()
    Dim Cont_Vendedores As Integer

    With Sheets("Plan1")

        Cont_Vendedores = .Cells(1, 8).Value
        Redim Lista(0 to Cont_Vendedores-3)

        For i = 3 To Cont_Vendedores
            Lista(i-3) = .Cells(i,8)
        Next i 
    End With

    Lista_Vendedores = Lista
End Function

编辑:修正错字