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

Страницы: 1
парсинг XML: надо выбрать атрибуты из конкретной группы
 
Столкнулся с похожей задачей. Дано XML node:
Код
<aaa> <ddd> eee="1" </ddd> </aaa>
<bbb> <ddd> eee="2" </ddd> </bbb>
<ccc> <ddd> eee="3" </ddd> </ccc>
Нужно достать "eee" в блоке "bbb", далее "ddd". Решение без цикла, без перебора:
Код
директория = "bbb"
поддиректория = "ddd"
показатель = "eee"
Set node01 = node.SelectSingleNode("//" & директория)
Set node02 = node01.SelectSingleNode(поддиректория)
значение = node02.Attributes.getNamedItem(показатель).Text

Может кому пригодится.

Макрос для преобразования даты в дату
 
Сам себе отвечу. Нашел здесь же, немного поправил только. Для ускорения процесса меняем формат в массиве, а не на листе, ну а потом выдаем результат:
Код
arr = Selection
For i = LBound(arr) To UBound(arr)
  If IsDate(arr(i, 1)) Then arr(i, 1) = CDate(arr(i, 1))
Next
Selection = arr
Макрос для преобразования даты в дату
 
Но с циклом, если записей много, получается не очень быстро. Без макроса "заменить точку на точку" получается гораздо быстрее. Можно ли в этом русле ускорить макрос? Само собой знаю, что менять точку на точку в макросе это бессмысленное занятие.
Как в VBA узнать сколько памяти занимает процесс Excel?, контролировать объем занимаемой памяти
 
Спасибо! Порядок занятой оперативной памяти определяет вполне себе. Проблема можно сказать решена. ... Однако возник еще вопрос)):

Вопрос не по теме, удален [МОДЕРАТОР]
Как в VBA узнать сколько памяти занимает процесс Excel?, контролировать объем занимаемой памяти
 
При обновлении сводной таблицы на базе большой таблицы данных, Excel 2013 иногда загибается. Происходит это когда процесс Excel начинает занимать в оперативке больше одного с лишним Гбайта. Использую файлы формата xlsb. Их размеры достигают 90 Мбайт. Обновляю сводники из VBA, перед этим происходит еще ряд действий. Хотел бы в VBA перед обновлением сводника контролировать размер занимаемой Excel-ем оперативки и принимать решение - обновлять или нет. Вопрос: Как в VBA узнать сколько памяти занимает процесс Excel?
Ошибка при обработке большого объема данных
 
Цитата
zavhoz1984 написал:
Проблему решил через ...
Жалко что решили таким образом. У меня аналогичная ошибка, периодически возникающая. Т.е. иногда команда Selection.EntireRow.Delete выполняется, а иногда на ней код останавливается. У меня похоже причина в размере выделяемой области (область эта достаточно сложная и большая), так же как у вас проблема начинается с 10000 строки. Приходится руками удалять (с этим проблем нет, хотя если диапазон будет очень-очень сложный, проблема возникнет и с этим - но у меня такого нет) этот диапазон и запускать код дальше. ... Видимо надо будет попробовать удалять частями.
Окно excel видно частично, Окно Excel 2013 или отдельная книга excel видны частично, т.е. видна только часть панели быстрого доступа.
 
Может кто-нибудь замечал подобное явление при работе с другими программами?
Установка фильтров сводных таблиц из VBA. ДАТА в фильтре., проблемы при установке фильтра по датам.
 
А еще таких вопросов не возникло бы (и еще плюс масса приятностей) если использовать форматирование таблицы "Форматировать как таблицу". А сводную строить соответственно не на базе (источник данных) диапазона, а на базе этой именованной таблицы.
Окно excel видно частично, Окно Excel 2013 или отдельная книга excel видны частично, т.е. видна только часть панели быстрого доступа.
 
Окно Excel 2013 или отдельная книга excel видны частично, т.е. видна только часть панели быстрого доступа (см. прилагаемый скрин). В таком виде либо может открыться сам Excel, либо при переходе между книгами, одна из книг якобы не отображается. Сиюминутное решение в такой ситуации - команда "Востановить" из панели быстрого доступа. Еще вариант - можно нажать на невидимую вкладку "Файл" и затем уже видимую стрелку назад. Кто-нибудь сталкивался с таким? Как решили данную проблему? Параллельно стоит 2007 Excel - с ним таких проблем нет. Данная проблема так же у моего коллеги за соседним компьютером, у него установлен только 2013 Office.
Установка фильтров сводных таблиц из VBA. ДАТА в фильтре., проблемы при установке фильтра по датам.
 
