通过函数调用填充各种combobox

早上好!

我试图使我的代码更通用的使用函数来填充各种combobox,但是,我有麻烦做到这一点…

在用户窗体中:

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 

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

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

窗体:

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

模块:

 Public Sub ShowUserform() UserForm1.Show End Sub 

你在代码中犯了很多错误,而CallumDA33解决scheme更好,我想你应该看看这个:

首先,你没有正确地调用你的函数。 子应该是:

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

Call线路是没有必要的。 (和关键字Call本身几乎不需要)。 我真的不知道你的语法来自哪里。

  • Lista_Vendedores函数中,您没有正确使用Lista Collection
  • Cont未定义。 您应该始终在模块开始时使用Option Explicit
  • 您不会影响collections的任何价值。
  • 你也应该尽量避免使用Select
  • List属性期望一个变体数组,而不是一个集合,所以函数应该返回一个变体数组,而不是包含单个(空)集合对象的变体,所以我也改变了Lista的types。

遵循更正但未经testing的代码:

 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 

编辑:纠正错字