powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сортировка в ComboBox
25 сообщений из 33, страница 1 из 2
Сортировка в ComboBox
    #39814935
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добрый день всем знатокам Access
Озадачился вот каким вопросов, который вроде бы и простой, но что-то слишком много движений получается
Есть комбо, в него надо собрать все VBComponents из VBE

Собираю
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Dim i As Long
Dim strSource As String

For i = 1 To Application.VBE.ActiveVBProject.VBComponents.Count
     strSource = strSource & Application.VBE.ActiveVBProject.VBComponents.Item(i).Name & ";"
Next i

cmbVBМодули.RowSourceType = "Value List"
cmbVBМодули.RowSource = Left(strSource, Len(strSource) - 1)


цикл собирает компоненты по их item(number), при этом в самом комбике отображаются имена Name, соответственно, не в алфавитном порядке, а в порядке item(number). Хотелось бы сделать, чтобы были в алфавитном порядке.
Вижу сделать так: подвязать под комбик таблицу (или создать временную), заполнить значения в нее, а в комбик выдать Query с таблицы с нужной сортировкой. Мне кажется это несколько мудрено, может есть более простой способ сделать сортировку перед отображением данных в комбике?

Всем заранее спасибо за ценные мысли
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39814937
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так все работает, но уж больно много замутов, чтобы просто заполнить комбик
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Dim i As Long

CurrentDb.Execute "Delete * from tblСервисErrHandlerChange_cmbVBМодули"
For i = 1 To Application.VBE.ActiveVBProject.VBComponents.Count
     CurrentDb.Execute "" _
          & "Insert into tblСервисErrHandlerChange_cmbVBМодули " _
               & "(VBComponentID, VBComponentName) " _
          & "Values " _
               & "(" & i & ",'" & Application.VBE.ActiveVBProject.VBComponents.Item(i).Name & "')"
Next i

cmbVBМодули.RowSourceType = "Table/Query"
cmbVBМодули.RowSource = "" _
          & "Select VBComponentName " _
          & "From tblСервисErrHandlerChange_cmbVBМодули " _
          & "Order By VBComponentName"
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39814943
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов Александр,
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39814949
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург, благодарю, отличное решение!
Прошел в справку, вот на этот note внимание как-то не обращал: "You can also set the RowSourceType property with a user-defined function. The function name is entered without a preceding equal sign (=) and without the trailing pair of parentheses. You must provide specific function code arguments to tell Access how to fill the control."
Век живи, век учись
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815219
У ComboBox-а есть метод AddItem. Он добавляет новое значение в список-источник, причем можно вставить в указанное место.
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815222
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий, это мне известно. тогда к этому addItem надо добавить механизм определения места вставки в соответствии с уже имеющимся и оставшимися значениями
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815223
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пока оставил с привязанной табличкой, потом как-нить переделаю :-) с Вами согласен полностью - способов куча, просто некоторые из них не очень оптимальные по количеству "печатания" и иной "суеты"
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815225
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов Александрпока оставил с привязанной табличкой? На каждый комбо табличек не напасёшь!
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815226
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов Александр, И к тому же, если хочется использовать всё таки такое решение, то можно использовать Recordset от ADO. Его создавать и заполнять в коде, а далее напрямую присваивать как источник строк комбо.
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815377
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
For i = 1 To Application.VBE.ActiveVBProject.VBComponents.Count
     strSource = strSource & "union all select """ + Application.VBE.ActiveVBProject.VBComponents.Item(i).Name + """ as n"
Next i

strSource = "select n from (" + Right(strSource, Len(strSource) - 9) + ") as x order by n"
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815450
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222, и легко выскакиваем за пределы указанные в спецификации...
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815451
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222,
Там ограничение на количество юнионов не очень большое, так что в общем случае не сработает
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815588
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург, полностью согласен. поэтому чуть позже все переделаю как должно быть
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815590
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург, имеешь ввиду такой вариант?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Dim objRs As ADODB.Recordset
Dim arrПараметры(2) As String
Dim i As Long

arrПараметры(0) = "Один"
arrПараметры(1) = "Два"
arrПараметры(2) = "Три"

Set objRs = New ADODB.Recordset
objRs.Fields().Append "НужныйПараметр", adChar, 255
objRs.Open

With objRs
     For i = 0 To UBound(arrПараметры) - 1
          .AddNew
          .Fields(0) = arrПараметры(i)
          .Update
     Next i
     .Sort = "НужныйПараметр"
End With

cmbКомбик.Recordset = objRs
objRs.Close
objRs = Nothing
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815592
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов Александр, типа да, только
Ганов Александр
Код: vbnet
1.
2.
3.
Set cmbКомбик.Recordset = objRs' присвоение объекта
'objRs.Close' это вообще не нужно! как же его потом просматривать если он закрыт!
objRs = Nothing
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815593
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов Александр
Код: vbnet
1.
For i = LBound(arrПараметры) To UBound(arrПараметры) '- 1 чойто, границы как раз...
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815595
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург, Принял. с closom погорячился. Благодарствую за советы, все варианты отличные!
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815633
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все классно, только список получается пустой, во всяком случае у меня. Хотя имеется 3 строки и заголовок появляется, если включить. У кого-то получилось?

Боюсь, тут придется через список делать, а отсортировать можно в рекордсете.
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815640
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShinВсе классно, только список получается пустой, во всяком случае у меня. Хотя имеется 3 строки и заголовок появляется, если включить. У кого-то получилось?О чём ты?
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815644
yoichi730
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот так еще наполнять, меняй строку запроса, выбирай чего угодно и в каком тебе угодно порядке
Код: vbnet
1.
2.
3.
4.
5.
6.
Private Sub Form_Open(Cancel As Integer)

    cmbVBМодули.RowSourceType = "Table/Query"
    cmbVBМодули.RowSource = "SELECT Name FROM MSysObjects Where Type = -32768 order by name"

End Sub
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815646
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПанургО чём ты?
Да вот решил проверить, как приведенный выше код работает, получаю вот такой вид комбо, хоть ты тресни:
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815655
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShinДа вот решил проверить, как приведенный выше код работает, получаю вот такой вид комбо, хоть ты тресни:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Dim objRs As ADODB.Recordset
Dim i As Long

Set objRs = New ADODB.Recordset
objRs.Fields.Append "НужныйПараметр", adChar, 255
objRs.Open

    With Application.VBE.ActiveVBProject.VBComponents
            For i = 1 To .Count
                objRs.AddNew VBA.Array("НужныйПараметр"), VBA.Array(.Item(i).Name)
            Next i
        objRs.UpdateBatch
        objRs.Sort = "НужныйПараметр"
    End With


Set Me.cboVBComponents.Recordset = objRs
Set objRs = Nothing
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815686
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург
Код: vbnet
1.
UpdateBatch


Вот с этим работает, а с обычным Upadate - нет.
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815754
Только в Аксе:
Код: vbnet
1.
2.
3.
4.
5.
6.
    Dim strSource As String
        strSource = "Ваня;Света;Петя;Аня"
    Dim Ar() As String
    Ar = Split(strSource, ";")
    WizHook.SortStringArray Ar
    strSource = Join(Ar, ";")


РезультатАня;Ваня;Петя;Света
Но в VBA не сложно отсортировать набор элементов (особенно на этапе добавления) разными способами.
Для сравнения строк используется функция StrComp.
...
Рейтинг: 0 / 0
Сортировка в ComboBox
    #39815756
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий, в примере 21888031 визхук и сортирует...
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сортировка в ComboBox
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]