P.S. Формат "КолонкаДата" с дд.мм.гггг на дд.мм.гг можно поменять в сводной таблице не всегда. Не всегда есть кнопка "Числовой формат":  



Кнопка появляется, если источник данных сводной таблицы имеет диапазон без пустых строк (т.е. $A$1:$D$705, а не $A:$D, см. в файле).
Зато после изменения формата на дд.мм.гг можно перевыбрать диапазон на $A:$D, формат не испортится. Но все равно это не приятно, столько манипуляций.
Изменено: Виктор Ч - 28.10.2014 14:30:35
Установка фильтров сводных таблиц из VBA. ДАТА в фильтре., проблемы при установке фильтра по датам.
 
Kuzmich, спасибо огромное, благодаря вам разобрался!
На вашей сводной все работает. Строю рядом свою сводную - не работает. Отличия в формате поля фильтра, у вас дд.мм.гг, у меня дд.мм.гггг. Зашел в "параметры поля", "числовой формат", поменял - заработало! Спа-си-бо!

Вот только в шестистах сводных таблицах теперь формат поменять осталось ... идем дальше!
Установка фильтров сводных таблиц из VBA. ДАТА в фильтре., проблемы при установке фильтра по датам.
 
Kuzmich, да спасибо, обратил внимание и на Тип As Date и на лист База. Не работает у меня, поэтому и просил прислать, потестить, ... похоже у меня другая причина.

Может дело в глобальных настройках форматов дат на компьютере? Форматы крутил, ничего не получилось. Или в версии Excel? ...
Изменено: Виктор Ч - 24.10.2014 12:04:30
Установка фильтров сводных таблиц из VBA. ДАТА в фильтре., проблемы при установке фильтра по датам.
 
Цитата
Kuzmich пишет: В сводной в области страницКолонкаДата строка 01.01.2003 стала невидима
Разве вам не это нужно?
Именно это и нужно. Но у меня на те же действия excel выдает ошибку.


Kuzmich, приложите пожалуйста ваш рабочий файл.
Установка фильтров сводных таблиц из VBA. ДАТА в фильтре., проблемы при установке фильтра по датам.
 
Так не получается, т.к. условие PItem.Name = myD никогда не соблюдается PItem.Name = "01/01/2003", а myD = "01.01.2003". А если так:
Код
myD = "01/01/2003"
For Each PItem In ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("КолонкаДата").PivotItems
    If PItem.Name = myD Then PItem.Visible = False
Next
то  выхожу на ошибку "Нельзя установить свойство Visible класса PivotItem".

Почему-то только когда "Дата" PItem.Visible в Watches равно Error 2042, а не True или False и изменить ее не получается.
Изменено: Виктор Ч - 25.10.2014 00:23:30
Подтянуть данные с другого листа по заданному условию
 
Если кратко, пару вариантов:
=ЕСЛИОШИБКА(ВПР(D1;A1:B4;2;0);"" )
=СУММЕСЛИ(A1:A4;D1;B1:B4)
Установка фильтров сводных таблиц из VBA. ДАТА в фильтре., проблемы при установке фильтра по датам.
 
Файл прикрепил ...
Установка фильтров сводных таблиц из VBA. ДАТА в фильтре., проблемы при установке фильтра по датам.
 
Более того в связке ActiveSheet.PivotTables().PivotFields().PivotItems(? ).Visible вместо значения поля, например "2003" можно использовать порядковый номер, т.е. цифру 1. Проверил. Это работает всегда, только если это не дата:
Код
'Это работает: 
ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Год").PivotItems(1).Visible = True  
'А это нет:
ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("КолонкаДата").PivotItems(1).Visible = True 
'Получается с датой вообще никак!
 
Получается печалька. Даты использовать нельзя?
Установка фильтров сводных таблиц из VBA. ДАТА в фильтре., проблемы при установке фильтра по датам.
 
Почему-то не получается прикрепить файл, а то бы давно выложил, ... поэтому вот ссылка на него. Посмотрите! Напоминаю: Не работает изменение фильтра по дате из VBA. Спасибо!
Установка фильтров сводных таблиц из VBA. ДАТА в фильтре., проблемы при установке фильтра по датам.
 
Пробовал и CDbl, и "" & CDbl & "" и CStr, и CDate, и CVDate, и просто Date. Последние три проглатываются до ошибки "Нельзя установить свойство Visible класса PivotItem". Первые дают ошибку раньше "Невозможно получить свойство PivotItems класса PivotField".
Изменено: victor.chaplygin - 23.10.2014 21:21:56
Установка фильтров сводных таблиц из VBA. ДАТА в фильтре., проблемы при установке фильтра по датам.
 
