如何使用范围中的每个唯一值填充用户表单中的组合框,按字母顺序排序?

时间:2016-05-19 12:55:25

标签: excel-vba userform vba excel

我将构建一个用户窗体,以便在Excel 2013中调用宏来从电子表格中恢复某些值,我需要根据现有值填充组合框。按范围填充很容易,工作正常,但当然它们都混乱并经常多次重复。简而言之,我得到了这个:

Charlie
Quebec
Echo
Zulu
Alpha
Quebec

......当我想要的是:

Alpha
Charlie
Echo
Quebec
Zulu

我已经为每个源范围设置了动态范围。

处理它的最有效方法是什么?

编辑:更多细节。

数据集保存在"Saved Schedules"工作表中,每个工作表都设置为一行。目前我正在使用Vessel Name列( C )。我们的想法是选择过滤器来缩小列表范围,然后在表单顶部的Voyage Code中选择特定的航程。 (右边的黄色字段预览数据,以便操作员看到他们即将加载的内容。)本质上,基本数据在工作表中,由用户窗体中的过滤器选项即时过滤,以及生成的航次代码被送到Voyage Code组合框进行选择。

Voyage restore form

编辑:我已经尝试过Doug Coats'建议编辑如下,以适用于我的表格:

再次编辑:更正了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组合框,也许?

1 个答案:

答案 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