Excel ширина столбца миф excel

Изменение размера ячейки в VBA Excel. Высота строки, ширина столбца, автоподбор ширины ячейки. Свойства RowHeight и ColumnWidth объекта Range.

Размер ячейки

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

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

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

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

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

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

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

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

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

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

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

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

ActiveCell.RowHeight = 10

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

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

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

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

Range(«A1:D6»).RowHeight = 20

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

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

Columns(5).RowHeight = 15

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

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

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

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

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

ActiveCell.ColumnWidth = 15

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

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

Columns(3).ColumnWidth = 50

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

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

Range(«A1:D6»).ColumnWidth = 25

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

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

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

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

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

‘запишем для примера в любую ячейку рабочего

‘листа какой-нибудь текст, например, такой:

Cells(5, 5) = «Автоподбор ширины ячейки»

‘теперь подгоним ширину ячейки, а точнее

‘столбца, в котором эта ячейка находится:

Cells(5, 5).EntireColumn.AutoFit

Имейте в виду, что ширина столбца будет подогнана по расположенной в этом столбце ячейке с самым длинным содержимым. Например, если длина содержимого ячейки Cells(7, 5) будет превышать длину содержимого ячейки Cells(5, 5), то автоподбор ширины пятого столбца произойдет по содержимому ячейки Cells(7, 5), несмотря на то, что в строке кода указана другая ячейка.

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

Содержание

  1. Свойство ColumnWidths
  2. Синтаксис
  3. Settings
  4. Замечания
  5. См. также
  6. Поддержка и обратная связь
  7. Change Row Height and Column Width using Excel VBA
  8. VBA Reference
  9. 120+ Project Management Templates
  10. Description:
  11. Changing Row Height in Excel VBA
  12. Examples
  13. Changing Column Width in Excel VBA
  14. Examples
  15. Auto Adjust Column Width and Row Height using Excel VBA
  16. Examples
  17. VBA Excel. Размер ячейки (высота строки, ширина столбца)
  18. Размер ячейки
  19. Высота строки
  20. Ширина столбца
  21. Автоподбор ширины
  22. VBA Excel. Свойства ячейки (объекта Range)
  23. Ячейка и объект Range
  24. Свойства ячейки (объекта Range)
  25. Простые примеры для начинающих
  26. Форматирование ячеек

Свойство ColumnWidths

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

Синтаксис

object. ColumnWidths [= String ]

Синтаксис свойства ColumnWidths состоит из следующих частей:

Part Описание
object Обязательно. Допустимый объект.
String Необязательный параметр. Устанавливает ширину строки в точках. Параметр -1 или пустой приводит к вычисляемой ширине. Значение 0 приводит к скрытию столбца. Чтобы указать другую единицу измерения, добавьте ее. Значение больше 0 явно указывает ширину столбца.

Settings

Чтобы отделить записи в столбцах, используйте точку с запятой (;) в качестве разделителя списка. В Windows это значение можно изменить, указав разделитель списка в разделе «Язык и региональные стандарты» панели управления Windows.

Любые или все параметры свойства ColumnWidths могут оставаться пустыми. Пустой параметр можно создать, указав разделитель без предшествующего ему значения.

Если указать -1 на странице свойств, отображаемое значение на странице свойств будет пустым.

Чтобы вычислить ширину столбца, если columnWidths пуста или -1, ширина элемента управления делится поровну между всеми столбцами списка. Если сумма указанной ширины столбцов превышает ширину элемента управления, список выравнивается по левому краю в пределах элемента управления и один или несколько крайних правых столбцов не отображаются. Чтобы просмотреть их, пользователи могут прокрутить список с помощью горизонтальной полосы прокрутки.

Минимальная вычисляемая ширина столбца составляет 72 точки (2,54 см). Чтобы создать более узкий столбец, необходимо указать точную ширину.

Если не указано другое, ширина столбца измеряется в точках. Чтобы указать другую единицу измерения, добавьте ее к значению. В следующих примерах ширина столбца указывается в нескольких единицах измерения, а также приводится описание различных способов размещения трех столбцов в поле со списком шириной 10,16 см.

Setting Эффект
90;72;90 Ширина первого столбца — 90 точек (3,18 см); ширина второго столбца — 72 точки (2,54 см); ширина третьего столбца — 90 точек.
6 cm;0;6 cm Ширина первого столбца — 6 см; второй столбец скрыт; ширина третьего столбца — 6 см.
Так как третий столбец является частично видимым, отображается горизонтальная полоса прокрутки.
1.5 in;0;2.5 in Ширина первого столбца — 1,5 дюйма (3,81 см); второй столбец скрыт; ширина третьего столбца — 2,5 дюйма (6,35 см).
2 in;;2 in Ширина первого столбца — 2 дюйма (5,08 см); ширина второго столбца — 1 дюйм (2,54 см) (по умолчанию); ширина третьего столбца — 2 дюйма (5,08 см).
Так как только половина третьего столбца является видимой, отображается горизонтальная полоса прокрутки.
(Пусто) Все три столбца имеют одинаковую ширину (3,38 см).

Замечания

В поле со списком система отображает столбец, назначаемый свойством TextColumn в текстовой части элемента управления.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Change Row Height and Column Width using Excel VBA

VBA Reference

Effortlessly
Manage Your Projects

120+ Project Management Templates

Seamlessly manage your projects with our powerful & multi-purpose templates for project management.

120+ PM Templates Includes:

50+ Excel Templates

50+ PowerPoint Templates

25+ Word Templates

A Powerful & Multi-purpose Templates for project management. Now seamlessly manage your projects, tasks, meetings, presentations, teams, customers, stakeholders and time. This page describes all the amazing new features and options that come with our premium templates.

