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

Страницы: 1
Задание имени для картинки, Изменение принципа именования картинок в Excel 2024
 
"Строка формул"... была у меня отключена в этом файле для визуальной красоты. А теперь вспомнил, что именно так и именовал картинки.
Большое спасибо за помощь!
Задание имени для картинки, Изменение принципа именования картинок в Excel 2024
 
Добрый день! Прошу помощи разобраться в следующей ситуации.
Год или два назад я делал программу в Excel 2021, в которой у меня были вставлены картинки на рабочих листах. Все эти картинки были проименованы и эти имена работают, что подтверждается работоспособностью следующего кода:
Код
ActiveSheet.Shapes.Range(Array("Испания")).PictureFormat.ColorType = msoPictureAutomatic
Но где изменить это имя не могу найти. У картинки нету блока "Свойства" с именем, как например у таблицы. Хотя, насколько я помню, то именно через такой блок я вписывал имена всем картинкам. Проверил, что проблема не в Excel 2024, так как на Excel 2021 сейчас тоже не нашёл блока с именем. Кроме того, запрос в гугле выдал следующий результат:
Цитата
В Excel нет возможности присвоить имя непосредственно картинке, как это можно сделать для ячейки или диапазона ячеек.
Решил проблему с переименованием принудительно через VBA, зная старые названия, но всё же, как обратиться к картинке, не зная её названия?

ВОПРОС: действительно ли сейчас всё поменяли и теперь нельзя вписывать названия вставленных на рабочий лист картинок через Excel или же я просто не смог это найти?
Событие Worksheet_Change для конкретного диапазона
 
Добрый день! Прошу помочь разобраться с событием Worksheet_Change.
С помощью проверки If Target.Column = 2 я делаю так, чтобы событие срабатывало только при изменениях во втором столбце. А можно ли сделать так, чтобы ещё уменьшить этот диапазон до конкретных ячеек? У меня есть именованный через Диспетчер имён диапазон Names. Какой проверкой можно привязать событие только к этому диапазону?
Иерархия объектов на форме, Не получается выставить label на форме так, чтобы он отображался поверх фрейма
 
Вот просто сделал форму с элементами, чтобы не было никакого влияния на них остального кода.

Слева лейблы, кнопка, текстбокс спокойно ложатся друг под друга или друг на друга (меняются слоями), а справа фрейм, который почему-то так не может и всегда остаётся как бы в верхем слое над всеми остальными объектами.
Так что получается, что для того, чтобы этот label3 поднять в слой выше Frame1, нужно только запихнуть его в ещё один фрейм, который уже сможет конкурировать с тем за место выше? Или может таки есть какой-то нюанс или свойство, которое может сделать это проще?
Иерархия объектов на форме, Не получается выставить label на форме так, чтобы он отображался поверх фрейма
 
Добрый день! Проблема похоже максимально простая, но протыкав всюду, куда только можно, так и не смог найти ей решение.
С помощью всплывающего лейбла делаю замену ControlTipText-у. А проблема в том, что label отображается только в пределах фрейма, в котором расположен и не влезая в него просто скрывает всю часть, которая выходит за пределы фрейма. Если создать лейбл за пределами фрейма, то он всё равно будет располагаться под всеми фреймами.
Вопрос: реально ли как-то организовать этот лейбл, чтобы он отображался поверх всех фреймов формы? С другими лейблами или простыми объектами, например, текстбоксами, это решается кнопками Bring Forward / Send Forward в контекстном меню. С фреймами же эти кнопки никак не помогают.
Использование формул в правилах условного форматирования, В определённых местах формулы условного форматирования работают некорректно
 
Ага, теперь точно понял, что это были просто нарисованные на которые никак не могли повлиять установленные правилами. Полностью мой косяк, но пусть лучше будет так, чем баг в работе формул).
Использование формул в правилах условного форматирования, В определённых местах формулы условного форматирования работают некорректно
 
