Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сортировка в ComboBox / 25 сообщений из 33, страница 1 из 2
19.05.2019, 04:18
    #39814935
Ганов Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
добрый день всем знатокам 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
19.05.2019, 04:49
    #39814937
Ганов Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
Вот так все работает, но уж больно много замутов, чтобы просто заполнить комбик
Код: 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
19.05.2019, 07:31
    #39814943
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
Ганов Александр,
...
Рейтинг: 0 / 0
19.05.2019, 09:12
    #39814949
Ганов Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
Панург, благодарю, отличное решение!
Прошел в справку, вот на этот 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
20.05.2019, 09:36
    #39815219
Сортировка в ComboBox
У ComboBox-а есть метод AddItem. Он добавляет новое значение в список-источник, причем можно вставить в указанное место.
...
Рейтинг: 0 / 0
20.05.2019, 09:46
    #39815222
Ганов Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
Кривцов Анатолий, это мне известно. тогда к этому addItem надо добавить механизм определения места вставки в соответствии с уже имеющимся и оставшимися значениями
...
Рейтинг: 0 / 0
20.05.2019, 09:48
    #39815223
Ганов Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
пока оставил с привязанной табличкой, потом как-нить переделаю :-) с Вами согласен полностью - способов куча, просто некоторые из них не очень оптимальные по количеству "печатания" и иной "суеты"
...
Рейтинг: 0 / 0
20.05.2019, 09:51
    #39815225
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
Ганов Александрпока оставил с привязанной табличкой? На каждый комбо табличек не напасёшь!
...
Рейтинг: 0 / 0
20.05.2019, 09:55
    #39815226
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
Ганов Александр, И к тому же, если хочется использовать всё таки такое решение, то можно использовать Recordset от ADO. Его создавать и заполнять в коде, а далее напрямую присваивать как источник строк комбо.
...
Рейтинг: 0 / 0
20.05.2019, 15:23
    #39815377
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
Код: 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
20.05.2019, 18:06
    #39815450
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
aleks222, и легко выскакиваем за пределы указанные в спецификации...
...
Рейтинг: 0 / 0
20.05.2019, 18:07
    #39815451
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
aleks222,
Там ограничение на количество юнионов не очень большое, так что в общем случае не сработает
...
Рейтинг: 0 / 0
21.05.2019, 04:53
    #39815588
Ганов Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
Панург, полностью согласен. поэтому чуть позже все переделаю как должно быть
...
Рейтинг: 0 / 0
21.05.2019, 05:29
    #39815590
Ганов Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
Панург, имеешь ввиду такой вариант?

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

Боюсь, тут придется через список делать, а отсортировать можно в рекордсете.
...
Рейтинг: 0 / 0
21.05.2019, 09:33
    #39815640
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
MrShinВсе классно, только список получается пустой, во всяком случае у меня. Хотя имеется 3 строки и заголовок появляется, если включить. У кого-то получилось?О чём ты?
...
Рейтинг: 0 / 0
21.05.2019, 09:43
    #39815644
yoichi730
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
вот так еще наполнять, меняй строку запроса, выбирай чего угодно и в каком тебе угодно порядке
Код: 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
21.05.2019, 09:48
    #39815646
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
ПанургО чём ты?
Да вот решил проверить, как приведенный выше код работает, получаю вот такой вид комбо, хоть ты тресни:
...
Рейтинг: 0 / 0
21.05.2019, 10:08
    #39815655
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
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
21.05.2019, 11:01
    #39815686
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
Панург
Код: vbnet
1.
UpdateBatch


Вот с этим работает, а с обычным Upadate - нет.
...
Рейтинг: 0 / 0
21.05.2019, 12:45
    #39815754
Сортировка в ComboBox
Только в Аксе:
Код: 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
21.05.2019, 12:53
    #39815756
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка в ComboBox
Кривцов Анатолий, в примере 21888031 визхук и сортирует...
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сортировка в ComboBox / 25 сообщений из 33, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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