Save Up to 85% LIMITED TIME OFFER
All-in-One Pack
120+ Project Management Templates
Essential Pack
50+ Project Management Templates

Excel Pack
50+ Excel PM Templates

PowerPoint Pack
50+ Excel PM Templates
MS Word Pack
25+ Word PM Templates
Ultimate Project Management Template
Ultimate Resource Management Template
Project Portfolio Management Templates

Description:

Some times we may enter the data into cells more than it’s width. In this case we can not able to see entire text. So we can change row height and Column width using excel using VBA. So that we can see entire data in that cell. When you have more lengthy data in cells, you can Auto Adjust Column Width or Row Height in Excel VBA to show the entire data. So that users can see the entire data in the cells. We will see with Examples.

Changing Row Height in Excel VBA


We can change row height in Excel using RowHeight Property of a Row in VBA. See the following example to do it.

Examples

The following example will change the height of the 3rd Row to 25.

We can also set the height for multiple rows, the following example will change the height of the 3rd to 20th row height to 25.

Instructions:
  1. Open an excel workbook
  2. Press Alt+F11 to open VBA Editor
  3. Insert a Module for Insert Menu
  4. Copy the above code and Paste in the code window
  5. Save the file as macro enabled workbook
  6. Press F5 to execute itit

Changing Column Width in Excel VBA


We can change column width in Excel using ColumnWidth Property of a Column in VBA. See the following example to do it.

In this Example I am changing the Column B width to 25.

Examples

We can also set the column width for multiple columns at a time, see this Example I am changing the Column B to E width to 25.

Instructions:
  1. Open an excel workbook
  2. Press Alt+F11 to open VBA Editor
  3. Insert a Module for Insert Menu
  4. Copy the above code and Paste in the code window
  5. Save the file as macro enabled workbook
  6. Press F5 to execute it

Auto Adjust Column Width and Row Height using Excel VBA


We can use AutoFit method of Columns and Rows in Excel using VBA to Auto Adjust the rows and Columns.

Examples

Code to Auto Adjust Column Width

Following are the example to show you how to do this.

Code to Auto fit Row Height

Following are the example to show you how to do this.

Instructions:

Follow the instructions below to test the codes above.

  1. Open an excel workbook
  2. Press Alt+F11 to open VBA Editor
  3. Insert a Module for Insert Menu
  4. Copy the above code and Paste in the code window
  5. Save the file as macro enabled workbook
  6. Press F5 to execute it

A Powerful & Multi-purpose Templates for project management. Now seamlessly manage your projects, tasks, meetings, presentations, teams, customers, stakeholders and time. This page describes all the amazing new features and options that come with our premium templates.

Источник

VBA Excel. Размер ячейки (высота строки, ширина столбца)

Изменение размера ячейки в VBA Excel. Высота строки, ширина столбца, автоподбор ширины ячейки. Свойства RowHeight и ColumnWidth объекта Range.

Размер ячейки

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

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

Высота строки и ширина столбца в 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 символам.

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

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

Источник

VBA Excel. Свойства ячейки (объекта Range)

Свойства ячейки, часто используемые в коде VBA Excel. Демонстрация свойств ячейки, как структурной единицы объекта Range, на простых примерах.

Ячейка и объект Range

Объект Range в VBA Excel представляет диапазон ячеек. Он (объект Range) может описывать любой диапазон, начиная от одной ячейки и заканчивая сразу всеми ячейками рабочего листа.

  • Одна ячейка – Range(«A1») .
  • Девять ячеек – Range(«A1:С3») .
  • Весь рабочий лист в Excel 2016 – Range(«1:1048576») .

В VBA Excel есть свойство Cells объекта Range, которое позволяет обратиться к одной ячейке в указанном диапазоне (возвращает объект Range в виде одной ячейки). Если в коде используется свойство Cells без указания диапазона, значит оно относится ко всему диапазону активного рабочего листа.

Примеры обращения к одной ячейке:

  • Cells(1000) , где 1000 – порядковый номер ячейки на рабочем листе, возвращает ячейку «ALL1».
  • Cells(50, 20) , где 50 – номер строки рабочего листа, а 20 – номер столбца, возвращает ячейку «T50».
  • Range(«A1:C3»).Cells(6) , где «A1:C3» – заданный диапазон, а 6 – порядковый номер ячейки в этом диапазоне, возвращает ячейку «C2».

Подробнее о том, как обратиться к ячейке, смотрите в статье: Ячейки (обращение, запись, чтение, очистка).

В этой статье мы рассмотрим свойства объекта Range, применимые, в том числе, к диапазону, состоящему из одной ячейки.

Еще надо добавить, что свойства и методы объектов отделяются от объектов точкой, как в третьем примере обращения к одной ячейке: Range(«A1:C3»).Cells(6) .

Свойства ячейки (объекта Range)