Может при работе с датами есть какая-то особенная хитрость?
Код
F = ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("КолонкаДата").PivotItems("1/1/2003").Visible   
'F = Error 2042 - вот это не понятно, должно быть true или false
V = ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("КолонкаДата").PivotItems("1/1/2003").Value   
'V = "1/1/2003" - хотя value выдает корректное значение,  
'... если было бы не правильно выдавал бы <Невозможно получить свойство PivotItems класса PivotField>
Изменено: victor.chaplygin - 22.10.2014 17:12:42
Установка фильтров сводных таблиц из VBA. ДАТА в фильтре., проблемы при установке фильтра по датам.
 
Цитата
B.Key пишет: попробуйте дату в текстовом формате "30.10.2014"
Если использовать формат дд.мм.гггг или отсутствующий в фильтре элемент, то вообще выдается ошибка "Невозможно получить свойство PivotItems класса PivotField" - это ошибка на более ранней стадии. Поэтому формат мм/дд/гггг (причем без первых нулей) проглатывается и в кавычках и в #-ах, думаю можно считать правильным.
Установка фильтров сводных таблиц из VBA. ДАТА в фильтре., проблемы при установке фильтра по датам.
 
Цитата
B.Key пишет: как правило данная ошибка возникает, гогда все элементы становятся visible=false
К сожалению причина не в этом, все элементы visible=true. Пытаюсь отключить всего один элемент. В моем коде с фильтром по колонке Год все работает, а по дате нет, поэтому и спрашиваю, как это поправить?
Установка фильтров сводных таблиц из VBA. ДАТА в фильтре., проблемы при установке фильтра по датам.
 
Добрый день!
Пытаюсь установить фильтр для сводной таблицы из VBA, и если в качестве фильтра используется дата (дата находится в фильтре отчета сводной таблицы), выдается ошибка "Нельзя установить свойство Visible класса PivotItem". В каком формате должна быть переменная myD:
ActiveSheet.PivotTables("СводнаяТаблица1" ).PivotFields("КолонкаДата" ).PivotItems(myD).Visible = True
1) #9/30/2014# или
2) "9/30/2014" или
3) пробовал и из ячейки значение брать: Range("A1" ) или
4) что еще можно попробовать?
В вариантах без дат все работает корректно.
Нашел похожую тему, но у них работает хоть что-то, у меня не получилось победить даты. Help me!
Код
Sub START() 
'Не дата - работает:
ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Год").PivotItems("2005").Visible = False 
myD = Range("A1")
'myD = #1/1/2003#
'myD = "1/1/2003"
'myD = "#1/1/2003#"
'myD = ? 
'Дата - выдает ошибку:
ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("КолонкаДата").PivotItems(myD).Visible = False 
End Sub
Изменено: victor.chaplygin - 22.10.2014 16:37:12
Фильтрация на других листах при фильтрации на текущем
 
Вот две темы, там можно найти ответ: тема 1 и тема 2.
Синхронизация параметров двух сводных таблиц
 
Добрый день!
А если в качестве фильтра используется дата (дата находится в фильтре отчета сводной таблицы), в каком формате должна быть переменная myD:
ActiveSheet.PivotTables("СводнаяТаблица1" ).PivotFields("КолонкаДата" ).PivotItems(myD).Visible = True
1) #9/30/2014# или
2) "9/30/2014" или
3) пробовал и из ячейки значение брать: Range("A1" ) или
4) что-то еще?
Мне при лучшем раскладе выдает ошибку "Нельзя установить свойство Visible класса PivotItem"
В вариантах без дат все работает корректно.
Нашел похожую тему, но у них работает хоть что-то, у меня не получилось победить даты. Help me!
Изменено: victor.chaplygin - 22.10.2014 15:11:45
Управление Параметрами Excel из VBA
 
Спасибо  
 
И чтобы включить соответственно:    
application.Calculation = xlCalculationAutomatic
Управление Параметрами Excel из VBA
 
Файл содержит множество вычислений. Макрос обновляет значения многих ячеек листа на которые завязаны эти вычисления. Из-за этого приходится "ожидать". Если установить "Параметры вычислений" в положение "вручную", то всё летает.    
 
Вопрос: Можно ли из VBA устанавливать "Вычисления в книге" в положение "вручную", а в конце выполнения макроса в положение "автоматически".  
 
P.S. Application.ScreenUpdating = False - отключение обновления экрана не помогает.
Страницы: 1
Наверх