Excel vba примечание авторазмер

Обновлено: 07.07.2024

К сожалению, в объединенных ячейках метод VBA Excel AutoFit не работает. Но есть возможность подогнать ширину такой ячейки под длину текста с помощью макроса.

Здесь мы рассмотрим макрос для автоподбора ширины ячейки, объединенной с другими по горизонтали в одной строке, которые обычно используются в заголовках электронных таблиц Excel. Ширина столбцов, пересекающихся с объединенной ячейкой, будет одинаковой. Код работает и с необъединенными ячейками.

Для решения задачи по автоподбору ширины необходимо с помощью кода VBA определить:

  1. Длину текста (количество символов). Длина одного символа текста со шрифтом и его размером по умолчанию приблизительно соответствует длине символа, в котором измеряется ширина ячейки.
  2. Размер шрифта, чтобы рассчитать коэффициент, увеличивающий или уменьшающий ширину ячейки в зависимости от его (шрифта) размера.
  3. Количество столбцов в объединенной ячейке, чтобы вычислить ширину одного столбца.

Макрос VBA Excel для автоподбора ширины ячейки с учетом размера используемого шрифта:

  • myCell — отдельная ячейка в объединенной;
  • myLen — длина текста в активной ячейке;
  • myCount — количество столбцов, которое соответствует количеству горизонтально расположенных отдельных ячеек в объединенной;
  • k — коэффициент, вносящий поправку в зависимости от размера шрифта;
  • n — размер шрифта по умолчанию.*

* У меня по умолчанию установлен шрифт Calibri размером 11, поэтому n = 11. Если у вас по умолчанию Arial размером 10, тогда и в коде укажите n = 10. Далее подкорректируйте значение переменной n опытным путем, так как длина текста зависит от процентного соотношения широких и узких символов, если шрифт не моноширинный. Переменной n можно присваивать и дробные значения для более точного автоподбора.

Данный код VBA Excel работает с выделенной ячейкой. Вы можете задать список адресов объединенных ячеек и пройтись макросом по каждой из них.

Обработка списка ячеек

Укажите список объединенных ячеек в качестве аргументов функции Array. Для списка используйте адреса только первых ячеек из состава объединенных. Можно добавлять в список и адреса одиночных ячеек.

Подскажите, пожалуйста, как можно макросом добавить примечание в активную ячейку листа "Отчет".

Подскажите, пожалуйста, как можно макросом добавить примечание в активную ячейку листа "Отчет".

Подскажите, пожалуйста, как можно макросом добавить примечание в активную ячейку листа "Отчет".

Заранее благодарю. Автор - Hyperboreus
Дата добавления - 22.04.2013 в 17:03

[/vba] Автор - Serge_007
Дата добавления - 22.04.2013 в 17:09 Подскажите, пожалуйста, как можно макросом добавить примечание в активную ячейку листа "Отчет".

Забыл сказать, на листе присутствуют защищённые ячейки, а лист защищён паролем (изменения можно делать только макросом, а не через интерфейс пользователя).
Предполагалось добавлять примечания в активные ячейки (кроме защищённых) макросом.

Подскажите, пожалуйста, как можно макросом добавить примечание в активную ячейку листа "Отчет".

Забыл сказать, на листе присутствуют защищённые ячейки, а лист защищён паролем (изменения можно делать только макросом, а не через интерфейс пользователя).
Предполагалось добавлять примечания в активные ячейки (кроме защищённых) макросом. Hyperboreus

Подскажите, пожалуйста, как можно макросом добавить примечание в активную ячейку листа "Отчет".

Забыл сказать, на листе присутствуют защищённые ячейки, а лист защищён паролем (изменения можно делать только макросом, а не через интерфейс пользователя).
Предполагалось добавлять примечания в активные ячейки (кроме защищённых) макросом. Автор - Hyperboreus
Дата добавления - 22.04.2013 в 17:17

Спасибо. Насколько я понял, этот макрос добавляет в примечание уже готовый текст. А как быть если необходимо непосредственно руками, после выполнения макроса, вводить текст примечания.