_Boroda_, ГЕНИАЛЬНО! Битый час возился с тяганием туда и оттуда этой таблица, а оказывается надо РАЗ и ГОТОВО!))
Всё равно, конечно, не понятно, как границы ячейки, которых там возможно и не было (границы умной таблицы сами рисуются шаблоном) могут влиять на проверку значений. Вот специально тыкаю сейчас границы в разные места таблицы, чтобы добиться той же ошибки, а нет, всё работает...
Дважды большое СПАСИБО! И за решение проблемы и за подсказку укоротить строку проверки).
Использование формул в правилах условного форматирования, В определённых местах формулы условного форматирования работают некорректно
 
Добрый день! Никак не могу разобраться, от чего возникает некорректная работа формулы условного форматирования.
Задача: Последнее правило условного форматирование должно рисовать границу между строками в случае несоответствия значений в ПЕРВОМ или ВТОРОМ или ПОСЛЕДНЕМ столбцах, т. е. если следующее <> предыдущему.
Результат: Всё работает отлично по всей таблице, кроме трёх мест. Обозначил рядом красным и отдельно выделил по каким условиям работает правило (скриншот). Чтобы рисовалась граница должна быть хотя бы одна ИСТИНА, как в зелёных примерах ниже.
Перепробовал копирование туда-сюда, чтобы избежать каких-либо малейших неточностей в значениях, но условие говорит само за себя: три ЛЖИ дают ИСТИНУ...
Вопрос: Может быть есть какой-то нюанс в работе этих формул или может просто я дурак чего-то очевидного там не вижу?
Изменено: StrangeCry - 13.01.2023 13:42:04
Некорректное изменение свойств объекта, При изменении свойства Font.Underline объект некорректно отображает результат
 
Добрый день! Прошу помочь разобраться в проблеме. Следующий код должен просто подчеркнуть один из label-ов.
Код
For p = 1 To MainCalendar.DataBodyRange.Rows.Count
    If HomeTeam(n) = Range("AwayTeam").Rows(p).Value And AwayTeam(n) = Range("HomeTeam").Rows(p).Value Then
       'Ничья:
        If Range("HomeScore").Rows(RowsCollection(n)) + Range("AwayScore").Rows(p) = Range("AwayScore").Rows(RowsCollection(n)) + Range("HomeScore").Rows(p) Then
            HomeTeamLabel(n).LabelClass.Font.Underline = False
            AwayTeamLabel(n).LabelClass.Font.Underline = False
       'Проход домашней команды:
        ElseIf Range("HomeScore").Rows(RowsCollection(n)) + Range("AwayScore").Rows(p) > Range("AwayScore").Rows(RowsCollection(n)) + Range("HomeScore").Rows(p) Then
            HomeTeamLabel(n).LabelClass.Font.Underline = True
            AwayTeamLabel(n).LabelClass.Font.Underline = False
       'Проход гостевой команды:
        ElseIf Range("HomeScore").Rows(RowsCollection(n)) + Range("AwayScore").Rows(p) < Range("AwayScore").Rows(RowsCollection(n)) + Range("HomeScore").Rows(p) Then
            HomeTeamLabel(n).LabelClass.Font.Underline = False
            AwayTeamLabel(n).LabelClass.Font.Underline = True
        End If
    End If
Next p
Но почему-то он подчёркивает оба вне зависимости от значения True или False. Проверял код пошагово: максимально правильно заходит в нужный ElseIf и срабатывает изменение Font.Underline, вот только срабатывает всегда на True, не зависимо от того, в какой из ElseIf-ов попало. Пробовал и без применения класса, просто по имени label-а, результат такой же.
Может есть какие-то другие варианты изменения этого свойства? Или при каких вообще случаях может происходить такая некорректность?
Не работает пересчёт данных при использовании формул в умной таблице, Формула не работает, когда берёт данные из умной таблицы, которые рассчитаны автоматической формулой
 
