Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Из SQL в EXCEL макрос втавить, а не добавить / 7 сообщений из 7, страница 1 из 1
21.12.2007, 16:26:40
    #35026872
andMegaM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из SQL в EXCEL макрос втавить, а не добавить
Всем привет!
Есть код макроса
Код: 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
21.12.2007, 16:34:27
    #35026900
@Nik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из SQL в EXCEL макрос втавить, а не добавить
ADD надо делать только один раз! А потом только изменять текст запроса при необходимости и .Refresh
...
Рейтинг: 0 / 0
21.12.2007, 17:15:27
    #35027024
andMegaM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из SQL в EXCEL макрос втавить, а не добавить
Как это? Меняется активная ячейка, значит и меняется часть кода

Код: 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
21.12.2007, 18:07:34
    #35027171
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из SQL в EXCEL макрос втавить, а не добавить
andMegaMКак это? Меняется активная ячейка, значит и меняется часть кодаУточни пожалуйста это где часть кода меняется?

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

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

andMegaMВ итоге я хочу получить чтобы в результате выполнения макроса в СОСЕДНЕЙ (справа) от активной ячейки появлялось число.Если у тебя много-много исходных ячеек, то имеет смысл отказаться от QT. QueryTables полезны в том случае, если ты не собираешься использовать макросы вообще или хочешь свести их до минимума. А уж ради одной цифры QT вообще не имеет смысла использовать. Проще будет создавать ADO подключение к БД, запускать сформированную здесь же в макросе SQL команду, кидать результат на лист и отключаться от БД.
Примеров как это сделать здесь на форуме до черта.
...
Рейтинг: 0 / 0
25.12.2007, 14:02:11
    #35032441
andMegaM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из SQL в EXCEL макрос втавить, а не добавить
Вот это, то, что мне надо
Код: 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
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Из SQL в EXCEL макрос втавить, а не добавить / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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