powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / как при помощи VBA в excel получить данные с SQL-сервера
13 сообщений из 13, страница 1 из 1
как при помощи VBA в excel получить данные с SQL-сервера
    #35172198
redrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
возникла необходимость в экселевском файле заполнить ячейки на основе запроса к SQL-серверу.

в свое время делал экспорт данных в эксель из аксеса - было все предельно ясно... а тут прилип к хелпу уже на пару часов - не могу разобраться....

может кто-нибудь подсобит примерчиком ???

пс: просьба, также указывать какие необходимы библиотеки для ваших примеров
...
Рейтинг: 0 / 0
как при помощи VBA в excel получить данные с SQL-сервера
    #35172347
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
используйте Данные-Импорт внешних данных - Создать запрос

и возится с кодом не надо

P.S.: если все же нужен код то ищите по словам ADO


I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
как при помощи VBA в excel получить данные с SQL-сервера
    #35172722
redrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробовал сделать через QueryTables примерно таким образом
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Dim CN, RN As Integer
Dim strsql As String
Dim ConnectionString As String
Dim wsh As Worksheet
CN =  4 
RN =  190 

Set wsh = ActiveSheet

ConnectionString = "DRIVER={SQL Server};SERVER=appserv;DATABASE=Runtime;UID=User;PWD=password"
strsql = "SELECT dbo_BatchDetail.DateTime FROM dbo_BatchIdLog INNER ......"

Do
    With wsh.Cells
        MsgBox wsh.Cells(RN, CN)
        With wsh.QueryTables.Add(Connection:=ConnectionString, Destination:=Range("P228"), sql:=strsql)
            .Refresh
        End With
        
        RN = RN +  1 
    End With
Loop Until RN =  230 
Модератор:
тег SRC



выдает ошибку application-defined or object-defined error
помогите разобраться что к чему....
...
Рейтинг: 0 / 0
как при помощи VBA в excel получить данные с SQL-сервера
    #35172747
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выдает где?

и зачем столько раз делать запрос?


I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
как при помощи VBA в excel получить данные с SQL-сервера
    #35174430
redrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot HandKot]выдает где?

и зачем столько раз делать запрос?

слетает на этой строке
wsh.QueryTables.Add(Connection:=ConnectionString, Destination:=Range("P228"), sql:=strsql)

запрос в цикле, потому что в само тело запроса будут вставляться значения из ячеек листа....
...
Рейтинг: 0 / 0
как при помощи VBA в excel получить данные с SQL-сервера
    #35174601
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: redrum
> слетает на этой строке
> wsh.QueryTables.Add(Connection:=ConnectionString,
> Destination:=Range("P228"), sql:=strsql)

Может потому, что Destination:=Range("P228") без изменений?
и после первого выполнения этот Range уже заполнен?

Чего хоть пишет?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
как при помощи VBA в excel получить данные с SQL-сервера
    #35174764
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой вариант реализованный в Oracle, думаю вполне подойдет и для MySql там только подключение нужно организовать под него.
Код: plaintext
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.
Private Sub Export_Click()
    Dim sSQLString As String
    Dim objXL As Object
    Dim objWb As Object
    Dim objWs As Object

    Set objXL = CreateObject("Excel.Application")
    If objXL Is Nothing Then Exit Sub

    objXL.SheetsInNewWorkbook =  1 
    Set objWb = objXL.Workbooks.Add 'Open("c:\main.xls")
    Set objWs = objWb.Worksheets( 1 )

    objXL.Visible = True

      sSQLString = "select ...... "  'текст запроса в базу

    objWs.Cells( 1 ) = "Названия стобцов1"
    objWs.Cells( 2 ) = "Названия стобцов2"
    objWs.Cells( 3 ) = "Названия стобцов3"
    objWs.Cells( 4 ) = "Названия стобцов4"
    objWs.Cells( 5 ) = "Названия стобцов5"
    objWs.Range("A1:F1").Font.Bold = True
    objWs.Columns("A:F").AutoFit
    
    Set rs = Connection1.Execute(sSQLString) 'здесь подключение к базе у меня уже установлено

    objWs.Range("A2").CopyFromRecordset rs ' собственно передача с рекордсета
    ' форматирование
    objWs.Cells.Select
    objXL.Selection.Columns.AutoFit
    objWs.Range("A1").Select
    
    objWs.Cells.Select
    objXL.Selection.Borders(xlEdgeBottom).LineStyle = xlDouble
    objWs.Range("A1").Select
        
    Set rs = Nothing
        
