Страницы: 1
RSS
Автоподбор ширины столбца не работает с оператором With, Columns.AutoFit dont work if use With … End With
 
Приветствую!

Суть в заголовке, подробности под спойлером
Пример сделан на умных таблицах, но с обычным диапазоном тоже самое
Кто знает - почему так?
Скрин, файл и код
РЕШЕНО
Даже при "фиксировании" обращения к диапазону через With, он изменится при добавлении/удалении строк/столбцов
Изменено: Jack Famous - 25.11.2021 09:17:51
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Алексей, позорище ты наше Горе ты наше VBAшное   :D
Код
        Debug.Print .Address
        .Insert
        Debug.Print .Address
Изменено: БМВ - 24.11.2021 18:34:25
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ: позорище
ну можно и помягче было сказать…
То, что зафиксированный в обращении диапазон какого-то хрена съезжает — далеко не так очевидно, как тебе кажется

Особенно, учитывая, что конструкция With…End With позиционируется (в том числе и ТОБОЙ) как РАВНОЦЕННАЯ, но более правильная и удобная замена указыванию параметра каждый раз
Будет справедливо, советуя кому-то эту конструкцию в дальнейшем, упоминать, что не такая уж она и равнозначная — это может быть не так очевидно ;)
Изменено: Jack Famous - 24.11.2021 15:03:01
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
конструкция With…End With позиционируется
как кривая замена Set.
С точки зрения этого и планируй логику работы этой конструкции. Получил ссылку на объект, потом меняешь его. И не стоит удивлятся, что уже он содержит уже другой диапазон.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit: замена Set
про Set тоже не знал, что также "фунциклирует" — спасибо  :idea:
Получается, что они "запоминают" диапазон и перемещают его при вставке/удалении строк/столбцов
С этой точки зрения такое сохранение и отслеживание вполне корректно

Цитата
bedvit: С точки зрения этого и планируй логику работы этой конструкции
полностью согласен - это может быть удобно, просто это нужно знать и учитывать  ;)
Не баг, а фича
Изменено: Jack Famous - 24.11.2021 16:15:54
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
bedvit написал:
как кривая замена Set.С точки зрения этого и планируй
Я не понимаю  в чем кривизна?  Просто , как и Const  не переменная , это не ссылка в полной мере.

Цитата
Jack Famous написал:
ну можно и помягче было сказать…
ну это к тому что мог и сам поверить и вопрос бы отпал.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ: мог и сам поверить
я много что мог бы, если бы заподозрил, но ты, похоже, не видишь разницы с вопросом "а что будет, если …" — только вместо задавания этого вопроса можно, просто сделать то, о чём спрашиваешь, а в моём случае, я даже подумать не мог, что там что-то "съезжает"…

Может ещё на массив или вообще на целое число нужно было проверить - ведь мог же?  :sceptic:
Изменено: Jack Famous - 24.11.2021 16:24:28
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
про Set тоже не знал, что также "фунциклирует" —
Set запоминает не диапазон, а ссылку на объект. Потом ты его меняешь и смотришь, что получилось. Поимер: поймал собаку с белым ухом (объект с набором свойств, лапы, цвет, порода...),  повесил поводок (set), далее покрасил хвост в красный. Смотришь а теперь на поводке собака с белым ухом и красным хвостом! И удивляешься, была же на этом поводке собака с серым хвостом ! Как так?))

Цитата
БМВ написал:
Я не понимаю  в чем кривизна?  
в том, что эта кострукция и Set делают одно и тоже, только когда я использую set я явно могу посмотреть к какому объекту я обращаюсь, а когда with нужно смотреть код есть ли другие with, есть ли вложенные with и к какому объекту в данной строке относится это свойство. Не перепутал ли объекты. Кривизна в неудобности работы (не в функционале) если код большой и этот объект используется во многих участках кода.
Редко использую эту конструкцию.
Изменено: bedvit - 24.11.2021 16:35:35
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit: эта кострукция и Set делают одно и тоже
— то есть ссылаются на объект с учётом всех произошедших с ним изменений. Верно?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Да
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, спасибо  :)

Цитата
bedvit: поймал собаку … покрасил хвост в красный … Смотришь
мой пример из #5 уже не кажется таким наглядным, как при создании  :D
Изменено: Jack Famous - 24.11.2021 16:39:54
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
конструкция With…End With позиционируется как кривая замена Set
Первый раз такое читаю. Этот оператор ни разу не ругал. Наоборот, холю и лелею :)

Цитата
bedvit написал: Редко использую эту конструкцию.
Использую часто и часто вместо Set. Одно из удобств - не нужно имя переменной придумывать  )

Цитата
если код большой и этот объект используется во многих участках кода.
А вот не нужно писать длинные простыни :)
Все больше применяю разделение кода на подпроцедуры и функции. Удобно. Писать иногда дольше, да. Но код прозрачнее.
 
О конструкции With Владимир (ZVI) писал здесь.
Владимир
 
sokol92, благодарю  :)

Цитата
ZVI: Из справки по With: Once a With block is entered, object can't be changed
однако  :D
Там немного не о том пояснения, если я правильно понял
Изменено: Jack Famous - 24.11.2021 18:24:18
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Это - достаточно сложный материал, предназначенный для дальнейшего самостоятельного анализа.
Владимир
 
Цитата
sokol92: достаточно сложный материал
это как посмотреть  ;)
В рамках моего вопроса - довольно всё просто, тесты однозначные и говорят о том, что ПРИ ОБРАЩЕНИИ ЧЕРЕЗ With ДИАПАЗОН В ЛЮБОМ СЛУЧАЕ ИЗМЕНИТСЯ при добавлении/удалении строк/столбцов, влияющих на него
Находится он в переменной (диапазона, объекта или вариативной) или нет - значения никакого не имеет

Обновил файл, код и добавил скрин результатов теста, по аналогии с ZVI
Изменено: Jack Famous - 25.11.2021 09:15:56
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх