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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 529 След.
VBA. При удалении элементов из копии словаря, удаляются соответствующие элементы из словаря-источника
 
Цитата
Sanja написал:
В этом конкретном случае или всегда ClearContents?
смотря что имеется в виду. При попытке присвоения Range = Range без указания свойства и с кол-вом ячеек больше одной - я бы сказал всегда :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
VBA. При удалении элементов из копии словаря, удаляются соответствующие элементы из словаря-источника
 
Цитата
МатросНаЗебре написал:
присвоит только значение
тогда доп.уточнение: присвоит свойство по умолчанию. При этом тоже есть свои подводные камни :) Лучше так не делать, потому что свойство по умолчанию VBA может выбрать на свое усмотрение :) Выполните код, но внимательно следите за выполнением - специально добавил Stop:
Код
Sub UnexpectedProperty()
    Range("B1:B2").value = "1"
    Range("A1:A2").value = Range("B1:B2").value
    Stop
    Range("B1:B2") = "1"
    Range("A1:A2") = Range("B1:B2")
End Sub

во второй части свойство не указывается и  VBA применит ClearContents для Range("A1:A2").
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
VBA. При удалении элементов из копии словаря, удаляются соответствующие элементы из словаря-источника
 
Цитата
Sanja написал:
Да, я переопределяю ВТОРОЙ объект, но почему изменяется ПЕРВЫЙ?
выше дописал ПыСы :)
Изменено: Дмитрий(The_Prist) Щербаков - 27.03.2026 10:39:59
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
VBA. При удалении элементов из копии словаря, удаляются соответствующие элементы из словаря-источника
 
Цитата
Sanja написал:
мы создаеи ДВА НЕЗАВИСИМЫХ объекта
Да. Притом при таком коде второй объект вообще нет смысл создавать через CreateObject, т.к. ты его переопределяешь как раз этой строкой:
Код
Set dicCopy = dic

Вот что будет, когда ты сначала определяешь диапазоны так:
Код
Set r1 = Range("A1")
Set r2 = Range("A2")

а потом сделаешь так:
Код
Set r2 = r1

?
Здесь абсолютно тоже самое.

P.S. Не знаю, даст ли эффект, но попробую технически это описать более-менее просто.
При создании любого объекта в памяти ОС выделяется под него кусочек памяти. Если точнее - ссылка на этот кусочек. Это мы все знаем.
Код
Set dic = CreateObject("Scripting.Dictionary")          'создали новый объект, ОС выделила под него ссылку на кусочек памяти
Set dicCopy = CreateObject("Scripting.Dictionary")  'создали новый объект, ОС выделила под него ссылку на кусочек памяти

Да, у каждого объекта свой кусочек. Пока что эти кусочки памяти живут отдельной жизнью, т.к. не было никаких команд, которые бы говорили о другом.
Заполнили dic. Его кусочек памяти расширился. У dicCopy пока остался прежним - мы же его не заполняли.
А теперь мы переопределяем dicCopy, делая ссылку на dic:
Код
Set dicCopy = dic

и вот здесь вступает в роль такая штука как оптимизация памяти. Зачем заполнять еще один кусок памяти одними и теми же данными? Незачем. Поэтому ОС не копирует все данные dic в ячейку памяти, выделенную под dicCopy - а создает там указатель на ячейку памяти dic. И теперь они связаны. По сути у них теперь одна ячейка памяти на двоих. И в итоге невозможно изменить один объект, не изменив второй.
Изменено: Дмитрий(The_Prist) Щербаков - 27.03.2026 10:39:34
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
VBA. При удалении элементов из копии словаря, удаляются соответствующие элементы из словаря-источника
 
Цитата
Sanja написал:
'копия основного словаря
Set dicCopy = dic
очень правильно написано - КОПИЯ. А для объектов - не просто копия, а ссылочная копия. Т.е. dicCopy это ссылка на dic, а не аналог CopyFile. Т.е. делая так ты не создаешь новый словарь со своими элементами, а просто ссылаешься на созданный ранее. С его элементами. Потому что ссылка идет на один и тот же участок памяти, что у исходного dic. Т.е. ты даже не ссылаешься, а "связываешь" два объекта.
Это как ссылка на ячейки на листе - поставил =A1 и та ячейка, в которой эта ссылка полностью повторяет значение ячейки, на которую ссылается. Со всеми вытекающими. Только в случае с Set dicCopy = dic эта связь двустороння. Измени что-то в одном - изменится в другом.
В общем-то, часто используемые конструкции типа:
Код
Set rr = Range("A1") 

