powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel выпадающие списки и подключение к Access
23 сообщений из 23, страница 1 из 1
Excel выпадающие списки и подключение к Access
    #38700484
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема в следующем: на листе Excel есть некая ячейка, в которой должен быть выпадающий список со значениями из базы Access. В соседней ячейке выпадающий список со значениями из базы Access по условию в первой ячейке. Кто-нибудь знает можно ли такое реализовать? Как сделать выпадающий список и как подключиться к Access знаю, а чтобы вместе работало не получается?(
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38701788
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irina_irina_irina,

Очень просто такое организовать, только вы можете не париться со связанными полями, а сразу выгружать из аксесса данные запроса по двум полям. Зачем столько боли?)
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38702074
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По сути надо подучить SQL. Сначала выгружать значения на лист для первого списка. Далее, согласно выбору первого списка формировать запрос для вытягивания данных для второго(так же на лист).
Сами запросы выполнять по событию Worksheet_Change листа, на котором списки.
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38703202
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот кусок кода. Ошибок никаких не выдает, но и не работает. подскажите кто-нибудь, что делаю не так? Из Excel к Access первый раз подключаюсь, раньше все только средства Access делала или выгрузки в Excel. Может в Excel вообще нельзя сделать то, что я задумала.
Код: 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.
25.
26.
27.
28.
29.
Private Sub VibratCeh(Target)
    Dim objAccDB As Object
    Dim DBFullName As String
    Dim oRecordset As Recordset
    
    Set objAccDB = CreateObject("ADODB.Connection")
    DBFullName = ThisWorkbook.Path & "\база.mdb"
    objAccDB.Open
    
    SQLCEH = "SELECT Подразделения.Подразделение AS Ceh FROM Подразделения;"
    
    Set oRecordset = CurrentDb.OpenRecordset(SQLCEH)
    
    Range("B2").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=oRecordset![Ceh]"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
    
End Sub
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38703243
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а кто такой CurrentDb?

читаем тут
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38703244
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irina_irina_irinaно и не работаетвыдается сообщение "я сегодня не работаю"?
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38703491
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Proа кто такой CurrentDb?

читаем тут
не помогло
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38703493
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Proirina_irina_irinaно и не работаетвыдается сообщение "я сегодня не работаю"?
до того как я подключила ADO и DAO писал ошибки в переменных, теперь даже ошибки не пишет, выпадающий список не появляется, ничего не происходит. что я делаю не так?
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38703508
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Смотрела по отладчику, проблема при подключении к базе Access. Как правильно подключиться?
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38703572
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного изменила код
Код: 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.
25.
26.
27.
28.
Dim objAccDB As Object
    Dim DBFullName As String
    Dim oRecordset As Recordset
    
    Set objAccDB = CreateObject("ADODB.Connection")
    DBFullName = ThisWorkbook.Path & "\база.mdb"
    objAccDB.Provider = "Microsoft.ACE.OLEDB.12.0"
    objAccDB.ConnectionString = "User ID=Admin;Password="""";Data Source=" & DBFullName
    objAccDB.Open
    
    SQLCEH = "SELECT Подразделения.Подразделение AS Ceh FROM Подразделения;"
    
    Set oRecordset = CurrentDb.OpenRecordset(SQLCEH)
    
    Range("B2").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=oRecordset![Ceh]"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With


после строки
Код: vbnet
1.
objAccDB.Open

из этой подпроцедуры возвращается в процедуру вместо того, что бы перейти к строке
Код: vbnet
1.
SQLCEH = "SELECT Подразделения.Подразделение AS Ceh FROM Подразделения;"
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38703622
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irina_irina_irinaиз этой подпроцедуры возвращается в процедуру вместо того, что бы перейти к строкеэто означает, что в вышестоящей процедуре у вас стоит перехват ошибки, а на строке objAccDB.Open возникает ошибка. Смотрите в вышестоящей процедуре Err.Description или отключите перехват ошибки.
irina_irina_irinaдо того как я подключила ADO и DAOне надо подключать ADO и DAO. Пользуйтесь чем-то одним. А то создаете соединение ADO и пытаетесь применить к нему методы DAO - работать не будет.
irina_irina_irinaShocker.Proа кто такой CurrentDb?
читаем тут
не помоглочто значит "не помогло"? у вас где-то объявлена глобальная переменная CurrentDb? Кроме того, это из DAO, выберите уже что-нибудь одно (лучше ADO - это более современная технология)
irina_irina_irinaКак правильно подключиться? http://www.connectionstrings.com/access/
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38703628
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так работает, но в выпадающем списке значений появляется "oRecordset![Ceh]", а должны значения из рекордсета. Что ещё не так в коде?
Код: 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.
25.
26.
Dim objAccDB As Object
    Dim DBFullName As String
    Dim oRecordset As Recordset
    Dim dbs As Database
    
    Set objAccDB = CreateObject("ADODB.Connection")
    DBFullName = ThisWorkbook.Path & "\база.mdb"
    objAccDB.Provider = "Microsoft.ACE.OLEDB.12.0"
    objAccDB.ConnectionString = "User ID=Admin;Password="""";Data Source=" & DBFullName
    
    SQLCEH = "SELECT Подразделения.Подразделение AS Ceh FROM Подразделения;"
    
    Range("B2").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="oRecordset![Ceh]"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38703637
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибку поняла, как мне правильно прописать, чтобы в выпадающем списке значения были из запроса?
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38703643
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
надо же сначала открыть рекордсет
Код: vbnet
1.
oRecordset.Open SQLCEH
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38703697
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Proнадо же сначала открыть рекордсет
Код: vbnet
1.
oRecordset.Open SQLCEH


