Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Не срабатывает переключение между рабочими книгами
 
Добрый, может кто уже сталкивался с подобной проблемой.
Есть макрос который переносит данные из другой книги/листа на активыный лист.
При этом используются диалоговые окна InputBox. Может это важно.

Как это работает.
1.
Код
Set MyWorkbook= ActiveWorkbook : Set MySheet = ActiveSheet
2. На активно листе в InputBox юзер вводит адрес ачейки-получателя
3. Юзер переключается на другой лист в другой книге и в InputBox юзер вводит адрес ачейки-донора
4. После закрытия диалогового окна начинается перенос данных. При этом активной остается книга-донор на которую руками переключился юзер.
5. После переноса данных стоит команда
Код
MyWorkbook.Activate
MySheet.Activate

Ошибку не выдает, но и на изначальный лист с которого юзер начал работу, не переключает.
Вариации с
Код
MyWorkbook.Select или Application.Window(MyWorkbook.Name).Activate

не помогли

П/С в пределах одной рабочей книги переключение листов работает.
Работает также если макросом по запросу юзера другая рабочая книга (если нужный файл не открыт) сначала открывается. Потом юзер в ней выбирает ячейку. Затем макрос отрабатывает и переключает на изначальный лист.
Изменено: Troglodit - 03.10.2017 11:18:52
Как перезаписать PivotCache у существующей PivotTable из recordset ?
 
Доброго дня, столкнулся с такой проблемой. Просьба помочь.
Есть ADODB.Recordset созданный с помощью  SQL запроса.

Есть сводная таблица (Pivot_Table1) созданная из этого Recordset  и в последсвии руками настроеная (фильтра, области значений, колонки, строки).
Но нужно переодически обновлять ее источник данных. Для это заново формирую Recordset  и пытаюсь его присвоить Pivot_Table1.
Но выдает ошибку
Код
Set shSvod1.PivotTables("pivot_table1").PivotCache.Recordset = rs
Изменено: Troglodit - 02.10.2017 12:01:06
Зависает SQL-запрос содержащий вложенный зависимый запрос
 
Excel 2013.

Доброго дня!
Столкнулся с такой проблемой.

Есть условно две таблицы, которые нужно импортировать из Access и объединить:

T1 с полями KOD, Name, Date, G1, G2, GX...  (около 200 000 записей)
T2 с полями KOD, sGroup, DateIn (около 8 000 записей)

Их нужно объеденить чтобы добавить в T1 поле Group
Объединение по полям KOD но в Т2 это поле не уникально, есть вариации записей по полям DateIn и искомому Group.
Поэтому должно соблюдаться еще одно условие Date = MAX(диапазон DateIn, где DateIn <=Date)

С импортом в Эксель проблем нет, проблемы с объединением (что в Access, что в Эксле)

Написал такой вот SQL.
Код
SELECT T1.*, 
     (SELECT TOP 1 sGroup FROM T2 WHERE T1.KOD=T2.KOD ORDER BY DateIn DESC) as GroupName
FROM T1

Вложенный запрос сам по себе работает, но как тольок его вставляю во внешний - запрос начинает отработку и зависает.
В Excell - сразу, в Access при попытке получить все резульаты запроса (а так оказывает видимые строки на экране, общее кол-во записей не выводит).

Может кто знает как модифицировать запрос, чтобы он заработал ?
Например можно ли заменить вложенный запрос LEFT JOIN ? Ума не приложу как это сделать. Отчегото кажется что JOIN не должен зависать.
Изменено: Troglodit - 19.09.2017 13:30:59
Как получить данные из PivotCash ?, Глобально хочу получить список уникальных данных по имени поля Сводной таблицы
 
Почему то конструкция типа этого не работает.
Код
Dim pc as PivotCache
Dim rs as Recordset 'пробовал и ADODB.Recordset

pc = shSvod1.PivotTables("СводнаяТаблица1").PivotCache 'Ошибок нет
Set rs = pc.Recordset 'Ошибок нет
rs.MoveFirst 'Ошибка что объект не найден
Изменено: Troglodit - 18.09.2017 10:45:14
OLAP. Как получить список уникальных значений в поле и и информацию о том какие из них скрыты фильтром ?, Нужно передать в ListBox уникальные значения поля и отметить какие из них видимы.
 

Доброго дня всем.
Столкнулся с такой проблемой. Хочу использовать в отдельной форме ListBox  как фильтр для сводной таблицы OLAP.
Как заполнить ListBox  уникальными значениями по полю - решил. Осталась задача отметить какие из значений поля отображаются, а какие - нет. Это нужно при первичной инициализации формы чтобы синхронизировать ListBox  с установками сводной таблицы.

Написал такой код, но он не работает правильно. Почему-то все получаемые значения PivotItems.Visible = True. Других способов получить статус отображения элемента не нашел.


Код
Sub RefreshListBoxDate()
 Dim pt As PivotTable
 Dim pf As PivotField
 Dim pi As PivotItems
 Dim s As StringSet pt = Worksheets("Свод_1").PivotTables("СводнаяТаблица2")
Set pf = pt.PivotFields("[tbBasePLBS].[Дата].[Дата]")
Set pi = pf.PivotItemsListBox3.List = Array()For i = 1 To pi.Count
s = pi(i).Value
MsgBox CStr(i) & ": " & s & ": Visible is " & CStr(pi(i).Visible)
ListBox3.AddItem
ListBox3.List(i - 1, 0) = ExtractValue(pi(i).Value)
ListBox3.Selected(i - 1) = pi(i).Visible ' Не работает - все значения True, хотя это не так
Next i
End Sub