ведут себя так же. и это же никого не удивляет :)
Изменено: Дмитрий(The_Prist) Щербаков - 27.03.2026 09:38:00
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Поиск среднего значения при разбитом диапазоне, Среднее значение без учёта 0, при условии что диапазон состоит из разных адресов ячеек
 
Вот такой еще вариант:
Код
=СУММПРОИЗВ((F3:F18)*{0:0:0:1:0:0:0:0:1:0:0:0:0:0:0:1})/СУММПРОИЗВ(--(((F3:F18)*{0:0:0:1:0:0:0:0:1:0:0:0:0:0:0:1})>0))

но если строк много - то лучше через доп.столбец делать. 1 - это желтые ячейки. Но если делать доп.столбец - то там уже можно и СРЗНАЧЕСЛИМН применить по этому доп.столбцу :) Кстати, может так будет и оптимальнее - на отдельном листе просто проставляете единички(1) или иной признак в тех же строках, которые желтые на рабочем листе. А в СРЗНАЧЕСЛИМН одним из условий ссылаетесь на него. Вроде того:
Код
=СРЗНАЧЕСЛИМН(F3:F18;Лист2!A3:A18;1;F3:F18;"<>0")

вполне гибко получится и при изменении структуры или адресов ячеек можно будет просто на этом доп.листе изменить привязки строк.
Изменено: Дмитрий(The_Prist) Щербаков - 25.03.2026 11:48:27
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Поиск среднего значения при разбитом диапазоне, Среднее значение без учёта 0, при условии что диапазон состоит из разных адресов ячеек
 
Цитата
zay_senya_z написал:
вместо строк "среднее по набору..." стоят абсолютно разные наименования
так и как понять какие строки нужны для усреднения? есть хоть какой-то критерий?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Применение правил условного форматирования на другие ячейки, Как применять условное форматирование ко многим ячейкам
 
Цитата
написал:
также не нашел ответа, ткните пальцем
м-да...сложно Вам придется :)
Там же написано подробно что сделать(см.вложенный скрин). Закрепляете ссылку на столбец с условием. Остальные ячейки в зависимости от того, что требуется.
Т.е.:
=$A1>B1
только не знаю, насколько корректна это формула, т.к. у Вас
Цитата
salvadoz написал:
B1 или\и в С1  меньше А2
а она будет подсвечивать и В и С, если они меньше. См.вложение.

А если хотите, чтобы на пальцах показали - прикладывайте свой файл Excel, а не картинки.
Изменено: Дмитрий(The_Prist) Щербаков - 24.03.2026 18:18:27
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Применение правил условного форматирования на другие ячейки, Как применять условное форматирование ко многим ячейкам
 
Сборник формул для условного форматирования
там в начале расписывается как распространять условия на всю таблицу.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Закрепленное значение ячейки ($) не переносится при копировании диапазона
 
Цитата
Wergulla написал:
при копировании значение ячейки А$1 не меняется
Так и не должно :) Это основы работы с ссылками.
Знак доллара перед номером строки означает, что при копировании и распространении формулы - ссылка на такую ячейку не смещается. Уберите знак доллара перед номером строки и все будет смещаться.
Наберите в поисковике: относительные и абсолютные ссылки в Excel - чтобы понимать как это работает.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Макрос создающий пользовательский формат с подстановкой данных через переменную, Макрос создающий пользовательский формат с подстановкой данных через переменную
 