Свойство Описание
Address Возвращает адрес ячейки (диапазона).
Borders Возвращает коллекцию Borders, представляющую границы ячейки (диапазона). Подробнее…
Cells Возвращает объект Range, представляющий коллекцию всех ячеек заданного диапазона. Указав номер строки и номер столбца или порядковый номер ячейки в диапазоне, мы получаем конкретную ячейку. Подробнее…
Characters Возвращает подстроку в размере указанного количества символов из текста, содержащегося в ячейке. Подробнее…
Column Возвращает номер столбца ячейки (первого столбца диапазона). Подробнее…
ColumnWidth Возвращает или задает ширину ячейки в пунктах (ширину всех столбцов в указанном диапазоне).
Comment Возвращает комментарий, связанный с ячейкой (с левой верхней ячейкой диапазона).
CurrentRegion Возвращает прямоугольный диапазон, ограниченный пустыми строками и столбцами. Очень полезное свойство для возвращения рабочей таблицы, а также определения номера последней заполненной строки.
EntireColumn Возвращает весь столбец (столбцы), в котором содержится ячейка (диапазон). Диапазон может содержаться и в одном столбце, например, Range(«A1:A20») .
EntireRow Возвращает всю строку (строки), в которой содержится ячейка (диапазон). Диапазон может содержаться и в одной строке, например, Range(«A2:H2») .
Font Возвращает объект Font, представляющий шрифт указанного объекта. Подробнее о цвете шрифта…
HorizontalAlignment Возвращает или задает значение горизонтального выравнивания содержимого ячейки (диапазона). Подробнее…
Interior Возвращает объект Interior, представляющий внутреннюю область ячейки (диапазона). Применяется, главным образом, для возвращения или назначения цвета заливки (фона) ячейки (диапазона). Подробнее…
Name Возвращает или задает имя ячейки (диапазона).
NumberFormat Возвращает или задает код числового формата для ячейки (диапазона). Примеры кодов числовых форматов можно посмотреть, открыв для любой ячейки на рабочем листе Excel диалоговое окно «Формат ячеек», на вкладке «(все форматы)». Свойство NumberFormat диапазона возвращает значение NULL, за исключением тех случаев, когда все ячейки в диапазоне имеют одинаковый числовой формат. Если нужно присвоить ячейке текстовый формат, записывается так: Range(«A1»).NumberFormat = «@» . Общий формат: Range(«A1»).NumberFormat = «General» .
Offset Возвращает объект Range, смещенный относительно первоначального диапазона на указанное количество строк и столбцов. Подробнее…
Resize Изменяет размер первоначального диапазона до указанного количества строк и столбцов. Строки добавляются или удаляются снизу, столбцы – справа. Подробнее…
Row Возвращает номер строки ячейки (первой строки диапазона). Подробнее…
RowHeight Возвращает или задает высоту ячейки в пунктах (высоту всех строк в указанном диапазоне).
Text Возвращает форматированный текст, содержащийся в ячейке. Свойство Text диапазона возвращает значение NULL, за исключением тех случаев, когда все ячейки в диапазоне имеют одинаковое содержимое и один формат. Предназначено только для чтения. Подробнее…
Value Возвращает или задает значение ячейки, в том числе с отображением значений в формате Currency и Date. Тип данных Variant. Value является свойством ячейки по умолчанию, поэтому в коде его можно не указывать.
Value2 Возвращает или задает значение ячейки. Тип данных Variant. Значения в формате Currency и Date будут отображены в виде чисел с типом данных Double.
VerticalAlignment Возвращает или задает значение вертикального выравнивания содержимого ячейки (диапазона). Подробнее…

В таблице представлены не все свойства объекта Range. С полным списком вы можете ознакомиться не сайте разработчика.

Простые примеры для начинающих

Вы можете скопировать примеры кода VBA Excel в стандартный модуль и запустить их на выполнение. Как создать стандартный модуль и запустить процедуру на выполнение, смотрите в статье VBA Excel. Начинаем программировать с нуля.

Учтите, что в одном программном модуле у всех процедур должны быть разные имена. Если вы уже копировали в модуль подпрограммы с именами Primer1, Primer2 и т.д., удалите их или создайте еще один стандартный модуль.

Форматирование ячеек

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

Если вы запустите эту процедуру, информационное окно MsgBox будет прерывать выполнение программы и сообщать о том, что произойдет дальше, после его закрытия.

Источник

 

Trambulanga

Пользователь

Сообщений: 20
Регистрация: 11.01.2023

#1

18.02.2023 10:39:18

Доброго дня.
Есть ли в VBA метод, с помощью которого, можно задавать ширину определенным столбцам?
Например:
Мне необходимо, чтобы в таблице, столбцы 1,4,7… были шириной в 20 символов. Столбцы 2,5,8… шириной в 15 символом. и так далее.
Как задать параметры, не удлинняя код программы?
Автоподбор не нужен.
В данный момент все выглядит вот так:

Код
.Columns(1).ColumnWidth = 20
    .Columns(2).ColumnWidth = 13
    .Columns(3).ColumnWidth = 5
    .Columns(4).ColumnWidth = 20
    .Columns(5).ColumnWidth = 13
    .Columns(6).ColumnWidth = 5
    .Columns(7).ColumnWidth = 20
    .Columns(8).ColumnWidth = 13
    .Columns(9).ColumnWidth = 5
    .Columns(10).ColumnWidth = 20
    .Columns(11).ColumnWidth = 13
    .Columns(12).ColumnWidth = 5
    .Columns(13).ColumnWidth = 20
    .Columns(14).ColumnWidth = 13
    .Columns(15).ColumnWidth = 5
    .Columns(16).ColumnWidth = 20
    .Columns(17).ColumnWidth = 13
    .Columns(18).ColumnWidth = 5

Изменено: Trambulanga18.02.2023 11:19:04

 

Artem1977

Пользователь

Сообщений: 163
Регистрация: 28.02.2017

#2

18.02.2023 12:07:18

Trambulanga, например для представленных строк так:

Код
    Dim i As Integer
    
    For i = 1 To 16 Step 3
        With Sheets(1)
            .Columns(i).ColumnWidth = 20
            .Columns(i + 1).ColumnWidth = 13
            .Columns(i + 2).ColumnWidth = 5
        End With
    Next

Изменено: Artem197718.02.2023 12:17:33

Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit

 

Настя_Nastya

Пользователь

Сообщений: 801
Регистрация: 14.07.2019

#3

18.02.2023 12:12:10

или так