Спасибо. Насколько я понял, этот макрос добавляет в примечание уже готовый текст. А как быть если необходимо непосредственно руками, после выполнения макроса, вводить текст примечания. Hyperboreus

Спасибо. Насколько я понял, этот макрос добавляет в примечание уже готовый текст. А как быть если необходимо непосредственно руками, после выполнения макроса, вводить текст примечания. Автор - Hyperboreus
Дата добавления - 22.04.2013 в 17:21

[/vba] Автор - Serge_007
Дата добавления - 22.04.2013 в 17:28 То есть пустой комментарий без возможности редактирования? То есть пустой комментарий без возможности редактирования? Hyperboreus Почему? Можно и редактировать
Что мешает Вам самому проверить? Почему? Можно и редактировать
Что мешает Вам самому проверить? Serge_007 Проверял. Происходит добавление пустого примечания. Изменить (редактировать) примечание через правую кнопку нельзя, так как лист защищён от изменений, вносимых посредством интерфейса. Можно только через макрос. Проверял. Происходит добавление пустого примечания. Изменить (редактировать) примечание через правую кнопку нельзя, так как лист защищён от изменений, вносимых посредством интерфейса. Можно только через макрос. Hyperboreus Поскольку опыта общения с макросами практически нет, и не всегда в целом получается решить проблему. Поэтому обращаюсь к знающим людям. Поскольку опыта общения с макросами практически нет, и не всегда в целом получается решить проблему. Поэтому обращаюсь к знающим людям. Hyperboreus Изменить (редактировать) примечание через правую кнопку нельзя, так как лист защищён от изменений А причём здесь макрос?! Вы и сами ведь определили причину - защита листа. Снимайте её, правьте примечания и ставьте заново Изменить (редактировать) примечание через правую кнопку нельзя, так как лист защищён от изменений А причём здесь макрос?! Вы и сами ведь определили причину - защита листа. Снимайте её, правьте примечания и ставьте заново Serge_007 Изменить (редактировать) примечание через правую кнопку нельзя, так как лист защищён от изменений А причём здесь макрос?! Вы и сами ведь определили причину - защита листа. Снимайте её, правьте примечания и ставьте заново Автор - Serge_007
Дата добавления - 23.04.2013 в 23:36 А причём здесь макрос?! Вы и сами ведь определили причину - защита листа. Снимайте её, правьте примечания и ставьте заново

Сама форма предусмотрена с защитой. Защита была поставлена в целях сохранения структуры формы (чтобы лишнего не добавляли). На листе есть кнопка к которой привязан макрос добавляющий строки (через меню нельзя добавить). Значения в некоторые ячейки и так можно вводить, так как у них снята защита, но добавить примечание нельзя. Поэтому было выдвиното предложение о создании второй кнопки, позволяющей добавить примечание в активную ячейку.

Т.е. насколько я понял, Вы предлагаете использовать макрос, который выполняет следующие действия:
1. Снимает защиту с листа;
2. Добавляет примечание;
3. Ставит защиту листа.

А причём здесь макрос?! Вы и сами ведь определили причину - защита листа. Снимайте её, правьте примечания и ставьте заново

Сама форма предусмотрена с защитой. Защита была поставлена в целях сохранения структуры формы (чтобы лишнего не добавляли). На листе есть кнопка к которой привязан макрос добавляющий строки (через меню нельзя добавить). Значения в некоторые ячейки и так можно вводить, так как у них снята защита, но добавить примечание нельзя. Поэтому было выдвиното предложение о создании второй кнопки, позволяющей добавить примечание в активную ячейку.

Т.е. насколько я понял, Вы предлагаете использовать макрос, который выполняет следующие действия:
1. Снимает защиту с листа;
2. Добавляет примечание;
3. Ставит защиту листа. Hyperboreus

А причём здесь макрос?! Вы и сами ведь определили причину - защита листа. Снимайте её, правьте примечания и ставьте заново

