2016-05-19 2 views
0

Я собираюсь создать пользовательскую форму, которая будет вызываться макросом в Excel 2013, чтобы восстановить некоторые значения из электронной таблицы, и мне нужно, чтобы поля со списком заполнялись на основе существующих значений. Заселение по диапазону достаточно простое, это нормально работает, но, конечно, они все перепутаны и часто дублируются несколько раз. Короче говоря, я получаю это:Как заполнить combobox в пользовательской форме с каждым уникальным значением из диапазона, отсортированным по алфавиту?

Charlie 
Quebec 
Echo 
Zulu 
Alpha 
Quebec 

... когда то, что я хочу это:

Alpha 
Charlie 
Echo 
Quebec 
Zulu 

У меня уже есть динамические диапазоны, установленные для каждого из диапазонов источника.

Что было бы самым эффективным способом его обработки?

EDIT: Подробнее.

Наборы данных хранятся на листе "Saved Schedules", каждый из которых задан в строке. На данный момент я использую столбец Vessel Name (C). Идея состоит в том, чтобы выбрать фильтры, чтобы сузить список вниз, затем выберите конкретный рейс в Voyage Code вверху формы. (Желтые поля справа просматривают данные, поэтому операторы видят, что они собираются загрузить.) По сути, базовые данные находятся на листе, фильтруются «на лету» параметрами фильтра в пользовательской форме и в результате рейса коды, поданные в поле со списком Voyage Code для выбора.

Voyage restore form

EDIT: Я попытался предложение Дуги шубы, отредактирован следующим образом применить к моей форме:

EDIT СНОВА: Исправленная инициализации юга имя.

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

Это отфильтровать доступные строки источника на листе для управляемой выборки для combobox - я уточню детали в вопросе для справки. –

ответ

0

быстрый поиск Google нашел тонны полезной информации

вы можете изменить этот код, чтобы работать с comboxes легко

здесь отличная ссылка

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 
+0

Вы должны добавить что-нибудь, чтобы удалить дубликаты ... – Jochen

+0

Хорошо, я работаю над тем, чтобы заставить его работать вместо публикации шаблона общего назначения, а затем работать с дубликатами –

+0

Я боюсь, что вы переоцените мои знания - я поставил этот код в форме '_Initialize', отредактировал его, чтобы соответствовать моим элементам управления и источникам, а элементы управления все остаются решительно пустыми. Я поставлю отредактированный код в вопросе, чтобы вы могли понять, что я имею в виду. –

 Смежные вопросы

  • Нет связанных вопросов^_^