Код
Sub h()
C1 = 20
C2 = 13
C3 = 5
On Error Resume Next
For i = 1 To 18
    If i = 1 Then ActiveSheet.Columns(1).ColumnWidth = C1
    If ActiveSheet.Columns(i - 1).ColumnWidth = C1 Then ActiveSheet.Columns(i).ColumnWidth = C2
    If ActiveSheet.Columns(i - 1).ColumnWidth = C2 Then ActiveSheet.Columns(i).ColumnWidth = C3
    If ActiveSheet.Columns(i - 1).ColumnWidth = C3 Then ActiveSheet.Columns(i).ColumnWidth = C1
Next i
End Sub
 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#4

18.02.2023 12:22:13

Код
Sub SetColumnWidth()
  Dim c, rg As Range, w
  Set rg = Columns(1):  w = Array(29, 13, 5)
  For c = 4 To 16 Step 3: Set rg = Union(rg, Columns(c)): Next
  For c = 0 To 2: rg.Offset(0, c).ColumnWidth = w(c): Next
End Sub

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

БМВ

Модератор

Сообщений: 21376
Регистрация: 28.12.2016

Excel 2013, 2016

#5

18.02.2023 13:25:12

в коллекцию

Код
With ActiveSheet
    .Columns(1).ColumnWidth = 20
    .Columns(2).ColumnWidth = 13
    .Columns(3).ColumnWidth = 5
    .Columns(1).Resize(, 3).Copy
    .Columns(1).Resize(, 18).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
End With

По вопросам из тем форума, личку не читаю.

 

Всем большое спасибо за помощь! О таком количестве методов я и не подозревал)))

 

Msi2102

Пользователь

Сообщений: 3134
Регистрация: 31.03.2014

#7

18.02.2023 18:47:49

Цитата
Trambulanga написал:
О таком количестве методов я и не подозревал

Вот ещё парочка, мне кажется это можно продолжать бесконечно

Код
Sub Макрос1()
    Set col_1 = Union(Columns(1), Columns(4), Columns(7), Columns(10), Columns(13), Columns(16))
    Set col_2 = Union(Columns(2), Columns(5), Columns(8), Columns(11), Columns(14), Columns(17))
    Set col_3 = Union(Columns(3), Columns(6), Columns(9), Columns(12), Columns(15), Columns(18))
    col_1.ColumnWidth = 20
    col_2.ColumnWidth = 13
    col_3.ColumnWidth = 5
End Sub

Код
Sub Макрос1()
    Dim col_1 As Range, m As Byte, arr1 As Variant
    arr1 = Array(20, 13, 5)
    For m = 1 To 3
        For n = m To 15 + m Step 3
            If col_1 Is Nothing Then Set col_1 = Columns(n) Else Set col_1 = Union(col_1, Columns(n))
        Next
        col_1.ColumnWidth = arr1(m - 1):    Set col_1 = Nothing
    Next
End Sub

Изменено: Msi210218.02.2023 19:29:31

 

Апострофф

Пользователь

Сообщений: 720
Регистрация: 06.04.2015

#8

18.02.2023 20:37:25

Код
For C = 1 To 18
    Columns(C).ColumnWidth = Split("20 13 5")((C - 1) Mod 3)
Next
 

nilske

Пользователь

Сообщений: 354
Регистрация: 30.11.2018

Апострофф, супер!
Останется только привязать мод к количеству элементов в переменной

Изменено: nilske18.02.2023 21:21:15

 

Апострофф

Пользователь

Сообщений: 720
Регистрация: 06.04.2015

nilske, если удосужитесь ручками набрать «20 13 5 10 15», угадайте, что будет вместо 3)   ;)  

 

БМВ

Модератор

Сообщений: 21376
Регистрация: 28.12.2016

Excel 2013, 2016

Апострофф, В чем смысл использовать Split(«20 13 5») вместо Array(20,13,5), та и тот я б вынес за цикл.

По вопросам из тем форума, личку не читаю.

 

Апострофф

Пользователь

Сообщений: 720
Регистрация: 06.04.2015

#12

19.02.2023 10:04:05

