我将构建一个用户窗体,以便在Excel 2013中调用宏来从电子表格中恢复某些值,我需要根据现有值填充组合框。按范围填充很容易,工作正常,但当然它们都混乱并经常多次重复。简而言之,我得到了这个:
Charlie
Quebec
Echo
Zulu
Alpha
Quebec
......当我想要的是:
Alpha
Charlie
Echo
Quebec
Zulu
我已经为每个源范围设置了动态范围。
处理它的最有效方法是什么?
编辑:更多细节。
数据集保存在"Saved Schedules"
工作表中,每个工作表都设置为一行。目前我正在使用Vessel Name
列( C )。我们的想法是选择过滤器来缩小列表范围,然后在表单顶部的Voyage Code
中选择特定的航程。 (右边的黄色字段预览数据,以便操作员看到他们即将加载的内容。)本质上,基本数据在工作表中,由用户窗体中的过滤器选项即时过滤,以及生成的航次代码被送到Voyage Code
组合框进行选择。
再次编辑:更正了init子名称。
Private Sub UserForm_Initialize()
Me.Combo_Rest_VoyageCode.List = wsSaves.Range("SAVE_VoyageCode").Value ' VOYAGE CODE
Dim Ray, i As Integer, j As Integer, Temp As String
With Combo_Rest_VoyageCode
Ray = Application.Transpose(.List)
For i = 1 To UBound(Ray) - 1
For j = i To UBound(Ray)
If Ray(j) < Ray(i) Then
Temp = Ray(i)
Ray(i) = Ray(j)
Ray(j) = Temp
End If
Next j
Next i
.List = Ray
End With
End Sub
但是,它并没有取得更大的成功。有没有什么不适用于ActiveX组合框,也许?
答案 0 :(得分:0)
您可以更改此代码以轻松使用combox
这是一个很棒的链接
http://dailydoseofexcel.com/archives/2004/05/12/sorting-listboxes/
Private Sub CommandButton2_Click()
Dim Ray, i As Integer, j As Integer, Temp As String
With ListBox1
Ray = Application.Transpose(.List)
For i = 1 To UBound(Ray) - 1
For j = i To UBound(Ray)
If Ray(j) < Ray(i) Then
Temp = Ray(i)
Ray(i) = Ray(j)
Ray(j) = Temp
End If
Next j
Next i
.List = Ray
End With
End Sub