Если открываю рекордсет, то, когда иду по отладке, дальше строки открытия рекордсета не идет по коду, возвращается из этой подпроцедуры в процедуру.
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38703912
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irina_irina_irina,

Насколько известно мне, нельзя результат непосредственно запроса использовать в вып.списках. Я уже писал, что сначала надо результат запроса на лист выгружать.
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38703936
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_PristНасколько известно мне, нельзя результат непосредственно запроса использовать в вып.списках. Я уже писал, что сначала надо результат запроса на лист выгружать.

Это не так, источник поля со списком можно сделать виртуальным, источник данных - индексированный массив значений выгрузки табличных данных из аксесса.
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38703939
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irina_irina_irinaЕсли открываю рекордсет, то, когда иду по отладке, дальше строки открытия рекордсета не идет по коду, возвращается из этой подпроцедуры в процедуру.я же уже писал 16345215
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38703957
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей ЛаловThe_PristНасколько известно мне, нельзя результат непосредственно запроса использовать в вып.списках. Я уже писал, что сначала надо результат запроса на лист выгружать.

Это не так, источник поля со списком можно сделать виртуальным, источник данных - индексированный массив значений выгрузки табличных данных из аксесса.
Т.е. мне сначала нужно поместить значения в массив, а в диапазоне сослаться на этот массив?
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38704043
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лаловисточник поля со списком можно сделать виртуальным, источник данных - индексированный массив значений выгрузки табличных данных из аксесса.Примерчик не покажете? Действительно интересно. То, что можно формулу в вып.список подставить знаю, значения - тоже. Именованный диапазон/формулу. Но вот чтобы выгрузку напрямую...
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38704098
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proirina_irina_irinaЕсли открываю рекордсет, то, когда иду по отладке, дальше строки открытия рекордсета не идет по коду, возвращается из этой подпроцедуры в процедуру.я же уже писал 16345215 кстати, у вас из кода пропало открытие соединения. А для oRecordset.Open надо еще указать соединение как один из параметров.

На этом форуме просто огромное количество примеров доступа к базе данных через ADO. Просто поищите, например, по ключевому слову "ADODB", нет смысла делать методом тыка.
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38704590
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С кодом справилась. Но в выпадающем списке показывает только одно (первое) значение из рекордсета. Может кто подскажет как быть? Неужели все таки сначала придется выгружать рекордсет на отдельный лист и ссылаться на диапазон в этом листе?
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
Option Explicit
Const DBFullName = "база.accdb"
Dim Cn As ADODB.Connection
Private Sub VibratCeh(Target)
    ConnectMDB
    Cen
    DisconnectMDB
End Sub

Private Function ConnectMDB() As Boolean
    If Dir(ThisWorkbook.Path & "\" & DBFullName) = "" Then
    MsgBox "Не найден файл базы данных! (""" & ThisWorkbook.Path & "\" & DBFullName & """)", vbCritical, " Ошибка подключения база данных"
    ConnectMDB = False
    Exit Function
    End If
    
    Set Cn = New ADODB.Connection
    Cn.Provider = "Microsoft.ACE.OLEDB.12.0"
    Cn.ConnectionString = "User ID=Admin;Password="""";Data Source='" & ThisWorkbook.Path & "\" & DBFullName & "'"
    Cn.Open
    ConnectMDB = True
    Exit Function
End Function

Private Sub DisconnectMDB()
    Cn.Close
    Set Cn = Nothing
    Exit Sub
End Sub

Sub Cen()
    Dim SQL As String
    Dim rs As ADODB.Recordset
    
    Set rs = New ADODB.Recordset
    SQL = "SELECT Подразделения.Подразделение AS Ceh FROM Подразделения;"
    rs.Open SQL, Cn
    
    Range("B2").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=rs![Ceh]
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

End Sub
...
Рейтинг: 0 / 0
Excel выпадающие списки и подключение к Access
    #38704665
irina_irina_irina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Победила!) Если вдруг кому пригодится, то рекордсет нужно записать в массив, а потом сослаться на этот массив. Переделала код вот так (нашла на этом же форуме), вроде работает:
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Sub Cen()
    Dim SQL As String
    Dim RS As ADODB.Recordset
    Dim myArray As Variant
    Dim i As Long
    Dim myStr As String
    
    Set RS = New ADODB.Recordset
    SQL = "SELECT Подразделения.Подразделение AS Ceh FROM Подразделения;"
    RS.Open SQL, Cn
    
    myArray = RS.GetRows(RS.RecordCount)
    For i = 0 To UBound(myArray, 2)
        If myArray(0, i) <> "" Then myStr = myStr & myArray(0, i) & ","
    Next i
    myStr = Left(myStr, Len(myStr) - 1)
    
    Range("B2").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=myStr
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

End Sub
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel выпадающие списки и подключение к Access
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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