БМВ, ARRAY будет быстрее, но вынудит следить за его Bound`ами.
Вынести за цикл — понятно лучше, но лишняя строка и переменная опять же :)

Код
A=ARRAY(20,13,5)
For C = 1 To 18
    Columns(C).ColumnWidth = A((C - 1) Mod (UBOUND(A)-LBOUND(A)+1))
Next

Изменено: Апострофф19.02.2023 10:28:06

 

Trambulanga

Пользователь

Сообщений: 20
Регистрация: 11.01.2023

#13

19.02.2023 16:23:34

Ну и в догонку тогда, да простят меня админы, если нужно было создать отдельную тему, но вопрос то капец близкий))
А как с помощью таких же хитрых методов, задать разную высоту строк на листе?
Допустим, есть таблица. Нужно, чтобы каждая 4 строка в этой таблице была высотой 20, а все остальные по 15. Есть реализация? Нашел только вот это.

Код
With Worksheets("Sheet1").Rows(1) 
 .RowHeight = .RowHeight * 2 
End With

Но либо для меня не подходит, либо я не туда это прописываю…
Заранее благодарен)  

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#14

19.02.2023 16:31:21

Цитата
Trambulanga написал:
Нужно, чтобы каждая 4 строка

начиная с какой?
на листе чуть больше 1 млн. строк, каждых 4-х окажется около 250 тыс. всем 250 тыс. строк нужно назначить заданную высоту?

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

5, 14, 23, 32 строки. Остальные не нужны

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#16

19.02.2023 17:31:38

Цитата
Trambulanga написал:
5, 14, 23, 32 строки. Остальные не нужны
Цитата
Trambulanga написал:
Нужно, чтобы каждая 4 строка

каждая 4-я,  говорите))

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Ну да, тупанул( упустил одну пустую строку в таблице, и посчитал, что в каждой таблице это будет 4-ая. Прошу прощения. Ну собственно да, именно те строки, что я указал выше…

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#18

19.02.2023 17:58:34

Код
Rows.RowHeight = 15
for r = 5 to 32 step 9
  Rows(r).RowHeight = 20
next

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Trambulanga

Пользователь

Сообщений: 20
Регистрация: 11.01.2023

#19

19.02.2023 18:16:01

Ігор Гончаренко, Благодарю за помощь!

616 / 0 / 1

Регистрация: 24.07.2013

Сообщений: 93

1

Удаление столбцов и изменение их ширины

15.01.2014, 10:18. Показов 8625. Ответов 16


Студворк — интернет-сервис помощи студентам

Здравствуйте, имеется таблица, помогите с написанием макроса по редактированию этой таблицы для Excel 2010.
Значит таблица выводится в excel с программы. Я в ручную ее буду сохранять на ПК и запускать заново. Далее необходимом написать макрос и добавить в личную книгу макросов, чтоб он всегда был прописан в excel, и назначить ему комбинацию клавиш (к примеру ctrl + z).
Во вложении приведена сама таблица, и то что должно получиться после редактирования.
Длина таблицы не фиксированная, может меняться.

Макрос должен:

Удалить:
Столбец A,D,I,J
Строка 1

Изменить ширину столбцов:
A — 28 (201 пиксель)
B,C — 4,57 (37 пикселей)
D — без изменений
E,F — 18 (131 пиксель)

Удалить данные столбца D с ячейки D3 и до конца

Изменить в строке 1 высоту шрифта до 11 и выравнивание текста по середине
Изменить высоту строки 1 — 48 (64 пикселя)

Нарисовать все границы таблица с A до J со строки 1 и до конца данных

Вот такая вот задумка, но что то у меня ничего не выходит, может кто поможет, заранее спасибо!

образец до.xlsx образец после.xlsx



0



RAVproFFI

33 / 33 / 1

Регистрация: 15.10.2013

Сообщений: 130

15.01.2014, 10:48

2

запусти запись макроса. Больше половины из того что тебе надо запишется. Единственное нужно будет поправить «с ячейки D3 и до конца»

Visual Basic
1
2
R=ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
range(cells(3,4),cells(R,4))

и «со строки 1 и до конца»

Visual Basic
1
range(cells(1,1),cells(R,10))



1



strike383

616 / 0 / 1

Регистрация: 24.07.2013

Сообщений: 93

15.01.2014, 11:06

 [ТС]

3

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Sub Макрос1()
'
' Макрос1 Макрос
'
' Сочетание клавиш: Ctrl+z
'
    Range("A:A,D:D,I:I,J:J").Select
    Range("J1").Activate
    Selection.Delete Shift:=xlToLeft
    ActiveWindow.ScrollColumn = 6
    ActiveWindow.ScrollColumn = 5
    ActiveWindow.ScrollColumn = 4
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 1
    Rows("1:1").Select
    Selection.Delete Shift:=xlUp
    Columns("A:A").Select
    Range("A2").Activate
    Selection.ColumnWidth = 28
    Columns("B:B").Select
    Range("B2").Activate
    Selection.ColumnWidth = 4.57
    Columns("C:C").Select
    Range("C2").Activate
    Selection.ColumnWidth = 4.57
    Columns("E:E").Select
    Range("E2").Activate
    Selection.ColumnWidth = 18
    Columns("F:F").Select
    Range("F2").Activate
    Selection.ColumnWidth = 18
    Range("D3:D344").Select
    Selection.ClearContents
    Range("A1:F1").Select
    With Selection.Font
        .Name = "Calibri"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With
    Rows("1:1").Select
    Selection.RowHeight = 48
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
    End With
    Range("A1:F344").Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Range("A1:F1").Select
End Sub

пишет ошибку тут Selection.Delete Shift:=xlToLeft



0



Ушел с CyberForum совсем!

873 / 182 / 25

Регистрация: 04.05.2011

Сообщений: 1,020

Записей в блоге: 110

15.01.2014, 11:17

4

строки сверху вниз удаляешь ? учти что после удаления строки 1, строка 4 станет строкой 3 и т.д…



0



RAVproFFI

33 / 33 / 1

Регистрация: 15.10.2013

Сообщений: 130

15.01.2014, 11:24

5

strike383, удали от .Select до ближайшего Selection
н-р: замени

PureBasic
1
2
3
Range("A:A,D:D,I:I,J:J").Select
    Range("J1").Activate
    Selection.Delete Shift:=xlToLeft

на

PureBasic
1
Range("A:A,D:D,I:I,J:J").Delete Shift:=xlToLeft

и т.д.
а также удали все ActiveWindow.ScrollColumn…. и ненужное форматирование текста и границ



0



Surrogate

Ушел с CyberForum совсем!

873 / 182 / 25

Регистрация: 04.05.2011

Сообщений: 1,020

Записей в блоге: 110

15.01.2014, 11:28

6

Цитата
Сообщение от strike383
Посмотреть сообщение

Range(«A:A,D,I:I,J:J»).Select
* * Range(«J1»).Activate
* * Selection.Delete Shift:=xlToLeft

зачем здесь Range(«J1»).Activate ?
у меня работает и так

Visual Basic
1
2
Range("A:A,D:D,I:I,J:J").Select
Selection.Delete Shift:=xlToLeft

и так

Visual Basic
1
Range("A:A,D:D,I:I,J:J").Delete Shift:=xlToLeft



1



strike383

616 / 0 / 1

Регистрация: 24.07.2013

Сообщений: 93

15.01.2014, 12:06

 [ТС]

7

исправил:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Sub Макрос1()
'
' Макрос1 Макрос
'
' Сочетание клавиш: Ctrl+z
'
    Range("A:A,D:D,I:I,J:J").Delete Shift:=xlToLeft
    ActiveWindow.ScrollColumn = 6
    ActiveWindow.ScrollColumn = 5
    ActiveWindow.ScrollColumn = 4
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 1
    Rows("1:1").Delete Shift:=xlUp
    Columns("A:A").Select
    Range("A2").Activate
    Selection.ColumnWidth = 28
    Columns("B:B").Select
    Range("B2").Activate
    Selection.ColumnWidth = 4.57
    Columns("C:C").Select
    Range("C2").Activate
    Selection.ColumnWidth = 4.57
    Columns("E:E").Select
    Range("E2").Activate
    Selection.ColumnWidth = 18
    Columns("F:F").Select
    Range("F2").Activate
    Selection.ColumnWidth = 18
    Range("D3:D344").Select
    Selection.ClearContents
    Range("A1:F1").Select
    With Selection.Font
        .Name = "Calibri"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With
    Rows("1:1").Select
    Selection.RowHeight = 48
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
    End With
    Range("A1:F344").Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Range("A1:F1").Select
End Sub

Работает, вот только ширина столбцов везде 18 почему то

Цитата
Сообщение от RAVproFFI
Посмотреть сообщение

запусти запись макроса. Больше половины из того что тебе надо запишется. Единственное нужно будет поправить «с ячейки D3 и до конца»

Visual Basic
1
2
R=ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
range(cells(3,4),cells(R,4))

и «со строки 1 и до конца»

Visual Basic
1
range(cells(1,1),cells(R,10))

можно с примером в моем коде, где что изменить

Добавлено через 1 минуту
и что то мне подсказывает что в коде много лишнего, что убрать?



0



Surrogate

Ушел с CyberForum совсем!

873 / 182 / 25

Регистрация: 04.05.2011

Сообщений: 1,020

Записей в блоге: 110

15.01.2014, 12:33

8

1.

Цитата
Сообщение от RAVproFFI
Посмотреть сообщение

а также удали все ActiveWindow.ScrollColumn….

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

Visual Basic
1
2
3
 Columns("A:A").Select
    Range("A2").Activate
    Selection.ColumnWidth = 28

можно записать сокращенно

Visual Basic
1
 Columns("A:A").ColumnWidth = 28

далее по аналогии

Добавлено через 5 минут
3.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Range("A1:F1").Select
    With Selection.Font
        .Name = "Calibri"
        .Size = 22
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMinor
    End With

можно ограничиться лишь изменением размера шрифта

Visual Basic
1
2
Range("A1:F1").Select
Selection.Font.Size = 11

Добавлено через 8 минут

Цитата
Сообщение от RAVproFFI
Посмотреть сообщение

а также удали все ActiveWindow.ScrollColumn…. и ненужное форматирование текста и границ

если форматирование границ все же нужно, то для сокращения объема кода можно использовать фичу из этого поста



1



strike383

616 / 0 / 1

Регистрация: 24.07.2013

Сообщений: 93

15.01.2014, 14:24

 [ТС]

9

Помогите отредактировать еще эту часть кода, нужно удалить данные со столбца D, начиная с ячейки D3 и до конца таблицы, длина таблицы может быть любой, но согласно этому коду данные будут удаляться до ячейки D344. Конечно можно написать чтоб данные удалялись, скажем до D10000, но это же не правильно, как прописать чтоб до конца таблицы удалялось?

Visual Basic
1
2
Range("D3:D344").Select
Selection.ClearContents

Помогите еще с границами таблицы. Ее длина может меняться. А согласно коду ниже, ее границы прописаны конкретно от A1 до F344. Нужно чтоб границы были от A1 до F , но не 344, а до конца строк с данными

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Range("A1:F344").Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With

Добавлено через 1 минуту
Тоесть нужно чтоб прорисовались границы всей таблицы



0



RAVproFFI

33 / 33 / 1

Регистрация: 15.10.2013

Сообщений: 130

15.01.2014, 14:55

10

strike383, Range(«D3: D344») замени как я писал

PureBasic
1
2
R=ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
range(cells(3,4),cells(R,4)).ClearContents

cells(3,4) это D4, а cells(R,4) это D(последняя ячейка)
а кстати зачем .ClearContents? это удаляет все данные в ячейках. Сам смотри
а с границами также замени на

PureBasic
1
2
3
4
5
6
7
8
9
10
 with range(cells(1,1),cells(R,6))
  .Borders(xlDiagonalDown).LineStyle = xlNone
  .Borders(xlDiagonalUp).LineStyle = xlNone
  .Borders(xlEdgeLeft).LineStyle = xlContinuous
  .Borders(xlEdgeTop).LineStyle = xlContinuous
  .Borders(xlEdgeBottom).LineStyle = xlContinuous
  .Borders(xlEdgeRight).LineStyle = xlContinuous
  .Borders(xlInsideVertical).LineStyle = xlContinuous
  .Borders(xlInsideHorizontal).LineStyle = xlContinuous
end with

Добавлено через 15 минут
кстати все границы можно сделать одной строкой

PureBasic
1
range(cells(1,1),cells(R,6)).Borders.LineStyle = xlContinuous

чет сразу не подумал



2



616 / 0 / 1

Регистрация: 24.07.2013

Сообщений: 93

15.01.2014, 14:58

 [ТС]

11

RAVproFFI, спасибо, попробую, но завтра, сегодня не получится, отпишусь о результатах

Еще такой вопрос, как в макросе прописать, чтоб то что получилось в конце, отправилось на печать, далее сама таблиса сохранилась, ну скажем на диске C:/Test, а место имени дата,месяц,год сохранения, и без макрос. После чего файл закрывается. Это вообще можно сделать?



0



33 / 33 / 1

Регистрация: 15.10.2013

Сообщений: 130

15.01.2014, 15:06

12

могу написать, но будет полезней если сам попробуешь>
запусти запись макроса, нажми печать, сохрани где нужно
затем в коде замени имя сохраняемой книги на Date & «.xlsx»
полученной код скопируй в конец предыдущего



0



616 / 0 / 1

Регистрация: 24.07.2013

Сообщений: 93

15.01.2014, 15:08

 [ТС]

13

Ок, попробую, завтра отпишусь ))



0



33 / 33 / 1

Регистрация: 15.10.2013

Сообщений: 130

15.01.2014, 15:13

14

да и еще будет полезно: чтоб экран не моргал когда код делает свою работу — в самом начале кода вставь Application.ScreenUpdating = False, а в конце Application.ScreenUpdating = True
все будет быстрее и незаметно



0



strike383

616 / 0 / 1

Регистрация: 24.07.2013

Сообщений: 93

16.01.2014, 18:23

 [ТС]

15

Ок, так и сделаю, спасибо

Добавлено через 11 часов 48 минут
По второму вопросу вот что получилось:

Visual Basic
1
2
3
4
5
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
    ChDir "C:Temp"
    ActiveWorkbook.SaveAs Filename:="C:TempDate&.xlsx", FileFormat:= _
        xlOpenXMLWorkbook, CreateBackup:=False

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

Добавлено через 2 минуты
По первой части, все работет без проблем, вот что получилось:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Sub Макрос1()
'
' Макрос1 Макрос
'
' Сочетание клавиш: Ctrl+z
'
   Application.ScreenUpdating = False
    Range("A:A,D:D,I:I,J:J").Delete Shift:=xlToLeft
    Rows("1:1").Delete Shift:=xlUp
    Columns("A:A").ColumnWidth = 28
    Columns("B:B").ColumnWidth = 4.57
    Columns("C:C").ColumnWidth = 4.57
    Columns("E:E").ColumnWidth = 18
    Columns("F:F").ColumnWidth = 18
    R = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
    Range(Cells(3, 4), Cells(R, 4)).ClearContents
    Range("A1:F1").Select
    Selection.Font.Size = 11
    Rows("1:1").Select
    Selection.RowHeight = 48
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
    End With
    Range(Cells(1, 1), Cells(R, 6)).Borders.LineStyle = xlContinuous
    Range("A1:F1").Select
   Application.ScreenUpdating = True
End Sub

Добавлено через 15 часов 12 минут

Цитата
Сообщение от strike383
Посмотреть сообщение

По второму вопросу вот что получилось:

Visual Basic
1
2
3
4
5
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
    ChDir "C:Temp"
    ActiveWorkbook.SaveAs Filename:="C:TempDate&.xlsx", FileFormat:= _
        xlOpenXMLWorkbook, CreateBackup:=False

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

Может кто помочь с этим кодом?



0



strike383

616 / 0 / 1

Регистрация: 24.07.2013

Сообщений: 93

17.01.2014, 19:05

 [ТС]

16

Все, сам сделал сохранение, кому интересно:

Visual Basic
1
2
3
strNewName = (Date & ".xlsx")
    If Not Application.Dialogs(xlDialogSaveAs).Show("C:Temp" & strNewName) Then _
        MsgBox "Книга не сохранена!", vbExclamation



0



RAVproFFI

33 / 33 / 1

Регистрация: 15.10.2013

Сообщений: 130

17.01.2014, 22:29

17

strike383, малорик
замени

Цитата
Сообщение от strike383
Посмотреть сообщение

Range(«A1:F1»).Select
Selection.Font.Size = 11
Rows(«1:1»).Select
Selection.RowHeight = 48
With Selection

на:

PureBasic
1
2
3
4
Range("A1:F1").Font.Size = 11
    Rows("1:1").RowHeight = 48
    With Rows("1:1")
       ...

и Range(«A1:F1»).Select в конце убери



0



В данном примере описаны макросы для автоматического форматирования или спроса формата для ячеек таблиц Excel средствами VBA.

VBA-макрос: заливка, шрифт, линии границ, ширина столбцов и высота строк

В процессе запыления данных сотрудниками отдела на некоторых листах были изменены форматы ячеек:

запыления планов работ.

Необходимо сбросить форматирование ячеек и сделать так чтобы на всех таблицах планов выполнения работ были одинаковые форматы отображения данных. Формат ячеек для исходной таблицы должен быть закреплен за шаблоном, чтобы можно было сделать сброс и применять заданный стиль оформления в дальнейшем.

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

Макросы Excel прекрасно справляются с форматированием ячеек на рабочих листах. Кроме того, делают это быстро и в полностью автоматическом режиме. Воспользуемся этими преимуществами и для решения данной задачи напишем свой код VBA-макроса. Он поможет нам быстро и безопасно сбрасывать форматы на исходный предварительно заданный в шаблоне главной таблицы.

Чтобы написать свой код макроса откройте специальный VBA-редактор в Excel: «РАЗРАБОТЧИК»-«Код»-«Visual Basic» или нажмите комбинацию клавиш ALT+F11:

Код Visual Basic.

В редакторе создайте новый модуль выбрав инструмент «Insert»-«Module» и введите в него такой VBA-код макроса:

Sub SbrosFormat()
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText = True
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
End With
End Sub

VBA-код макроса.

Теперь если нам нужно сбросить форматирование таблицы на исходный формат отображения ее данных, выделите диапазон ячеек A1:E20 и запустите макрос: «РАЗРАБОЧТИК»-«Код»-«Макросы»-«SbrosFormat»-«Выполнить». Результат работы макроса изображен ниже на рисунке:

сбросить форматирование таблицы на исходный формат.

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



Описание VBA-макроса для формата ячеек таблицы Excel

Первая инструкция в коде, проверяет выделены ли ячейки диапазоном. Если перед выполнением макроса выделил другой элемент листа, например, график, тогда макрос закрывается и дальнейшие инструкции выполняться не будут. В противные случаи будут форматироваться все выделенные ячейки по очереди в соответствии с определенными настройками форматирования:

  1. Текст в значениях ячеек выравнивается по центру горизонтально и вертикально.
  2. Включен построчный перенос текста.
  3. Все границы ячеек получают черную обычной толщины непрерывную линию с черным цветом.
  4. Сброс цвета шрифта на авто.
  5. Удаляется любая заливка ячеек.
  6. Ширина столбцов автоматически настраивается под текст в ячейках.
  7. Автоматически настроить высоту строк по содержимому ячеек.

Модификация исходного кода макроса для форматирования

Если необходимо сделать так чтобы текст выравнивался не по центру относительно горизонтали, а по правую сторону ячейки, тогда измените константу xlHAlignCenter на xlHAlignRight. Она находиться в свойстве .HorizontalAlignment. Сделайте это следующим образом:

.HorizontalAlignment = xlHAlignRight.

Таким же образом можно выровнять текст по левую сторону изменив значение константы на xlHAlignLeft. Или можно выровнять положение текста по ширине ячейки используя константу xlHAlignJustify.

Чтобы макрос выравнивал текст в ячейках по вертикали к низу, измените строку кода, отвечающую за данную настройку форматирования. Измените константу, которая присваивается к свойству VerticalAlignment в следующий способ:

Если хотите выровнять текс к верху ячейки, тогда воспользуйтесь константой xlHAlignTop.

Если нужно применить для границ ячеек толстую и пунктирную линию в синем цвете, смодифицируйте инструкцию, отвечающую за формат линий:

.Borders.LineStyle = xlDash

.Borders.Color = vbBlue

.Borders.Weight = xlMedium

Описание настройки форматирования для линий границ ячеек. Мы будем получать разные дополнительные типы линий границ если для свойства LineStyle присваивать такие константы:

  • xlDoshDot – применяется для рисования пунктирных линий в границах ячеек;
  • xlDouble – рисует двойную линию;
  • xlHairLine – рисует тонкую линию;
  • xlThick – для рисования очень толстой линии.

Для настройки цвета линий Excel предлагает всего 8 констант для определенных цветов. Константы для настройки цвета линий границ для свойства Color:

  • vbBlack – черный;
  • vbWhite – белый;
  • vbRed – красный;
  • vbGreen –зеленый;
  • vbBlue – синий;
  • vbYellow – желтый;
  • vbMagenta – алый;
  • vbCyan – голубой.

Но при необходимости присвоить линиям границ другие цвета можно вместо константы для свойства Color записать функцию RGB(). Достаточно лишь в аргументе этой функции указать код цвета по шкале от 0 и до 255.

Если нужно применить толстую линию только для границ выделенного диапазона, тогда перед инструкцией End With добавьте следующую строку кода:

.BorderAround xlContinuous, xlMedium, vbBlack

Описание: В первом аргументе для метода BorderAround можно записать также другой стиль линии. Во втором – толщину линии, а в третьем – цвет. Константы, которые можно присвоить в качестве значений для этих аргументов можно использовать те же, которые мы использовали для свойств: LineStyle, Weight, Color.

Если нужно экспонировать первую строку для выделенного диапазона с помощью жирного и курсивного шрифта значений ячеек. А также заполнить ячейки первой строки заливкой с голубым цветом, тогда в самом конце кода макроса перед последней инструкцией End Sub следует добавить несколько строк с VBA-кодом:

.Rows(1).Font.Bold = True

.Rows(1).Font.Italic = True

.Rows(1).Interior.Color = vbCyan

Если хотите присвоить такой же формат для не только для первой строки, но и для первого столбца выделенного диапазона, тогда скопируйте и вставьте ниже эти 3 строчки кода. После в последних трех строках измените свойство Rows на Columns.

.Columns (1).Font.Bold = True

.Columns (1).Font.Italic = True

.Columns (1).Interior.Color = vbCyan

Если нужно задать особенный формат для экспонирования последней строки выделенного диапазона, тогда измените число 1 в аргументе свойства Rows на число всех выделенных строк .Rows.Count. Например, добавьте в конец кода еще такую строку:

.Rows(.Rows.Count).Font.Bold = True

Полная версия модифицированного кода макроса выглядит так:

Sub SbrosFormat()
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText = True
.Borders.LineStyle = xlDash
.Borders.Color = vbBlue
.Borders.Weight = xlMedium
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
.BorderAround xlContinuous, xlMedium, vbBlack
.Rows(1).Font.Bold = True
.Rows(1).Font.Italic = True
.Rows(1).Interior.Color = vbCyan
.Columns(1).Font.Bold = True
.Columns(1).Font.Italic = True
.Columns(1).Interior.Color = vbCyan
.Rows(.Rows.Count).Font.Bold = True
End With
End Sub

Пример работы измененного кода VBA-макроса:

Пример после изменений в коде.

В данном примере вы ознакомились с базовыми возможностями форматирования с помощью VBA-макросов. Уверен, что теперь вы сможете самостоятельно найти практическое применение этим исходным кодам.

Понравилась статья? Поделить с друзьями:
  • Excel шаг за шагом макросы
  • Excel ширина границы ячейки
  • Excel шестнадцатеричное число в двоичное
  • Excel шаг за шагом 2010
  • Excel шестн в дес