Но с циклом, если записей много, получается не очень быстро. Без макроса "заменить точку на точку" получается гораздо быстрее. Можно ли в этом русле ускорить макрос? Само собой знаю, что менять точку на точку в макросе это бессмысленное занятие.
При обновлении сводной таблицы на базе большой таблицы данных, Excel 2013 иногда загибается. Происходит это когда процесс Excel начинает занимать в оперативке больше одного с лишним Гбайта. Использую файлы формата xlsb. Их размеры достигают 90 Мбайт. Обновляю сводники из VBA, перед этим происходит еще ряд действий. Хотел бы в VBA перед обновлением сводника контролировать размер занимаемой Excel-ем оперативки и принимать решение - обновлять или нет. Вопрос: Как в VBA узнать сколько памяти занимает процесс Excel?
Жалко что решили таким образом. У меня аналогичная ошибка, периодически возникающая. Т.е. иногда команда Selection.EntireRow.Delete выполняется, а иногда на ней код останавливается. У меня похоже причина в размере выделяемой области (область эта достаточно сложная и большая), так же как у вас проблема начинается с 10000 строки. Приходится руками удалять (с этим проблем нет, хотя если диапазон будет очень-очень сложный, проблема возникнет и с этим - но у меня такого нет) этот диапазон и запускать код дальше. ... Видимо надо будет попробовать удалять частями.
А еще таких вопросов не возникло бы (и еще плюс масса приятностей) если использовать форматирование таблицы "Форматировать как таблицу". А сводную строить соответственно не на базе (источник данных) диапазона, а на базе этой именованной таблицы.
Окно Excel 2013 или отдельная книга excel видны частично, т.е. видна только часть панели быстрого доступа (см. прилагаемый скрин). В таком виде либо может открыться сам Excel, либо при переходе между книгами, одна из книг якобы не отображается. Сиюминутное решение в такой ситуации - команда "Востановить" из панели быстрого доступа. Еще вариант - можно нажать на невидимую вкладку "Файл" и затем уже видимую стрелку назад. Кто-нибудь сталкивался с таким? Как решили данную проблему? Параллельно стоит 2007 Excel - с ним таких проблем нет. Данная проблема так же у моего коллеги за соседним компьютером, у него установлен только 2013 Office.
P.S. Формат "КолонкаДата" с дд.мм.гггг на дд.мм.гг можно поменять в сводной таблице не всегда. Не всегда есть кнопка "Числовой формат":
Кнопка появляется, если источник данных сводной таблицы имеет диапазон без пустых строк (т.е. $A$1:$D$705, а не $A:$D, см. в файле). Зато после изменения формата на дд.мм.гг можно перевыбрать диапазон на $A:$D, формат не испортится. Но все равно это не приятно, столько манипуляций.
Kuzmich, спасибо огромное, благодаря вам разобрался! На вашей сводной все работает. Строю рядом свою сводную - не работает. Отличия в формате поля фильтра, у вас дд.мм.гг, у меня дд.мм.гггг. Зашел в "параметры поля", "числовой формат", поменял - заработало! Спа-си-бо!
Вот только в шестистах сводных таблицах теперь формат поменять осталось ... идем дальше!
Kuzmich, да спасибо, обратил внимание и на Тип As Date и на лист База. Не работает у меня, поэтому и просил прислать, потестить, ... похоже у меня другая причина.
Может дело в глобальных настройках форматов дат на компьютере? Форматы крутил, ничего не получилось. Или в версии Excel? ...
Так не получается, т.к. условие 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 и изменить ее не получается.
Более того в связке ActiveSheet.PivotTables().PivotFields().PivotItems(? ).Visible вместо значения поля, например "2003" можно использовать порядковый номер, т.е. цифру 1. Проверил. Это работает всегда, только если это не дата:
Код
'Это работает:
ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Год").PivotItems(1).Visible = True
'А это нет:
ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("КолонкаДата").PivotItems(1).Visible = True
'Получается с датой вообще никак!
Почему-то не получается прикрепить файл, а то бы давно выложил, ... поэтому вот ссылка на него. Посмотрите! Напоминаю: Не работает изменение фильтра по дате из VBA. Спасибо!
Пробовал и CDbl, и "" & CDbl & "" и CStr, и CDate, и CVDate, и просто Date. Последние три проглатываются до ошибки "Нельзя установить свойство Visible класса PivotItem". Первые дают ошибку раньше "Невозможно получить свойство PivotItems класса PivotField".
Может при работе с датами есть какая-то особенная хитрость?
Код
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>
B.Key пишет: попробуйте дату в текстовом формате "30.10.2014"
Если использовать формат дд.мм.гггг или отсутствующий в фильтре элемент, то вообще выдается ошибка "Невозможно получить свойство PivotItems класса PivotField" - это ошибка на более ранней стадии. Поэтому формат мм/дд/гггг (причем без первых нулей) проглатывается и в кавычках и в #-ах, думаю можно считать правильным.
B.Key пишет: как правило данная ошибка возникает, гогда все элементы становятся visible=false
К сожалению причина не в этом, все элементы visible=true. Пытаюсь отключить всего один элемент. В моем коде с фильтром по колонке Год все работает, а по дате нет, поэтому и спрашиваю, как это поправить?
Добрый день! Пытаюсь установить фильтр для сводной таблицы из 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
Добрый день! А если в качестве фильтра используется дата(дата находится в фильтре отчета сводной таблицы), в каком формате должна быть переменная 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!
Файл содержит множество вычислений. Макрос обновляет значения многих ячеек листа на которые завязаны эти вычисления. Из-за этого приходится "ожидать". Если установить "Параметры вычислений" в положение "вручную", то всё летает.
Вопрос: Можно ли из VBA устанавливать "Вычисления в книге" в положение "вручную", а в конце выполнения макроса в положение "автоматически".
P.S. Application.ScreenUpdating = False - отключение обновления экрана не помогает.