Виноват... Просто там в формуле несколько запутанных функций написанных мной отдельно и сидеть разбираться в этом просить как-то неудобно. Думал, вдруг есть какое-то простое решение проблемы. Но проблема походу как раз таки в сложности моих функций, ведь простые автоматически считаются нормально.
Сделал ещё одну проверку: отключил автоматический пересчёт функций - теперь с кнопки "пересчитать" всё корректно работает. Но как только выставляю автоматический пересчёт, всё опять ломается.
Вывод: не напрягайте эксель сложными формулами, чтобы он не напрягал вас...
Изменено: StrangeCry - 24.09.2022 20:34:01
Не работает пересчёт данных при использовании формул в умной таблице, Формула не работает, когда берёт данные из умной таблицы, которые рассчитаны автоматической формулой
 
Цитата
написал:
Здравствуйте. А автоматический пересчёт формул включен?
Да, конечно.
Сделал более тщательную проверку (Скриншот 3). Чётко видно, что выдаёт результат "и1", который соответствует ЛЖИ, что как бы не соответствует логике функции ЕСЛИМН, ведь должен выводиться результат при ИСТИНЕ, ну или хотя бы какая-то ошибка, если ИСТИНЫ нет.
Но после двойного клика + enter по любой ячейке Таблицы1 всё корректно пересчитывается. Хотя, по сути, формулами там записывается такое же обычное число, как и при записи вручную.

Прописал в постороннем столбце максимально простую формулу - работает нормально. То есть, проблема в сложности формулы (она и правда сложная, на 15 строк). Но всё равно не совсем понятно, почему сложная формула на 100% корректно работает при ручном вводе значений в умную таблицу и отказывается работать при вводе того же самого в умную таблицу, но через формулу.
Изменено: StrangeCry - 24.09.2022 18:57:20
Не работает пересчёт данных при использовании формул в умной таблице, Формула не работает, когда берёт данные из умной таблицы, которые рассчитаны автоматической формулой
 
Добрый день! Изначально проблемы не было. Есть Таблица1 и посторонний столбец (Скриншот 1). В постороннем столбце вычисляются значения на основании результатов в Таблице1. Ввожу вручную результаты в Таблицу1 и посторонний столбец всё корректно считает динамически. Всё работает, как надо.
Но, как только делаю в Таблице1 формулы для того, чтобы результаты вписывались не вручную, а брались из другой таблицы, формула в постороннем столбце перестаёт корректно работать.
Это подтверждается при проверке формулы на Скриншоте 2: видно, что результат должен быть "1", как при ИСТИНЕ, а он выдаёт пустоту, которая задана при ЛЖИ.
Но если тут же сработать вручную формулу в Таблице1, то формула в постороннем столбце работает.
Отсюда возникает вопрос: это такой нюанс работы умной таблицы или может как-то можно включить корректный пересчёт при использовании формул?
Условное форматирование ячеек, Выделение ячейки нужным цветом через функцию условного форматирования
 
Марат Хасанов, нужно просто выставить правильный приоритет правил.
Правило для жёлтого:
Цитата
Значение ячейки | меньше | =СЕГОДНЯ()+30
И следующий порядок правил сверху вниз: белый, красный, жёлтый, зелёный.
Изменено: StrangeCry - 19.07.2022 10:54:14
Программное создание ToggleButton на рабочем листе
 
Цитата
написал:
а чем отличается кнопка поставленная программно, от кнопки, которую я поставил вручную в сообщении 4чем она лучше, чем она более функциональна??
Вручную кнопки хорошо ставятся тогда, когда известно, где её нужно ставить. А если место, куда её нужно вставлять не определено, а лист даже ещё не создан, то мне кажется программный вариант как раз кстати.
Цитата
написал:
можете допустить что пользователь взял и защитил лист (что ему помешает это сделать?) что в этом случае случится с вашей замечательной кнопкой?
Про это даже не думал. Буду надеяться, что никто до такого не додумается)).
Цитата
написал:
если смысл этого всего - просто поставить кнопку (кстати, где тут проблема ее поставить??)
Проблема в том, что этой кнопкой был Toggle. Как мне подсказали из одной книги, он не относится к “стандартным” элементам управления, а значит вполне логично, что может работать некорректно. Видимо, поэтому и получается, что во втором варианте кода в первом сообщении Buttons.Add работает, Labels.Add работает, TextBoxes.Add работает, CheckBoxes.Add работает, а ToggleButtons.Add не работает.
Цитата
написал:
я за свою жизнь решил много бессмысленных задач, разница только в том, я что я не выносил это на всеобщее обозрение, мне было интересно, у меня было время - я решал бессмысленную задачу и рос над собой как программист)
Ну, вот убил я целый день на какую-то кнопку и "вырос как программист"). Может теперь когда-то кому-то и пригодится в поиске.
Цитата
написал:
и где там заявленный в теме Toggle???
Вообще-то, там в 12 строках кода 6 Toggle (специально не переименовывал, чтобы было видно). Хотя, любой другой элемент тоже должен работать.  
Программное создание ToggleButton на рабочем листе
 