Цитата
Денис Акулов написал:
хотел получать запись формата в виде 0 "км/ч", как я и писал в первом сообщении
А, т.е. именно с кавычками? Ну тоже как бы странно, что не получилось сразу:
Код
    textPart = "\"" км\/ч\"""
    targetCell.NumberFormat = "0 " & textPart

кстати, учитывайте, что при таком формате:
Код
"?" & """" & textPart & """"

если в ячейку будет введено число "0" - то будет отображаться только " км/ч". Без 0. А если вместо вопр.знака в формате указывать 0 - то при значении 0 в ячейке он будет отображаться вместе с "км/ч" - "0 км/ч".
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Прокси для телеграмм, Макрос с прокси для отправки сигналов в телеграмм
 
Попробуйте добавить после oHttp.Open:
Код
oHttp.setProxy 2, "192.168.1.1:port" 'IP и порт, естественно, свои
oHttp.setProxyCredentials "username", "user_password" 'если надо логиниться
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Макрос создающий пользовательский формат с подстановкой данных через переменную, Макрос создающий пользовательский формат с подстановкой данных через переменную
 
Цитата
Денис Акулов написал:
Но было бы интересно реализовать через переменную
а у меня через что? Даже имя переменной Ваше взято :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Макрос создающий пользовательский формат с подстановкой данных через переменную, Макрос создающий пользовательский формат с подстановкой данных через переменную
 
Или так:
Код
targetCell.NumberFormat = "0 км\/ч"

А еще лучше подстраховаться и все символы, которые должны отображаться "как есть", обрамить обратным слешем
Код
    Dim textPart$, x
    textPart = "*км/ч"
    'перечисляем все символы, которые должны отображаться как есть
    'и добавляем к ним левый слеш - спец.сивол,
    'который говорит формату использовать следующий за ним символ "как есть"
    For Each x In Array("/", "*")
        textPart = Replace(textPart, x, "\" & x)
    Next
    targetCell.NumberFormat = "0 " & textPart
Изменено: Дмитрий(The_Prist) Щербаков - 23.03.2026 13:58:08
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Макрос отправки электронного сообщение с текстом, таблицей и переносом информации в общий реестр, Макрос отправки электронного сообщение с текстом, таблицей и переносом информации в общий реестр
 
Если в таблице планируется использование русского текста - в какой-то момент кириллица в письме может "поехать". И поедет она только для таблицы, т.к. для экспорта не будет указана кодировка. Я давал Вам ранее ссылку на статью: Вставить в письмо Outlook таблицу Excel с форматированием
Там этот момент учтен, в функции проставлены все комментарии.
Чтобы кириллица внезапно не отказалась отображаться как надо - перед строкой:
Код
With TempWB.PublishObjects.Add

запишите такую:
Код
TempWB.WebOptions.Encoding = msoEncodingCyrillic
Есть еще момент с адресом - лучше передавать адрес в том стиле, который установлен для приложения(R1C1 или А1) - иначе тоже может быть ошибка.
Изменено: Дмитрий(The_Prist) Щербаков - 19.03.2026 11:21:54
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Выгрузка из Power Query в Excel меняется формат на общий, При выгрузки из power query формат ячейки меняется на общий
 
Установите в таблице на листе нужный формат.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Excel 2016 режим умной таблицы не переводится в обычный режим, поле "преобразовать в диапазон" не активное, Windows 7x32.Excel 2016 режим умной таблицы не переводится в обычный режим, поле "преобразовать в диапазон" не активное.
 
Цитата
Msi2102 написал:
общий доступ?
книгу с умными таблицами нельзя сделать общей - это давнее ограничение.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Excel 2016 режим умной таблицы не переводится в обычный режим, поле "преобразовать в диапазон" не активное, Windows 7x32.Excel 2016 режим умной таблицы не переводится в обычный режим, поле "преобразовать в диапазон" не активное.
 
Цитата
написал:
Файл большой
согласен. И таблиц много. Но какая из не хочет становится обычной - Вы не указываете. Предлагаете по всем листам пробежаться и каждую таблицу попробовать? На "Лист1" у меня все таблицы без проблем преобразовались в диапазоны.
А вот на листе "Панов АН-2026" этого уже не сделать, т.к. на лист установлена защита. Чтобы преобразовать таблицу - надо снять защиту с листа. Да и с остальными листами такая же ситуация. Так что ничего необычного.
Изменено: Дмитрий(The_Prist) Щербаков - 18.03.2026 10:18:25
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Макрос отправки электронного сообщение с текстом, таблицей и переносом информации в общий реестр, Макрос отправки электронного сообщение с текстом, таблицей и переносом информации в общий реестр
 
Цитата
написал:
И функция "Display", вставка подписи, не работает
и не будет, если применять так, как в Вашем коде.
Вставить в письмо подпись из Outlook через VBA - здесь описаны способы вставки подписи, в том числе и при помощи Display. Но применять надо правильно. И лучше прочесть статью внимательно, а не просто копировать код - так может хоть понимание происходящего появится.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Построение графика с дополнительными точками независящими от него
 
Цитата
написал:
графики выстроить по картинкам
ну если по картинкам, а не по данным в листе Excel - то это в другой форум. По фотошопу и т.п.
А если все же по данным Excel - прикладывайте файл с данными. Иначе можно посоветовать только использовать точечную диаграмму.
Изменено: Дмитрий(The_Prist) Щербаков - 17.03.2026 18:58:26
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Условное форматирование ячейки в зависимости от наличия в диапазоне отрицательного значения, Условное форматирование ячейки в зависимости от наличия в диапазоне отрицательного значения
 
=СЧЁТЕСЛИ(A1:A10;"<0")>0
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Вычисление первого и последнего значения в столбце за определенный промежуток времени., Вычисление первого и последнего значения в столбце за определенный промежуток времени.
 
1. Лучше разделить интервалы времени на отдельные ячейки ОТ и ДО. Можно сделать при помощи инструмента "Текст по столбцам" -Разделитель тире.
2. В столбце Е у Вас не время, а время, записанное как текст. Чтобы использовать быстрые формулы их надо преобразовать в реальное время(преобразуем даты и числа, записанные как текст, в реальные даты и числа)
Тогда можно использовать вполне простые формулы, которые будут работать быстро и правильно. Во вложении все это уже сделано.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Удаление строк по условию, Удаление строк по условию
 
Цитата
написал:
не удалить слово "тест", а удалить все строки до слова тест
так в поиске можно набрать "*тест", а в качестве замены - "тест". И будет удалено все до слова "тест"...
Но я так понял, что здесь же надо не текст внутри ячеек удалять - а полностью строки. Поэтому в любом случае вариант не очень подходит.
Изменено: Дмитрий(The_Prist) Щербаков - 17.03.2026 08:15:01
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Как многоблочную таблицу преобразовать в одноблочную?
 
Цитата
написал:
какие материалы можно изучить
начните хотя бы с такого: Как просмотреть этапы вычисления формул
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Изменение кнопки переключателя при открытии файла
 
Код
Private Sub Workbook_Open()
    Dim opt As OptionButton, wsh As Worksheet
    For Each wsh In ThisWorkbook.Worksheets
        For Each opt In wsh.OptionButtons
            opt.Value = xlOff
        Next opt
    Next
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Изменение кнопки переключателя при открытии файла
 
Осталось всем пользователям сказать, чтобы макросы разрешили. Иначе, если макросы отключены - все останется как было :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Изменение кнопки переключателя при открытии файла
 
В таких случаях файл опроса вообще делают доступным только для чтения с выставленными по умолчанию флажками. А когда пользователь заполняет - он может сохранить файл только под новым именем: Запрет редактирования книги без использования макросов
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Вставка подписи в сообщение Outlook макросом
 
Цитата
anddrei55 написал:
Полный код
да, появилась rng, этот вопрос снимается. Но функции RangetoHTML как не было - так и нет. Повторюсь: откуда Вы её взяли неясно, что она делает - можно лишь предположить. Выше дал ссылку со своим предположением.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Вставка подписи в сообщение Outlook макросом
 
Ну и что говорит переводчик на этот счет? Ни на какие мысли не наводит? Почитайте внимательно тему, перейдите по ссылкам - может где-то там есть озвученная функция RangetoHTML, которую Вы не перенесли в свой модуль. Не знаю откуда изначально Вы брали код, что он вдруг "перестал работать", ссылаясь на отсутствие функции. У Вас в коде нет намека ни на функцию, ни на аргумент, который в неё передается - rng.
Ознакомьтесь, может наведет на мысли: Вставка таблицы с полным форматированием через конвертирование в HTML
Не факт, что нужно было это :)
Изменено: Дмитрий(The_Prist) Щербаков - 13.03.2026 10:07:57
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
При выполнении макроса выполняется отмена объединения ячеек, Отмена объединения
 
Не вижу смысла в таких заморочках, когда есть Empty :) Притом, что ClearContents по сути делает тоже самое, только является методом. И цитата не та взята  ;)  - ClearContents как раз не приводит к отмене объединения - он выдаст ошибку, т.к. не может быть использован для только одной ячейки внутри объединенных.  
И еще момент, который стоит упомянуть(мало ли кому пригодится) - если применять MergeArea - то удаление значений происходит во всех ячейках объединенной. На практике не всегда это нужно по нескольким причинам:
1. Не всегда значение только в левой верхней(мы же знаем, что есть разные трюки для сохранения значений всех ячеек)
2. Не всегда надо удалять именно значение левой верхней - иногда объединенная ячейка просто попадает под условие и по сути там ничего не надо удалять, т.к. по условию попадает под очистку та ячейка, которая не является верхней левой. Например, когда удаление происходит в диапазоне в виде строк: Cells(5,2).Resize(,6). При этом объединенная ячейка только в столбце В. В этом случае Empty сработает как ожидалось, ClearContents может удалить лишнее или выдать ошибку, т.к. MergeArea не может быть применено к группе ячеек.
Изменено: Дмитрий(The_Prist) Щербаков - 13.03.2026 10:01:27
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 529 След.
Наверх