Столкнулся с проблемой при создании диаграмм (пример во вложенном файле). Есть две диаграммы. На одной отражаются продажи продуктов поквартально, а на другой по годам. Обе диаграммы однотипные, как по форматированию, так и по размеру. Данные для построения диаграммы указываются с помощью макроса, который привязан к выпадающему списку. При выборе в выпадающем списке определенного продукта, макрос выбирает соответствующие данные из таблицы. При этом на диаграммах также отражается сама таблица данных, на основании которых построена диаграмма. Поскольку количество рядов данных может быть разным (в зависимости от выбранной позиции из выпадающего списка), то и высота области построения диаграммы получается разная, что визуально не красиво. Проблему решил указанием в коде на конкретную высоту области построения. НО. Это работает корректно только для одной диаграммы (Диаграмма 1 в файле). С Диаграммой 2 (в которой отражаются данные по годам) почему-то начинает произвольно (на мой взгляд) меняться ширина области построения. Пытался решить проблему указанием в коде на конкретную ширину области построения, но никакого эффекта не дает. Ширина продолжает "гулять" как захочет. В интернете также не нашел какой-то похожей ситуации.
Буду благодарен за помощь, заранее спасибо.
Всем здравствуйте!
Столкнулся с проблемой при создании диаграмм (пример во вложенном файле). Есть две диаграммы. На одной отражаются продажи продуктов поквартально, а на другой по годам. Обе диаграммы однотипные, как по форматированию, так и по размеру. Данные для построения диаграммы указываются с помощью макроса, который привязан к выпадающему списку. При выборе в выпадающем списке определенного продукта, макрос выбирает соответствующие данные из таблицы. При этом на диаграммах также отражается сама таблица данных, на основании которых построена диаграмма. Поскольку количество рядов данных может быть разным (в зависимости от выбранной позиции из выпадающего списка), то и высота области построения диаграммы получается разная, что визуально не красиво. Проблему решил указанием в коде на конкретную высоту области построения. НО. Это работает корректно только для одной диаграммы (Диаграмма 1 в файле). С Диаграммой 2 (в которой отражаются данные по годам) почему-то начинает произвольно (на мой взгляд) меняться ширина области построения. Пытался решить проблему указанием в коде на конкретную ширину области построения, но никакого эффекта не дает. Ширина продолжает "гулять" как захочет. В интернете также не нашел какой-то похожей ситуации.
Может быть какой-то локальный глюк, я в 365 ничего такого не замечаю, высота устанавливается если её принудительно изменить, ширина произвольно не меняется
Может быть какой-то локальный глюк, я в 365 ничего такого не замечаю, высота устанавливается если её принудительно изменить, ширина произвольно не меняетсяHugo
gling, Странно. Попробовал на 2-х разных компьютерах и на ноутбуке. Везде стоит 2016 и везде одинаково, при выборе продукта из списка для диаграммы 2 произвольно меняется ширина области построения диаграммы (именно области построения, а не самой диаграммы). И даже если, например, выбираешь продукт 2 и принудительно задаешь ширину, то если потом выбрать продукт 1 , а затем опять продукт 2, то ширина области построения меняется относительно той, которая задавалась принудительно. Думал, что может просто с конкретным файлом что-то не так. Создал на другом компе заново клона, но проблема та же.
gling, Странно. Попробовал на 2-х разных компьютерах и на ноутбуке. Везде стоит 2016 и везде одинаково, при выборе продукта из списка для диаграммы 2 произвольно меняется ширина области построения диаграммы (именно области построения, а не самой диаграммы). И даже если, например, выбираешь продукт 2 и принудительно задаешь ширину, то если потом выбрать продукт 1 , а затем опять продукт 2, то ширина области построения меняется относительно той, которая задавалась принудительно. Думал, что может просто с конкретным файлом что-то не так. Создал на другом компе заново клона, но проблема та же.Lyova
Hugo, Дак она у Вас тоже "гуляет" на видео. Обратите внимание на шкалу ординат - она то совпадает с вертикальной линией, то уходит влево в зависимости от выбранного продукта (продукт 2, 3, 4), значения шкалы ординат смещаются влево. А на диаграмме 1 такого эффекта нет.
Hugo, Дак она у Вас тоже "гуляет" на видео. Обратите внимание на шкалу ординат - она то совпадает с вертикальной линией, то уходит влево в зависимости от выбранного продукта (продукт 2, 3, 4), значения шкалы ординат смещаются влево. А на диаграмме 1 такого эффекта нет.Lyova
Hugo, Я пытался решить это проблему, записав макрорекордером принудительное задание ширины, затем вставил этот код в макрос, который привязан к выпадающему списку, но это не помогло.
Hugo, Я пытался решить это проблему, записав макрорекордером принудительное задание ширины, затем вставил этот код в макрос, который привязан к выпадающему списку, но это не помогло.Lyova
Hugo, Я имел в виду не в приложенном файле, а в другом, когда упражнялся, пытаясь решить проблему. Причем, что интересно, если из кода убрать принудительное задание высоты, то проблема пропадает.
Hugo, Я имел в виду не в приложенном файле, а в другом, когда упражнялся, пытаясь решить проблему. Причем, что интересно, если из кода убрать принудительное задание высоты, то проблема пропадает.Lyova
Сообщение отредактировал Lyova - Вторник, 17.09.2024, 21:33
Hugo, Да, с пробелами все работает, спасибо огромное! Все гениальное, как говориться, просто. Еще вопрос, не знаете, как автоматизировать определение длины самого длинного названия в списке "в пробелах". Чтобы, если поменять названия в списке, не вручную длину пробелами каждый раз подгонять.
Hugo, Да, с пробелами все работает, спасибо огромное! Все гениальное, как говориться, просто. Еще вопрос, не знаете, как автоматизировать определение длины самого длинного названия в списке "в пробелах". Чтобы, если поменять названия в списке, не вручную длину пробелами каждый раз подгонять.Lyova
Можно в том же макросе который задаёт область данных пробежаться по заголовкам, высчитать макс. длину, добить все до этого значения пробелами. Можно просто отрезать слева нужное количество символов от сцепки значения с пробелами - одна строка кода. Когда высчитано сколько нужно.
Можно в том же макросе который задаёт область данных пробежаться по заголовкам, высчитать макс. длину, добить все до этого значения пробелами. Можно просто отрезать слева нужное количество символов от сцепки значения с пробелами - одна строка кода. Когда высчитано сколько нужно.Hugo
Hugo, В том то и дело, что в каких единицах считать длину. Если в знаках, то 1 буква равна 1 знаку и 1 пробел равен 1 знаку. Но в данном случае, чтобы подогнать визуальную длину пробелами, то вместо одной недостающей буквы нужно ставить 2 пробела (а вместо некоторых букв даже 3 пробела). Например "ПРОДУКТ" - 7 знаков, а чтобы сделать "ПРОДУК" той же длины, то нужно прибавить 2 пробела, т.е. уже будет 8 знаков. Опытным путем определил, что буква "Д" равна трем пробелам.
Hugo, В том то и дело, что в каких единицах считать длину. Если в знаках, то 1 буква равна 1 знаку и 1 пробел равен 1 знаку. Но в данном случае, чтобы подогнать визуальную длину пробелами, то вместо одной недостающей буквы нужно ставить 2 пробела (а вместо некоторых букв даже 3 пробела). Например "ПРОДУКТ" - 7 знаков, а чтобы сделать "ПРОДУК" той же длины, то нужно прибавить 2 пробела, т.е. уже будет 8 знаков. Опытным путем определил, что буква "Д" равна трем пробелам.Lyova
Странно, у меня сработало вручную пробелами, но тот файл я уже удалил. Сейчас стал делать кодом - пробелы уже не спасают, ни простые, ни неразрывные... Делал так: [vba]
Код
Dim a, i&, mx& With Range("AR156:AR160") a = .Value For i = 1 To UBound(a) If mx < Len(a(i, 1)) Then mx = Len(a(i, 1)) Next For i = 1 To UBound(a) a(i, 1) = Left(a(i, 1) & String(mx, "_"), mx) Next .Value = a End With
[/vba] Оставил символ подчёркивания, с ним естественно ОК
P.S. Нужно подобрать устраивающий моноширинный шрифт - тогда и с пробелами ОК
Странно, у меня сработало вручную пробелами, но тот файл я уже удалил. Сейчас стал делать кодом - пробелы уже не спасают, ни простые, ни неразрывные... Делал так: [vba]
Код
Dim a, i&, mx& With Range("AR156:AR160") a = .Value For i = 1 To UBound(a) If mx < Len(a(i, 1)) Then mx = Len(a(i, 1)) Next For i = 1 To UBound(a) a(i, 1) = Left(a(i, 1) & String(mx, "_"), mx) Next .Value = a End With
[/vba] Оставил символ подчёркивания, с ним естественно ОК
P.S. Нужно подобрать устраивающий моноширинный шрифт - тогда и с пробелами ОКHugo
Это потому что приравнивается 1 пробел к одному символу и 1 буква к 1 символу. А фактически же может быть от 2 до 3 пробелов на одну букву для визуального выравнивания. С нижним подчеркиванием, конечно, работает четко, но выглядит не очень.
Цитата
Странно, у меня сработало вручную пробелами
Это потому что приравнивается 1 пробел к одному символу и 1 буква к 1 символу. А фактически же может быть от 2 до 3 пробелов на одну букву для визуального выравнивания. С нижним подчеркиванием, конечно, работает четко, но выглядит не очень.Lyova
Сообщение отредактировал Lyova - Среда, 18.09.2024, 01:40
Hugo, Что Вы имеете ввиду под "отлично"? Я сейчас попробовал два моноширинных шрифта использовать, Consolas и Courier New. Все то же самое, ширина пробела у них не равна ширине буквы и поэтому пробелов нужно больше.
Hugo, Что Вы имеете ввиду под "отлично"? Я сейчас попробовал два моноширинных шрифта использовать, Consolas и Courier New. Все то же самое, ширина пробела у них не равна ширине буквы и поэтому пробелов нужно больше.Lyova