Цитата
написал:
Цитата
StrangeCry написал:
Итого и ToggleButton и обработка его события создаётся автоматически кодом VBA
 зачем?
Затем, что это было темой данной темы: "Программное создание объекта на листе".
Конечный пользователь теперь будет крайне счастлив, что у него на листе есть кнопочка, которой он возможно никогда и не воспользуется)).
Программное создание ToggleButton на рабочем листе
 
Чтобы не оставлять тему без решения, привожу пример того, как решил проблему:
Код
Public Sub CreateToggleButton()
    Dim Toggle As OLEObject
    Set Toggle = ActiveSheet.OLEObjects.Add(ClassType:="Forms.ToggleButton.1", Link:=False, _
        DisplayAsIcon:=False, Left:=630, Top:=266.25, Width:=52.5, Height:=30)
    Toggle.Object.Caption = "Toggle"
    Toggle.Name = "ToggleBut"
    With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
        .InsertLines .CountOfLines + 1, "Private Sub ToggleBut_Click()"
        .InsertLines .CountOfLines + 1, "   MsgBox ""OK"""
        .InsertLines .CountOfLines + 1, "End Sub"
    End With
End Sub
Код оператора With принудительно записывает три строки текста в код листа. В данном случае процедуру обработки события Click.
Итого и ToggleButton и обработка его события создаётся автоматически кодом VBA.
Программное создание ToggleButton на рабочем листе
 
Спасибо за помощь.
Программное создание ToggleButton на рабочем листе
 
Ігор Гончаренко, но это заранее вставленная на лист кнопка. А нужна именно програмно создаваемая (и не кнопка, а именно ToggleButton) из макроса, так как заранее не известно ни место положение кнопки ни размер столбца. Что возвращает к той же проблеме, что невозможно это правильно создать на листе.
Изменено: StrangeCry - 26.06.2022 02:48:43
Программное создание ToggleButton на рабочем листе
 
Ігор Гончаренко, задача простейшая. Нужен переключатель, который будет округлять значения (баллы) в определённом столбце до целого и обратно.
То есть, при нажатом переключателе .NumberFormat = "0", а при отжатом .NumberFormat = "0.00".
Кнопка с этой задачей тоже хорошо справится: можно вместо переключения ToggleButton'a, сделать просто смену текста кнопки. Но всё же хотелось бы именно ToggleButton.
Программное создание ToggleButton на рабочем листе
 
Прошу помощи в создании выключателя ToggleButton и обработки его события через код VBA. Имею два подхода, но оба заходят в тупик.
Код
Dim Toggle As OLEObject
Set Toggle = ActiveSheet.OLEObjects.Add(ClassType:="Forms.ToggleButton.1", Link:=False, _
    DisplayAsIcon:=False, Left:=630, Top:=266.25, Width:=52.5, Height:=30)
Toggle.Object.Caption = "Toggle"
Этим кодом вполне корректно создаётся ToggleButton, но как привязать макрос сюда я не знаю. Toggle.OnAction не работает.
Код
With ActiveSheet.Buttons.Add(Left:=550, Top:=6, Width:=100, Height:=22.5)    
    .OnAction = "Module1.ToggleMacros"
    .Caption = "Toggle"
