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

Страницы: 1
ClearContents и скрытые строки
 
В общем, хороших универсальных идей никто не предложил, тогда резюмирую.

Методы
Код
Range.Clear
Range.ClearContents
Range.Value
Range.Formula
Range.Borders
Range.Copy
и ряд других, отвечающих за редактирование содержимого и форматирование ячеек, НЕ действуют на ячейки, скрытые фильтром, если таковые попадаются в обрабатываемом диапазоне.

С одной стороны всё в полном соответствии с работой с отфильтрованным листом «вручную» (при нажатии, к примеру, Del очищаются только видимые ячейки, а скрытые фильтром игнорируются).
Но при работе из-под VBA такое поведение выглядит неочевидным или даже нелогичным. Ведь обращение идёт к Range целиком, а не к Range.SpecialCells(xlCellTypeVisible), т.е. нигде не указано, что обрабатываемая область должна чем-то ограничиваться. По крайней мере для меня эта особенность стала неприятной неожиданностью и привела к ошибке в программе, теперь придётся иметь её в виду при разработке.

Что делать, если всё же нужно работать с целым диапазоном, а не только с видимой его частью:
  1. Снимать фильтры, сохраняя предварительно критерии фильтрации в отдельном массиве/структуре, обрабатывать диапазон и ставить фильтры обратно.
  2. Перебирать диапазон по ячейкам.

Всем спасибо.
Изменено: AShatov - 23.10.2017 12:02:51
Что означает Version 1.0 CLASS?
 
Сейчас тоже заинтересовался этой темой.
Поэкспериментировал с установкой разных значений свойства Instancing и смотрел, что получается в cls-файле.
В общем, параметр MultiUse к этому свойству отношения не имеет, он всегда одинаковый (True). Если его менять на False вручную то ничего не изменится, он просто автоматом встанет обратно на True.

А вот за свойство Instancing отвечает комбинация атрибутов:
Код
Attribute VB_GlobalNameSpace
Attribute VB_Creatable
Attribute VB_PredeclaredId
Attribute VB_Exposed
Изменено: AShatov - 20.10.2017 18:52:04
ClearContents и скрытые строки
 
Да, так будет работать.
Ну вернее сам не пробовал, но уверен, что будет))

Но тут возникает другой вопрос - а что если данных в этих ячейках нет, а форматирование (ну или границы) нужно убрать? Тогда они не попадут под отбор SpecialCells(xlCellTypeConstants) и останутся не очищенными.

Вот... пока никаких разумных решений, кроме тупого перебора циклом, в голову не приходит...
ClearContents и скрытые строки
 
Цитата
Jack Famous написал:
вместо .ClearContents попробуйте .Borders.LineStyle = False
Я же писал - не работает для скрытых))
Цитата
AShatov написал:
Задача - очистить ячейки и границы в заданном диапазоне, делаю соответственно через Range.ClearContents и Range.Borders.
Вопрос в том, что если на листе установлен автофильтр, то эти методы не срабатывают для скрытых строк
ClearContents и скрытые строки
 
Ну я файл приложил, попробуйте  :)  
ClearContents и скрытые строки
 
Цитата
Watcher_1 написал: .SpecialCells(xlCellTypeConstants).ClearContents
Да, через SpecialCells неплохой вариант. В принципе всё содержимое можно почистить.

А если мне ещё и границы ячеек нужно очистить - тут есть какое-то решение?
ClearContents и скрытые строки
 
Файл-пример можно сделать за одну минуту, например, вот такой
Но вопрос же не в конкретном файле, а в особенности работы метода.
Изменено: AShatov - 17.10.2017 16:33:48
ClearContents и скрытые строки
 
Всем доброго дня.

Столкнулся с неожиданной проблемой (раньше как-то не замечал)...

Задача - очистить ячейки и границы в заданном диапазоне, делаю соответственно через Range.ClearContents и Range.Borders.
Вопрос в том, что если на листе установлен автофильтр, то эти методы не срабатывают для скрытых строк, Для скрытых вручную срабатывают, а для скрытых фильтром нет.

Есть ли какие-то красивые решения этой проблемы, кроме перебора?
Снятие фильтров и отображение строк, само собой, не рассматривается.

Спасибо.
Выпадающие списки через VBA, Validation.Formula1 и запятые
 
Дмитрий Тарковский, спасибо, но немного не то.
Я говорил не о ComboBox, с ним всё понятно, а об объекте Range.Validation, т.е. о выпадающем списке внутри ячейки.
Выпадающие списки через VBA, Validation.Formula1 и запятые
 
