powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Из SQL в EXCEL макрос втавить, а не добавить
7 сообщений из 7, страница 1 из 1
Из SQL в EXCEL макрос втавить, а не добавить
    #35026872
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Есть код макроса
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Dim strSql1 As String
Dim stroka As String

stroka = ActiveCell

strSql1 = "SELECT Count(*) FROM RRR"

strSql1 = strSql1 & " WHERE"
strSql1 = strSql1 & " not Flag = 1 "
strSql1 = strSql1 & " AND DN.Name  Like '" & stroka & "'"

sqlstring1 = strSql1

connstring = _
Array(Array("ODBC;DRIVER=SQL Server;SERVER=SQL5;DATABASE=Info;Trusted_Connection=Ye"), Array("s"))
With ActiveSheet.QueryTables.Add(Connection:=connstring, _
        Destination:=ActiveCell.Offset(- 1 ,  1 ), Sql:=sqlstring1)

    .Refresh
    
End With

По этому запросу в соседней от активной ячейке появляется число строк в которых содержится stroka. Если сделать такой же запрос с другой активной ячейкой, то добавляется пустая колонка и потом вставляется результат. Таким оразом получаем что цыфры идут лесенкой (с каждым запросом предыдущий результат двигается в право на одну ячейку). Как от этого избавится?
Скорее всего дело в QueryTables.Add. Может не Add надо, а че-нить другое?
Или добавить какую нибудь примочку типа
Код: plaintext
.FieldNames = False
т.е. запретить чего нибудь.
...
Рейтинг: 0 / 0
Из SQL в EXCEL макрос втавить, а не добавить
    #35026900
@Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ADD надо делать только один раз! А потом только изменять текст запроса при необходимости и .Refresh
...
Рейтинг: 0 / 0
Из SQL в EXCEL макрос втавить, а не добавить
    #35027024
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как это? Меняется активная ячейка, значит и меняется часть кода

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
connstring = _
Array(Array("ODBC;DRIVER=SQL Server;SERVER=SQL5;DATABASE=Info;Trusted_Connection=Ye"), Array("s"))
With ActiveSheet.QueryTables.Add(Connection:=connstring, _
        Destination:=ActiveCell.Offset(- 1 ,  1 ), Sql:=sqlstring1)

    .Refresh
    
End With

значит изначально надо не Add, а что-то другое.
Кто нибудь знает инфу по-подробней о QueryTables.?
...
Рейтинг: 0 / 0
Из SQL в EXCEL макрос втавить, а не добавить
    #35027171
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andMegaMКак это? Меняется активная ячейка, значит и меняется часть кодаУточни пожалуйста это где часть кода меняется?

andMegaMКто нибудь знает инфу по-подробней о QueryTables.?Ну я знаю..... Только я не пойму что ты в итоге хочешь получить.
...
Рейтинг: 0 / 0
Из SQL в EXCEL макрос втавить, а не добавить
    #35027206
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь. Ошибся. Меняется не часть кода, а запрос и соответственно место, куда должен вставиться результат.
В итоге я хочу получить чтобы в результате выполнения макроса в СОСЕДНЕЙ (справа) от активной ячейки появлялось число.

Сейчас если два раза запустить макрос на одной и той же ячейке получится добавление новой колонки и вставиться результат в пустой ячейке, а предыдущий результат сместится вправо.
...
Рейтинг: 0 / 0
Из SQL в EXCEL макрос втавить, а не добавить
    #35027221
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andMegaMИзвиняюсь. Ошибся. Меняется не часть кода, а запрос и соответственно место, куда должен вставиться результат.У QueryTables можно делать параметры запроса. Достаточно создать несколько QT на листе в разных местах и привязать их параметры к конкретным ячейкам. Потом делать полный рефреш всех QT на листе или только исправленных (это кстати и сам Эксель умеет). Каждый раз создавать новые QT совершенно не нужно.

andMegaMВ итоге я хочу получить чтобы в результате выполнения макроса в СОСЕДНЕЙ (справа) от активной ячейки появлялось число.Если у тебя много-много исходных ячеек, то имеет смысл отказаться от QT. QueryTables полезны в том случае, если ты не собираешься использовать макросы вообще или хочешь свести их до минимума. А уж ради одной цифры QT вообще не имеет смысла использовать. Проще будет создавать ADO подключение к БД, запускать сформированную здесь же в макросе SQL команду, кидать результат на лист и отключаться от БД.
Примеров как это сделать здесь на форуме до черта.
...
Рейтинг: 0 / 0
Из SQL в EXCEL макрос втавить, а не добавить
    #35032441
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это, то, что мне надо
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Dim strSql1 As String
Dim stroka As String

stroka = ActiveCell

strSql1 = "SELECT Count(*) FROM RRR"

strSql1 = strSql1 & " WHERE"
strSql1 = strSql1 & " not Flag = 1 "
strSql1 = strSql1 & " AND DN.Name  Like '" & stroka & "'"

sqlstring1 = strSql1

connstring = _
Array(Array("ODBC;DRIVER=SQL Server;SERVER=SQL5;DATABASE=Info;Trusted_Connection=Ye"), Array("s"))
With ActiveSheet.QueryTables.Add(Connection:=connstring, _
        Destination:=ActiveCell.Offset( 0 ,  1 ), Sql:=sqlstring1)

       .FieldNames = False
      .BackgroundQuery = False
      .RefreshStyle = xlOverwriteCells
      .Refresh BackgroundQuery:=False
    
End With
Добавил несколько примочек, котрые нашел на этом форуме и все заработало.
Только кто-нибудь может мне обьяснить что делают эти примочки?
Код: plaintext
1.
2.
3.
4.
  
      .FieldNames = False
      .BackgroundQuery = False
      .RefreshStyle = xlOverwriteCells
      .Refresh BackgroundQuery:=False
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Из SQL в EXCEL макрос втавить, а не добавить
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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