|
|
|
Excel 2007, макрос, View
|
|||
|---|---|---|---|
|
#18+
Есть Макрос: Dim form As SelectData Sub RefreshData() If form Is Nothing Then Set form = New SelectData End If form.Show (vbModal) Dim startDate As Date, EndDate As Date, strText startDate = CDate(form.TextBox1.Text) If form.ComboBox1.Text = "День" Then EndDate = DateAdd("d", 1, startDate) End If If form.ComboBox1.Text = "Неделя" Then EndDate = DateAdd("d", 7, startDate) End If If form.ComboBox1.Text = "Месяц" Then EndDate = DateAdd("m", 1, startDate) End If If form.ComboBox1.Text = "09.09-20.09" Then EndDate = DateAdd("d", 12, startDate) End If If form.ComboBox1.Text = "Год" Then EndDate = DateAdd("m", 12, startDate) End If strText = "SELECT r.[Дата обращения],DATEPART(year, r.[Дата обращения]) AS Год, DATEPART(month, r.[Дата обращения]) AS Месяц, DATEPART(week, " & _ "r.[Дата обращения]) AS Неделя, CONVERT(DATETIME, CONVERT(VARCHAR, r.[Дата обращения], 12)) AS День,c.Регион, c.[Статус клиента], r.[Тип обращения], c.[Зарегистрирован во фронте], r.[Реакция клиента]," & _ "r.[Дата следующего звонка клиенту], r.[Когда планирует приобрести полис], r.[Модель], r.[Марка], r.[Год выпуска], c.[Дата рождения]," & _ "c.[Пол], c.[Дата первого водительского удостоверения], r.[Номер телефона],r.[Страховая премия], r.[Тема], r.[Канал], r.[Клиент], r.[Оператор]," & _ "COALESCE(c.[Контактный телефон],c.[Мобильный телефон], c.[Домашний телефон], r.[Номер телефона]) Телефон,c.[Канал регистрации в CRM],c.[Дата регистрации],r.[Суть претензии],c.[HASH]," & _ "c.[Дата регистриции во фронте] , r.[Продукт], r.[Комментарий] as [Комментарий к обращению], c.[Комментарий] as [Комментарий клиент], r.[Направление], r.[Подписан ли договор],r.[Дата начала действия договора], r.[Действует ли договор], r.[Состояние оплаты], r.[Тема текущего обращения] " & _ "FROM crmContact_view2 r " & _ "LEFT JOIN crmCustomer_view c ON r.client_id = c.id WHERE [Дата обращения] BETWEEN '" & SQLDate(startDate) & "' AND '" & SQLDate(EndDate) & "' ORDER BY 1" Worksheets("Данные").Range("a:az").Clear With Worksheets("Данные").QueryTables.Add(Connection:= _ "ODBC;DSN=CRM;SERVER=TVR-CRM-01;UID=capella;Pwd=Passw0rd;DATABASE=CapellaCRM;" _ , Destination:=Worksheets("Данные").Range("A1")) .CommandText = strText .Name = "Query from CapellaSRM" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = False .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = True .SaveData = True .AdjustColumnWidth = False .RefreshPeriod = 0 .PreserveColumnInfo = True .Refresh BackgroundQuery:=False End With Worksheets("Данные").Columns("A").NumberFormat = "m/d/yyyy" Worksheets("Данные").Columns("B").NumberFormat = "m/d/yyyy" Worksheets("Данные").Columns("C:D").NumberFormat = "General" Worksheets("Данные").Columns("R").NumberFormat = "General" Worksheets("Данные").Columns("T").NumberFormat = "_(* #,##0_);_(* (#,##0);_(* ""-""_);_(@_)" Worksheets("Сводный отчет").PivotTables("СводнаяТаблица1").PivotCache.Refresh End Sub Function SQLDate(D As Date) Dim retStr retStr = DatePart("yyyy", D) If DatePart("m", D) < 10 Then retStr = retStr & "0" End If retStr = retStr & DatePart("m", D) If DatePart("d", D) < 10 Then retStr = retStr & "0" End If retStr = retStr & DatePart("d", D) SQLDate = retStr End Function Собственно Select берет данные из двух вьюх: strText = "SELECT r.[Дата обращения],DATEPART(year, r.[Дата обращения]) AS Год, DATEPART(month, r.[Дата обращения]) AS Месяц, DATEPART(week, " & _ "r.[Дата обращения]) AS Неделя, CONVERT(DATETIME, CONVERT(VARCHAR, r.[Дата обращения], 12)) AS День,c.Регион, c.[Статус клиента], r.[Тип обращения], c.[Зарегистрирован во фронте], r.[Реакция клиента]," & _ "r.[Дата следующего звонка клиенту], r.[Когда планирует приобрести полис], r.[Модель], r.[Марка], r.[Год выпуска], c.[Дата рождения]," & _ "c.[Пол], c.[Дата первого водительского удостоверения], r.[Номер телефона],r.[Страховая премия], r.[Тема], r.[Канал], r.[Клиент], r.[Оператор]," & _ "COALESCE(c.[Контактный телефон],c.[Мобильный телефон], c.[Домашний телефон], r.[Номер телефона]) Телефон,c.[Канал регистрации в CRM],c.[Дата регистрации],r.[Суть претензии],c.[HASH]," & _ "c.[Дата регистриции во фронте] , r.[Продукт], r.[Комментарий] as [Комментарий к обращению], c.[Комментарий] as [Комментарий клиент], r.[Направление], r.[Подписан ли договор],r.[Дата начала действия договора], r.[Действует ли договор], r.[Состояние оплаты], r.[Тема текущего обращения] " & _ "FROM crmContact_view2 r " & _ "LEFT JOIN crmCustomer_view c ON r.client_id = c.id WHERE [Дата обращения] BETWEEN '" & SQLDate(startDate) & "' AND '" & SQLDate(EndDate) & "' ORDER BY 1" Так вот проблема собственно такая. При обновлении данных все работает хорошо. Операции вставки и замены также не вредят обновлению. А вот стоит удалить хотя бы одно поле (к примеру, r.[Продукт]) выскакивает ошибка 1004 "Недопустимое имя поля сводной таблицы. Чтобы создать сводную таблицу, используйте данные, организованные в виде списка с заголовками столбцов. Для изменения имени поля сводной таблицы введите новое имя.". Хотя на самом деле во Вьюхах все поля именованные. strText = "SELECT r.[Дата обращения],DATEPART(year, r.[Дата обращения]) AS Год, DATEPART(month, r.[Дата обращения]) AS Месяц, DATEPART(week, " & _ "r.[Дата обращения]) AS Неделя, CONVERT(DATETIME, CONVERT(VARCHAR, r.[Дата обращения], 12)) AS День,c.Регион, c.[Статус клиента], r.[Тип обращения], c.[Зарегистрирован во фронте], r.[Реакция клиента]," & _ "r.[Дата следующего звонка клиенту], r.[Когда планирует приобрести полис], r.[Модель], r.[Марка], r.[Год выпуска], c.[Дата рождения]," & _ "c.[Пол], c.[Дата первого водительского удостоверения], r.[Номер телефона],r.[Страховая премия], r.[Тема], r.[Канал], r.[Клиент], r.[Оператор]," & _ "COALESCE(c.[Контактный телефон],c.[Мобильный телефон], c.[Домашний телефон], r.[Номер телефона]) Телефон,c.[Канал регистрации в CRM],c.[Дата регистрации],r.[Суть претензии],c.[HASH]," & _ "c.[Дата регистриции во фронте] , r.[Комментарий] as [Комментарий к обращению], c.[Комментарий] as [Комментарий клиент], r.[Направление], r.[Подписан ли договор],r.[Дата начала действия договора], r.[Действует ли договор], r.[Состояние оплаты], r.[Тема текущего обращения] " & _ "FROM crmContact_view2 r " & _ "LEFT JOIN crmCustomer_view c ON r.client_id = c.id WHERE [Дата обращения] BETWEEN '" & SQLDate(startDate) & "' AND '" & SQLDate(EndDate) & "' ORDER BY 1" Есть аналогичная проблема, но в другом файле. Там работает Select * (select по всем полям), но не работает Select по конкретным полям, хотя, повторюсь, поля все именованные. В чем может быть проблема? В excele? В макросе? Во вьюхах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2010, 16:14 |
|
||
|
Excel 2007, макрос, View
|
|||
|---|---|---|---|
|
#18+
Забейте на MS.Query и сводные таблицы. Лучше - делать запрсы через ADODB и сводить выборки программно (в VBA). Как минимум - не будет проблем из-за разночтений в синтаксисе Query и SQL-ODBC... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2010, 03:47 |
|
||
|
Excel 2007, макрос, View
|
|||
|---|---|---|---|
|
#18+
А примерчик может есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2010, 09:17 |
|
||
|
Excel 2007, макрос, View
|
|||
|---|---|---|---|
|
#18+
EgorovSV, а кто вам мешает вставить псевдо -поле ...... "-" as [Продукт], ............. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2010, 09:46 |
|
||
|
Excel 2007, макрос, View
|
|||
|---|---|---|---|
|
#18+
Это не выход Пытаюсь сделать при помощи ADODB Успехи пока не очень ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2010, 11:37 |
|
||
|
Excel 2007, макрос, View
|
|||
|---|---|---|---|
|
#18+
Вроде победил при помощи Ado ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2010, 14:22 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=36912278&tid=2177549]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
160ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 434ms |

| 0 / 0 |