Юрий М, спасибо.
Т.е. получается, что я обязательно должен использовать ссылку на реальный диапазон на дополнительном листе? Не очень удобно, учитывая, что в моём случае нужно сделать много таких списков, и все разные и динамические...
Хотя с другой стороны действительно отпадают все ограничения, и с сохранением файла проблем не будет.

Тогда задам ещё глупый вопрос :)
А можно именованные диапазоны делать виртуальными, чтобы не плодить лишние листы. Например, в виде висящей в памяти переменной.
Выпадающие списки через VBA, Validation.Formula1 и запятые
 
Кто-нибудь знает, как правильно задать список для свойства Formula1 например через Join(Array, ","), если в элементах массива встречаются запятые: типа "Москва, ул. такая-то" или дробные числа с той же запятой?
В этом случае запятые воспринимаются как лишние разделители.
Как их можно экранировать?
VBA Object Browser - видны скрытые переменные класса
 
Если проводить аналогию с Object Browser'ом в Visual Studio, то там приватные переменные/функции не видны (точнее, есть опция, показывать их или нет). ИМХО так удобнее и полезнее для самоконтроля, чем видеть всё подряд.
Поэтому и решил, что в VBA тоже должна быть подобная функция.
VBA Object Browser - видны скрытые переменные класса
 
Всем добрый день.

Только что столкнулся с проблемой, раньше как-то не обращал внимания: все внутренние переменные класса оказываются видны в Object Browser.
При написании класса переменные, как и положено, объявляются Private, но при этом всё равно отображаются там, где их быть не должно.

Это какой-то косяк у меня на компе, или в VBA где-то есть настройки отображения?

 
Нужен преподаватель по VBA
 
Цитата
ikki написал: даже отличным профессионалам и прочим гуру - в ряде случаев может понадобиться погуглить, поэкспериментировать, проверить...
Согласен. Я и не претендую на абсолютную точность и мгновенный ответ. Но человек, обладающий опытом, сможет это сделать быстрее, чем я, а в каких-то вопросах вообще обойдётся без гугла.

Цитата
TheBestOfTheBest написал: Приведите пару примеров пож-та
Ну например один из недавних вопросов.
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=68028&TITLE_SEO=68028-vydelen...
Вроде и не сильно сложный, но нетривиальный и заставил потерять много времени в гугле, а у The_Prist оказался готовый ответ. Вот и всё, вопрос лишь в том, чтобы не терять время на гугл, когда у профессионалов есть готовые ответы.
Нужен преподаватель по VBA
 
Цитата
TheBestOfTheBest написал: Это называется "консультант",  а не преподаватель.
Исправил на "консультант" для любителей цепляться к словам.

Цитата
The_Prist написал: Человек должен быть всегда-всегда на связи?
Конечно нет, это нереально, у всех свои дела))
Достаточно иногда проверять почту.
Нужен преподаватель по VBA
 
Вроде не очень в тему, но больше негде, поэтому пишу здесь.
Никакой конкретной задачи нет, просто ищу консультанта по вопросам программирования на VBA для решения текущих вопросов.

Условия такие:
Пишу макросы на работе по мере необходимости, материалом владею достаточно хорошо, т.е. не новичок, но иногда возникают такие вопросы, на которые сам ответить не могу - не хватает знаний или опыта. Поиск в инете занимает очень много времени, а спамить тут на форуме одноразовые и довольно сложные вопросы не хочется.
Хочу, чтобы была возможность задавать такие вопросы опытному человеку в режиме онлайн. Понятно, что уровень преподавателя должен быть соответствующим  :) Если кому-то интересно, пишите здесь или в личку, желательно с бюджетом, т.к. я вообще не представляю, сколько это может стоить))
Изменено: AShatov - 27.07.2015 10:45:11
Выделение на неактивном листе, как в VBA получить выделенный диапазон на неактивном листе?
 
The_Prist, спасибо, то что нужно.
Резюме по теме: выделенные диапазоны на неактивных листах имеют место быть. По крайней мере это понятие не лишено смысла: всё-таки когда мы переходим с одного листа на другой, выделение не сбрасывается, а значит оно где-то сохраняется, и его можно тем или иным способом достать.
Но получить его "штатными" методами без активации каждого листа невозможно.