End With
Этот код делает то, что нужно и привязывает с помощью .OnAction нужный макрос. Вот только это обычная кнопка. Таким же образом можно создать Лэйбл или ТекстБокс, если вместо Buttons записать Labels или TextBoxes. Но вот ToggleButtons почему-то не работает.
Прозрачность кнопки на рабочем листе Excel
 
SAS888, спасибо! Это тоже частично решило проблему. Правда у переключателя почему-то такого свойства нету, но зато наверно таки разобрался, что это всё таки какой-то баг. Оказывается прозрачность теряется после нажатия не на одну секунду, а до тех пор пока курсор остаётся в пределах кнопки.
Прозрачность кнопки на рабочем листе Excel
 
Решил проблему принудительной переадресацией на ячейку:
Код
Private Sub ToggleButton1_Click()
    Range("A1").Activate
End Sub
Но прозрачность кнопки всё равно теряется на 1 секунду после нажатия, так что вопрос остаётся актуальным.
Прозрачность кнопки на рабочем листе Excel
 
Здравствуйте! Столкнулся с проблемой при работе с прозрачностью кнопки.
Если делать кнопку на форме, то свойство fmBackStyleTransparent, которое делает кнопку прозрачной, работает правильно. Но, если же добавить кнопку (элемент ActiveX) на рабочий лист, то данное свойство изначально делает кнопку прозрачной, но сразу после нажатия на неё прозрачность теряется и появляется снова только после клика на какой-то другой объект.
Вопрос: это такой неудобный нюанс работы кнопки на листе или может нужно как-то дополнительно программировать кнопку, чтобы прозрачность сохранялась и после нажатия?
UBound и LBound: результат функциий почему-то -1 и 0
 
sokol92, к сожалению, не могу выложить весь код файлом (пишу его не один и выкладывать куда-то его мне запрещают). Но данная проблема каким-то макаром решилась сама собой, ведь на следующий день тоже решение уже показало в Watches, что тот массив и правда определён как (-1 to 0). Так что функции UBound и LBound работают правильно. Только их целесообразность отпала... Тем не менее, нашёл способ определить количество объектов на форме через свойство Count и там всё отлично получилось.
Но возникла другая проблема... Которая так же возможно связана с тем, что я не до конца понимаю различия написания кода в обычном модуле и модуле класса.

Нужно сделать три ToggleButton'а, но не на переключение ВКЛ/ВЫКЛ, а так, чтобы при нажатии на один, он делался ВКЛ, а два других автоматически делались ВЫКЛ.
Теоретически всё просто: проверяю условием, какой тоглбаттон нажат и выставляю правильную комбинацию свойств Value всех трёх. Но на практике выдаёт ошибку:


Определены тоглбаттоны в модуле класса:
Dim OnlyHomeMatchesToggleButton As New ClassModule, OnlyAwayMatchesToggleButton As New ClassModule, AllMatchesToggleButton As New ClassModule

И заданы следующим образом:

Что может быть не так? Какое-то специфическое обращения к свойствам должно быть в модуле класса или может я просто не правильно их задаю/определяю?
UBound и LBound: результат функциий почему-то -1 и 0
 
Добрый день! Столкнулся с некорректной роботой функций UBound и LBound и не могу разобраться почему. Процедура записана в модуле класса.

В момент выполнения функций UBound и LBound массив AllMatchesHomeTeamLabel, определяемый как Dim AllMatchesHomeTeamLabel() As New ClassModule, имеет размерность (1 to 17), но результат функции почему-то выдают -1 и 0.
Проверял функции в обычном модуле: там и массив, определяемый как Public HomeK1() As Double, и как Public HomeTeamLabel() As New ClassModule, выдают правильные значения своих верхних и нижних индексов.
Поэтому сделал вывод, что это либо связано с тем, что процедура записана в модуле класса и там есть какие-то свои нюансы, либо есть какая-то ошибка, которой я не вижу?
Страницы: 1
Наверх