Function ExtractValue(iVal As String) As String
   Dim iStarPos, iLenght As Integer
   
   iStarPos = InStrRev(iVal, "[") + 1
   iLenght = Len(iVal) - iStarPos
   ExtractValue = Mid(iVal, iStarPos, iLenght)
End Function

Изменено: Troglodit - 08.08.2017 11:20:00
Получить значение из PivotItem сводной таблицы без имени таблицы и имени поля, Значение Value возвращает строку типа [Имя таблицы].[Имя поля]&[Значение]
 
Добрый день, подскажите пожалуйста.

У меня есть сводная таблица.
Попытка получить значение из поля дает не значение а строку типа [Имя таблицы].[Имя поля]&[Значение]

Мой код
Код
Sub RefreshListBoxDate()
 Dim pt As PivotTable
 Dim pf As PivotField
 Dim pi As PivotItemsSet pt = Worksheets("Свод_1").PivotTables("СводнаяТаблица2")
Set pf = pt.PivotFields("[tbBasePLBS].[Дата].[Дата]")
Set pi = pf.PivotItems
ListBox3.List = Array()
For i = 1 To pi.Count
MsgBox CStr(i) & ": " & pi(i).Value & ": Visible is " & CStr(pi(i).Visible)
ListBox3.AddItem
ListBox3.List(i - 1, 0) = pi(i).Value 'Тут я поулчаю не чистое значение а еще имя таблицы и поля, что не нужно.
ListBox3.Selected(i - 1) = pi(i).Visible
Next i
End Sub
Изменено: Troglodit - 08.08.2017 13:34:46
Отметить в ListBox отфильтрованные значения из сводной таблицы
 

Добрый день!
Просьба помочь.
Я сделал форму с ListBox для удобной фильтрации данных в сводной таблице.
В ListBox можно отмечать значения и по нажатии ОК сводная таблица фильтруется согласно выбранных значений.

Но я не знаю как передать в ListBox значения уже установленных фильтров в сводной таблице.

Так как получается некрасиво. Таблица при первом открытии файла уже отфильтрована согласно предыдущих установок, а моя форма при первичном открытии получается девственно чистая, что не есть хорошо.


Как передать список уникальных значений в ListBox уже разобрался. А как отметить те которые уже отфильтрованы - не знаю.

Попробовал такой код

Код
Private Sub UserForm_Initialize()
Call RefreshListBoxDate
End Sub 

Код
Sub RefreshListBoxDate()
ListBox3.List = ModuleFilter.Extract_Unique("tbBasePLBS", "Дата")
With Worksheets("Свод_1").PivotTables("СводнаяТаблица2").PivotFields("[tbBasePLBS].[Дата].[Дата]")
For i = 1 To .PivotItems.Count
'MsgBox .PivotItems(i).Name & " Visible is " & CStr(.PivotItems(i).Visible)
ListBox3.Selected(i - 1) = .PivotItems(i).Visible
Next i
End With
End Sub

Но почему-то в PivotItems свойство Visible оказалось у всех True
Изменено: Troglodit - 07.08.2017 11:58:13
Ошибка при попытке передать в .PivotFields одномерный массив значений фильтра
 
Пожалуйста помогите.
У меня стоит задача установить фильтр в сводной таблице исходя из выбранных нескольких значений в ListBox.

Написал такой код:
Код
Sub btFilter_Click()
Dim iList()
Dim x As Integer
x = 0

UserFormFilter1.Show
ReDim iList(UserFormFilter1.ListBox1.ListCount)

For i = 0 To UserFormFilter1.ListBox1.ListCount - 1 Step 1
    
    If UserFormFilter1.ListBox1.Selected(i) Then
        iList(x) = UserFormFilter1.ListBox1.List(i, 0)
        'MsgBox iList(x)
        x = x + 1
    End If
Next i

ReDim Preserve iList(x - 1)
ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields( _
        "[tbBasePLBS].[Тип_отчетности].[Тип_отчетности]").VisibleItemsList = iList

End Sub

На команде присвоения фильтру сводной таблицы значений массива выбранных пунктов выдает ошибку 1004
Не могу разобраться что я делаю не так.
Не работает макрос для добавления общих итого в сводную таблицу
 

Доброго времени суток.
С толкнулся с такой проблемой.

У меня Excel 2013.

Я создал кнопку которая должна включать/выключать отображение общих итогов строк в сводной таблице.
Подключил к ней доработаный макрос созданный макрорекордером.

Код
Sub swColumnGrand()
Dim Check As Boolean
Check = ActiveSheet.PivotTables("СводнаяТаблица2").ColumnGrand
'MsgBox (Check)
If Check Then
    ActiveSheet.PivotTables("СводнаяТаблица2").ColumnGrand = False 'Эта строка была создана макрорекордером когда руками включал/выключал итоги
        Else:
    ActiveSheet.PivotTables("СводнаяТаблица2").ColumnGrand = True
End If End Sub

В итоге при запуске макроса с таблицей ничего не происходит. Ошибку также не выдает.
Подскажите пожалуйста что я делаю не так ?
Изменено: Troglodit - 26.07.2017 17:51:03
Страницы: 1
Наверх