The_Prist, отдельное спасибо за второй способ. Очень нетривиально и поучительно, я бы самостоятельно не додумался вытащить нужные данные из XML-кода. Возьму на карандаш, может где-то пригодится)))
Изменено: AShatov - 22.08.2015 23:21:43
Выделение на неактивном листе, как в VBA получить выделенный диапазон на неактивном листе?
 
Цитата
Sanja написал:
1Worksheets("Лист1").Range("A1:A10").Copy
Sanja, задача прямо противоположная  :)
Не выделить ячейки и что-то с ними сделать (тогда, конечно, можно обойтись без выделения), а получить в виде объекта Range то, что уже выделено, без активации листов.
Выделение на неактивном листе, как в VBA получить выделенный диапазон на неактивном листе?
 
Цитата
alexthegreat написал:
присвойте имена нужным ячейкам или диапазонам и обращайтесь к ним без выделений.
Присвоение имён - не лучший вариант.
Суть в следующем: пользователь выделяет нужные ему данные на нескольких листах, а задача программы - обработать то, что пользователь выделил.
Выделение на неактивном листе, как в VBA получить выделенный диапазон на неактивном листе?
 
Обычный Selection возвращает выделенный диапазон на листе, который является активным, и вообще говоря, являясь свойством объекта Application, не требует указания конкретного листа, т.к. по умолчанию берёт активный.
А если мне нужно обратиться к выделенным ячейкам неактивного листа?
Типа Workbooks(“…”).Sheets(“…”).Selection
(понятно, что в таком виде работать не будет, просто привёл пример).

И вообще можно ли говорить о выделении на неактивном листе?
Справочник по VBA Excel
 
The_Prist, спасибо, не знал про эту фишку. Теперь автономно всё работает.
Тогда вопрос решён, но в виде отдельного файла, имхо, было бы удобнее и универсальнее.

Цитата
The_Prist написал: http://www.excel-vba.ru/general/knigi-dlya-izucheniya-excel-i-vba/
Скачал, но пока не могу посмотреть, на Win8 без конвертора не открывается.
Справочник по VBA Excel
 
Цитата
ikki написал: а встроенная справка чем не устраивает?
Встроенная это как раз object browser в редакторе VBA, у меня он не работает (не знаю почему): при нажатии на кнопку "поиск" пытается обращаться к office.com и выдаёт что-то типа "к сожалению, ничего не удалось найти по запросу". Насколько я понимаю, встроенная справка на то и встроенная, чтобы быть автономной и не лезть в сеть по любому поводу.
Справочник по VBA Excel
 
Да, что-то типа этого, только нужна оффлайн-версия. Не всегда есть доступ в инет.
Справочник по VBA Excel
 
Всем привет.
Кто-нибудь может подсказать, где можно скачать полный справочник по VBA Excel? Собственно по объектной модели Excel - объекты, методы, свойства и т.п. и по функциям VBA. Только не учебник, а именно справочник без лишней "воды", к которому можно обратиться, если забыл синтаксис той или иной функции.

Странно, но на просторах Интернета ничего похожего не нашёл. Может плохо искал...

Встроенный в редактор VBA "Object Browser" в последнее время не работает  :cry: , а разные онлайн-справочники в интернете очень поверхностны и содержат только часто используемые функции.
Восстановление VBA, в книге обнаружено содержимое, которое не удалось прочитать
 
Всем привет! Давно слежу за жизнью форума, т.к. профессионально работаю в Excel, узнал много нового  :)  Вот теперь решил сам поучаствовать в обсуждении. Тем более, что появился повод - перестали открываться файлы с макросами (Excel 2010).
Выводит стандартное сообщение «в книге обнаружено содержимое, которое не удалось прочитать…». После попытки восстановления пишет, что удалён VBA-проект. Скажу сразу - сами файлы не повреждены (открывал zip-ом, проверял структуру – проект VBA на месте и нормально читается). На других компах тоже всё открывается и работает без проблем.
Что стало причиной сбоя – у меня были установлены два пакета Office - 2013 и 2010. Вчера удалил 2013, после чего и стала возникать ошибка.
Полазил по истории, нашёл похожую проблему: http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=13238. Но там всё закончилось ничем, парню пришлось переустанавливать Office.
Может кто-то знает более просто решение, из-за чего возникает такая ошибка, и как её исправить без переустановки программы? Может дело в версии VBA-редактора, или при удалении Office 2013 пропали какие-то библиотеки… Полное восстановление или переустановку Office делать не хочу, иначе слетят все настройки, в т.ч. в Outlook'е… Хотелось бы обойтись малой кровью.
Заранее спасибо.
Страницы: 1
Наверх