End Sub
...
Рейтинг: 0 / 0
как при помощи VBA в excel получить данные с SQL-сервера
    #35174935
redrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Может потому, что Destination:=Range("P228") без изменений?
>и после первого выполнения этот Range уже заполнен?
>Чего хоть пишет?

Destination:=Range("P228") - не влияет, потому что сваливается на первом проходе... как раз при попытке заполнить ячейку первый раз... выдает сообщение "application-defined or object-defined error"
...
Рейтинг: 0 / 0
как при помощи VBA в excel получить данные с SQL-сервера
    #35175035
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: redrum
> Destination:=Range("P228") - не влияет, потому что сваливается на
> первом проходе... как раз при попытке заполнить ячейку первый раз...
> выдает сообщение "application-defined or object-defined error"

Ну что тебе сказать, ConnectionString и strsql правильно заполнены?
потому что валится где-то внутри, то ли при установке соединения, то ли при
попытке выполнить запрос.
Мне при записи макроса сделало такой код:
Код: plaintext
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.
With ActiveSheet.QueryTables.Add(Connection:= _
        "ODBC;DRIVER=SQL Server;SERVER=(local);UID=;APP=Microsoft Office 
2003;WSID=A45;DATABASE=Northwind;Trusted_Connection=Yes" _
        , Destination:=Range("A2"))
        .CommandText = Array( _
        "SELECT Customers.CustomerID, Customers.CompanyName, 
Customers.ContactName, Customers.ContactTitle, Customers.Address, 
Customers.City, Customers.Region, Customers.PostalCode, Customers.Country, 
Custome" _
        , "rs.Phone, Customers.Fax" & Chr( 13 ) & "" & Chr( 10 ) & "FROM 
Northwind.dbo.Customers Customers")
        .Name = "Запрос из loc"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod =  0 
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With
Я соединялся с локальным сервером, попробуй записать макрос на соединение и
одноразовое получение данных, а после будешь модернизировать в цикл ;-)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
как при помощи VBA в excel получить данные с SQL-сервера
    #35175224
redrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Ну что тебе сказать, ConnectionString и strsql правильно заполнены?

спасибо за пример с макросом... сейчас буду разбираться....

сам запрос - простейший... в аксесе отрабатывает без вопросов....
а вот с ConnectionString наверное действительно стоит тщательно проверить...
...
Рейтинг: 0 / 0
как при помощи VBA в excel получить данные с SQL-сервера
    #35175474
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно можно воспользоваться Build подключением к MsSQL, например посредством OLE:

Код: plaintext
Connection = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=user;Data Source=nameserver"

ну и затем использовать свой запрос посредством рекордсета.
...
Рейтинг: 0 / 0
как при помощи VBA в excel получить данные с SQL-сервера
    #35177468
redrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема действительно оказалась в connectionstring....

Теперь возник другой вопрос - при вставке значений в ячейки добавляется еще и шапка запроса...
Как отключить эту "опцию", чтобы копировались только значения ???
...
Рейтинг: 0 / 0
как при помощи VBA в excel получить данные с SQL-сервера
    #35177599
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может это поможет

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
With ActiveSheet.QueryTables.Add( _
        Connection:=rstRecordset, _
        Destination:=Range("A1"))
    .Name = "Contact List"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = True
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod =  0 
    .PreserveColumnInfo = True
    .Refresh BackgroundQuery:=False
End With

обратите внимание на .FieldNames = True

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / как при помощи VBA в excel получить данные с SQL-сервера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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