Сама форма предусмотрена с защитой. Защита была поставлена в целях сохранения структуры формы (чтобы лишнего не добавляли). На листе есть кнопка к которой привязан макрос добавляющий строки (через меню нельзя добавить). Значения в некоторые ячейки и так можно вводить, так как у них снята защита, но добавить примечание нельзя. Поэтому было выдвиното предложение о создании второй кнопки, позволяющей добавить примечание в активную ячейку.

Т.е. насколько я понял, Вы предлагаете использовать макрос, который выполняет следующие действия:
1. Снимает защиту с листа;
2. Добавляет примечание;
3. Ставит защиту листа. Автор - Hyperboreus
Дата добавления - 24.04.2013 в 11:45

Быть или не быть, вот в чем загвоздка!

[/vba] Автор - RAN
Дата добавления - 24.04.2013 в 12:05

RAN, Да, Ваш вариант работает. БОЛЬШОЕ СПАСИБО.

По ходу дела возник еще вопрос.

Например процедура добавления примечания прошла успешно. Если необходимо в уже сущуствующее примечание добавить еще текст (например при составлении отчёта по бизнес-плану за отчётный период). Т.е. в строке прочие расходы суммируется числа по 7-8 позициям, соответственно необходимо занести в примечание какая сумма и что она значит. Не всегда получается это внести за один раз. Иногда приходится возвращаться к этой сумме и ещё что-то добавлять, т.о. необходимо и в примечании делать изменения.

Как это можно осуществить через макрос.

RAN, Да, Ваш вариант работает. БОЛЬШОЕ СПАСИБО.

По ходу дела возник еще вопрос.

Например процедура добавления примечания прошла успешно. Если необходимо в уже сущуствующее примечание добавить еще текст (например при составлении отчёта по бизнес-плану за отчётный период). Т.е. в строке прочие расходы суммируется числа по 7-8 позициям, соответственно необходимо занести в примечание какая сумма и что она значит. Не всегда получается это внести за один раз. Иногда приходится возвращаться к этой сумме и ещё что-то добавлять, т.о. необходимо и в примечании делать изменения.

Как это можно осуществить через макрос.

По ходу дела возник еще вопрос.

Например процедура добавления примечания прошла успешно. Если необходимо в уже сущуствующее примечание добавить еще текст (например при составлении отчёта по бизнес-плану за отчётный период). Т.е. в строке прочие расходы суммируется числа по 7-8 позициям, соответственно необходимо занести в примечание какая сумма и что она значит. Не всегда получается это внести за один раз. Иногда приходится возвращаться к этой сумме и ещё что-то добавлять, т.о. необходимо и в примечании делать изменения.

Как это можно осуществить через макрос.

Заранее спасибо. Автор - Hyperboreus
Дата добавления - 24.04.2013 в 13:55

Чтобы использовать в Excel встроенную автоформу, необходимо добавить кнопку ее вызова на панель инструментов. Как это сделать, смотрите в статье «Умная таблица» в Excel.

Встроенная автоформа работает с любой таблицей Excel, а не только с «умной». Главное, чтобы приложение могло интерпретировать диапазон как таблицу. Для этого необходимо выделить заголовки столбцов отличающимся от тела таблицы форматированием (цветом, курсивом, полужирным начертанием) и заполнить хотя бы одну строку.

Чтобы отобразить встроенную автоформу Excel, выберите ячейку внутри таблицы и нажмите кнопку вызова автоформы на панели инструментов.


Главный недостаток встроенной автоформы Excel заключается в невозможности использования раскрывающихся списков для заполнения ее полей. Для таблицы на изображении выше мы создадим с помощью кода VBA Excel пользовательскую автоформу с текстовыми полями и раскрывающимися списками.

Создание пользовательской автоформы

Рабочая таблица и списки

Наименования полей и наборы данных для раскрывающихся списков при создании пользовательской автоформы будем брать с листа «Списки».


Все изменения в наименования полей и наборы данных также вносятся на листе «Списки». На лист «Таблица» наименования граф копируются с листа «Списки» формулами, строка заголовков закреплена и добавлена кнопка «Новая запись» для вызова пользовательской автоформы.


В коде VBA, создающем автоформу, используются имена листов: Лист1 («Таблица») и Лист2 («Списки»). Благодаря этому, можно переименовывать ярлычки листов без внесения изменений в код. Кнопка «Новая запись» добавлена на рабочий лист из коллекции «Элементы ActiveX».

Создание проекта формы

Добавьте в проект VBA пользовательскую форму UserForm1 и добавьте на нее кнопки CommandButton1 и CommandButton2:


Размеры формы и кнопок не имеют значения, мы будем задавать их программно.

Код инициализации автоформы

В процессе инициализации формы мы будем добавлять элементы управления, их расположение и размеры. Наименования полей таблицы будут записаны в параметры Caption элементов Label.

Поля таблицы для заполнения в пользовательской автоформе будут представлены элементами TextBox и ComboBox. Если в таблице на листе «Списки» под наименованием графы есть данные для раскрывающегося списка, на форму добавляется ComboBox, если нет – TextBox.

Размер ячейки по высоте и ширине определяется высотой строки и шириной столбца, на пересечении которых она находится. Если, в вашем случае, нежелательно изменять размеры всей строки или всего столбца, используйте объединенные ячейки нужной величины.

Обратите внимание, что высота строки задается в пунктах, а ширина столбца в символах, поэтому их числовые значения не соответствуют друг другу по фактическому размеру.

Информационные окна с высотой строки и шириной столбца в Excel

Высота строки и ширина столбца в Excel

Программно, без дополнительных макросов, можно изменять высоту строки только в пунктах, а ширину столбца только в символах.

На сайте поддержки офисных приложений Microsoft так написано об этих величинах:

  • высота строки может принимать значение от 0 до 409 пунктов, причем 1 пункт приблизительно равен 1/72 дюйма или 0,035 см;
  • ширина столбца может принимать значение от 0 до 255, причем это значение соответствует количеству символов, которые могут быть отображены в ячейке.

Смотрите, как сделать все ячейки рабочего листа квадратными.

Высота строки

Для изменения высоты строки используйте свойство RowHeight объекта Range. И не важно, будет объект Range представлять из себя выделенный произвольный диапазон, отдельную ячейку, целую строку или целый столбец — высота всех строк, пересекающихся с объектом Range будет изменена после присвоения свойству RowHeight этого объекта нового значения.

Примеры изменения высоты строк:

Пример 1
Изменение высоты отдельной ячейки:

в результате, строка, в которой находится активная ячейка, приобретает высоту, равную 10 пунктам.

Пример 2
Изменение высоты строки:

в результате, третья строка рабочего листа приобретает высоту, равную 30 пунктам.

Пример 3
Изменение высоты ячеек заданного диапазона:

в результате, каждой из первых шести строк рабочего листа будет задана высота, равная 20 пунктам.

Пример 4
Изменение высоты ячеек целого столбца:

в результате, всем строкам рабочего листа будет назначена высота, равная 15 пунктам.

Ширина столбца

Для изменения ширины столбца используйте свойство ColumnWidth объекта Range. Как и в случае с высотой строки, не важно, будет объект Range представлять из себя выделенный произвольный диапазон, отдельную ячейку, целую строку или целый столбец — ширина всех столбцов, пересекающихся с объектом Range будет изменена после присвоения свойству ColumnWidth этого объекта нового значения.

Примеры изменения ширины столбцов:

Пример 1
Изменение ширины отдельной ячейки:

в результате, столбец, в котором находится активная ячейка, приобретает ширину, равную 15 символам.

Пример 2
Изменение ширины столбца:

в результате, третий столбец рабочего листа (столбец «C») приобретает ширину, равную 50 символам.

Пример 3
Изменение ширины ячеек заданного диапазона:

в результате, каждому из первых четырех столбцов рабочего листа будет задана ширина, равная 25 символам.

Пример 4
Изменение ширины ячеек целой строки:

в результате, всем столбцам рабочего листа будет назначена ширина, равная 35 символам.

Автоподбор ширины

Для автоподбора ширины ячейки в соответствие с размером ее содержимого используйте следующий код:

Читайте также: