Формат по образцу vba excel

 

itsokay

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

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

#1

05.01.2018 22:54:41

Господа, доброго времени суток.

Помогите, пожалуйста, вот в таком вопросе :
нужно сделать условно говоря хоткей на функцию формат по образцу, для этого пишу макрос и назначаю на него хоткей.
автозапись предложила копировать формат с помощью функции Selection.Copy и вставлять его функцией

Код
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False

Теперь вопрос по части как сделать так, что бы после нажатия хоткея отрабатывалось копирование, а потом после выбора нужной ячейки мышью  скопированный формат применялся к выбранной ячейке ?

Спасибо за ответ.

Изменено: itsokay05.01.2018 23:09:35

 

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

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

 

itsokay

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

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

#3

05.01.2018 23:29:42

Цитата
Ігор Гончаренко написал:
если Вам нужен результат (скопировать формат какой-то ячейки на группу других ячеек), то для этой цели в Excel есть инструмент «формат по образцу»,

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

 

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

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

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

#4

05.01.2018 23:40:40

не знаю что Вы на этом выиграете
используйте это

Код
  If Application.CutCopyMode Then
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
  Else
    Selection.Copy
  End If

вместо Вашего хоткей макроса

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

 

itsokay

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

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

Чудно!

Единственный момент это то что приходится дважды нажимать на хоткей (макрос). Задумка была изначально что бы хоткей нажимался один раз (происходит копирование) и потом мышкой выбирается ячейка для вставки формата после чего макрос сам вставляет формат по select мышкой. Как-то так.  

 

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

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

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

#6

06.01.2018 01:13:59

а теперь это:

Код
  Dim rgF As Range, rg As Range
  On Error Resume Next:  Set rgF = Selection
  Set rg = Application.InputBox("Отметьте диапазон", _
  "Куда положить формат из " & rgF.Address(False, False), Type:=8)
  If rg Is Nothing Then Application.CutCopyMode = False: Exit Sub
  rgF.Copy
  rg.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  Application.CutCopyMode = False

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

 

itsokay

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

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

мы наверное немного не понимаем друг друга.
задумка такая: в ячейке А1 нужный формат. К ячейке В1 этот формат нужно применить. Последовательность действий :
1)  ручками выбираем ячейку А1
2) нажимаем хоткей (отрабатывает первая часть макроса по копированию формата с текущей ячейки)
3) ручками выбираем ячейку В1 (отрабатывает вторая часть макроса по вставке формата в указанную ячейку).

 

согласен взаимопонимание стремится к нулю (на этапе, когда люди разговаривают на разных языках — это нормально)
на что заточен предложенный выше макрос:
0. вставляете текст этого макроса вместо тела вашего хоткей макроса
1. отмечаете ЛЮБУЮ ячейку (не обязательно А1, ЛЮБУЮ!)
2. жмете хоткей
3. макрос спрашивает куда скопировать форматот омеченной в п.1 ячейки?
4. отмечаете мишью требуемый диапазон, жмете Ок
5. готово. форматы отмеченной в п.1 ячейки распространены на указанные в п. 4. ячейки
что не так?

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

 

itsokay

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

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

#9

07.01.2018 22:32:25

Цитата
Ігор Гончаренко написал:
что не так?

задача макроса свести процесс форматирования к нажатию хоткея + 1 клик мышки. Это должно занимать меньше секунды. В идеале вот так :
0. вставляете текст этого макроса вместо тела вашего хоткей макроса
1. отмечаете ЛЮБУЮ ячейку (не обязательно А1, ЛЮБУЮ!)
2. жмете хоткей

4. отмечаете мишью требуемый диапазон
5. готово. форматы отмеченной в п.1 ячейки распространены на указанные в п. 4. ячейки  

 

Юрий М

Модератор

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

Контакты см. в профиле

 

itsokay, фактически Вы хотите хоткей на вызов команды «Формат по образцу». К сожалению, программно активировать кнопку на ленте весьма сложно — обычно используют SendKeys для имитации нажатия клавиш. Но это довольно ненадежный метод. ИМХО наилучший из простых способов описан тут:

https://www.quora.com/What-is-the-shortcut-key-for-format-painter-in-Excel-2010

, Method 2.
Можете посмотреть варианты:

https://www.google.ru/search?q=excel+format+painter+hotkey

 

itsokay

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

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

#12

08.01.2018 01:33:10

Цитата
Казанский написал:
хоткей на вызов команды «Формат по образцу»

Вот же он по вашей ссылке

Цитата
Add Format painter from Home tab to Quick Access Toolbar and you can assign a custom short cut by clicking one after the other i.e. Alt + User defined Numeric (Example: Alt + 5)

И не нужно никаких макросов. Прелестно!

Казанский

,

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

, благодарю за помощь!

 

r_a_s

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

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

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

 

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

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

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

#14

02.03.2023 15:06:04

Код
Selection.Copy WorkSheets("ИмяДругогоЛиста").Range(Selection.Cells(1).Address(0,0))

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

Выборочное форматирование листов по образцу

Didrou

Дата: Пятница, 19.02.2016, 09:42 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 30


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Доброе время суток!

Прошу помочь создать макрос, удовлетворяющей следующей задаче. Имеем книгу (приложена к сообщению), с листами «Содержание» «Источник» «образец» и n-ым количеством листов с датами в именах, созданных путем копирования листа «образец».

Задача:
Взять значения из двух ячеек отвечающих за диапазон D14 и D15 на листе «Содержание». Все листы в указанном диапазоне отформатировать согласно листа «образец» со всеми формулами, значениями, цветами и т.д. (один в один), кроме прямоугольного диапазона ячеек, указанного в ячейках D16 и D17.

Я себе эту операцию форматирования представляю так:
1. копирование листа «образец» с временным именем, к примеру «29.12.2015t»
2. занесение туда содержимого ячеек диапазона, указанного в ячейках D16 и D17 листа «Содержание» из форматируемого в данный момент листа «29.12.2015»
3. удаление листа «29.12.2015»
4. переименование листа «29.12.2015t» в «29.12.2015»

и так по каждому листу в диапазоне, указанном в ячейках D14 и D15 на листе «Содержание».

К сообщению приложен файл:

001_v3.xlsm
(82.8 Kb)

Сообщение отредактировал DidrouПятница, 19.02.2016, 09:45

 

Ответить

Manyasha

Дата: Пятница, 19.02.2016, 10:28 |
Сообщение № 2

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

Didrou, так нужно (макрос в модуле ReFormat)?
[vba]

Код

Sub Форматировать_по_образцу()
    Dim sh As Worksheet
    For Each sh In ThisWorkbook.Sheets
        If sh.Name Like «??.??.????» Then
            Sheets(«Образец»).Range(«a1:l34»).Copy sh.Range(«a1:l34»)
            sh.Range(«b9:e32»).ClearContents
        End If
    Next sh
End Sub

[/vba]
Если в b9:e32 нужно удалить все, включая заливку, то замените строку [vba]

Код

sh.Range(«b9:e32»).ClearContents

[/vba]
на [vba]

Код

sh.Range(«b9:e32»).Clear

[/vba]


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Didrou

Дата: Пятница, 19.02.2016, 10:49 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 30


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Manyasha, макрос форматирует всё в диапазоне b9:e32 на всех листах после «образец». Надо наоборот вне диапазона и на листах, в диапазоне календарных дат с ячеек d14 и d15 Листа «Содержание».

И даже не вне диапазона а полностью лист, но с сохранением функций или значений в указанном диапазоне ( в данном случае b9:e32).

Сообщение отредактировал DidrouПятница, 19.02.2016, 10:54

 

Ответить

Manyasha

Дата: Пятница, 19.02.2016, 10:56 |
Сообщение № 4

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

Didrou, не очень поняла…стереть все с листа, кроме b9:e32?
если да, то в цикле вместо
[vba]

Код

            Sheets(«Образец»).Range(«a1:l34»).Copy sh.Range(«a1:l34»)
            sh.Range(«b9:e32»).ClearContents

[/vba]напишите
[vba]

Код

            sh.Range(«a1:l34»).ClearContents
            Sheets(«Образец»).Range(«b9:e32»).Copy sh.Range(«b9:e32»)

[/vba]
Если нет, нарисуйте в файле на каком-нибудь листе результат, который должен получиться после выполнения макроса.
UPD
ааа…кажется поняла)
сейчас выложу код


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал ManyashaПятница, 19.02.2016, 10:57

 

Ответить

Manyasha

Дата: Пятница, 19.02.2016, 11:09 |
Сообщение № 5

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

Проверяйте:
[vba]

Код

Sub Форматировать_по_образцу()
    Dim sh As Worksheet
    For Each sh In ThisWorkbook.Sheets
        If sh.Name Like «??.??.????» Then
            With sh
                lr = .UsedRange.Rows.Count
                lc = .UsedRange.Columns.Count
                Union(Range(.Cells(1, 1), .Cells(8, lc)) _
                    , Range(.Cells(9, 6), .Cells(32, lc)) _
                    , Range(.Cells(33, 1), .Cells(lr, lc)) _
                    , Range(.Cells(9, 1), .Cells(lr, 1))).Clear
            End With
        End If
    Next sh
End Sub

[/vba]


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Didrou

Дата: Пятница, 19.02.2016, 11:15 |
Сообщение № 6

Группа: Пользователи

Ранг: Новичок

Сообщений: 30


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Manyasha, хорошая идея, лучше выложу файл такой, какой нужен в итоге:)

Вот…

 

Ответить

Didrou

Дата: Пятница, 19.02.2016, 11:18 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 30


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

И даже так, чтобы было нагляднее.

Видите, на листах 30дек 31 дек и 01 янв поменялось форматирование, но остались данные в указанном диапазоне.

 

Ответить

Manyasha

Дата: Пятница, 19.02.2016, 11:32 |
Сообщение № 8

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

Didrou, все равно не понятно %)
Т.е. нужно скопировать только формат, да?
на весь лист?
Тогда причем тут диапазон «b9:e32»? Он у Вас ничем (в плане формата) не отличается от образца.
И значения вне диапазона «b9:e32» тоже остаются без изменений…
Скопировать формат можно так…
[vba]

Код

        If sh.Name Like «??.??.????» Then
            Sheets(«Образец»).Range(«a1:l34»).Copy
            sh.Range(«a1:l34»).PasteSpecial xlPasteFormats
        End If

[/vba]
Если опять не угадала с диапазонами, используйте задание правильных диапазонов из предыдущих 2 моих кодов.


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Didrou

Дата: Пятница, 19.02.2016, 11:48 |
Сообщение № 9

Группа: Пользователи

Ранг: Новичок

Сообщений: 30


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Manyasha, попробую с другой стороны описать.

В последнем выложенном мной файле листы с «30.12.2015» по «01.01.2016» отформатированы по образцу.
Эти листы скопированы с листа «образец» в чистую, но данные в диапазоне b9:e32 остались прежними/не тронутыми.

Нужно представить как пользователь в ручную копирует лист «образец». Копирует в него содержимое без форматирования с ячеек b9:e32 листа «30.12.2015». Затем удаляет лист «30.12.2015» и переименовывает вновь созданный на «30.12.2015». Вот такой «отформатированный» лист нужен в итоге, но макросом, а не ручками:)

Сообщение отредактировал DidrouПятница, 19.02.2016, 11:50

 

Ответить

Manyasha

Дата: Пятница, 19.02.2016, 12:03 |
Сообщение № 10

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

Ну не хочу я копировать, переименовывать, удалять… :p
[vba]

Код

Sub Форматировать_по_образцу()
    Application.ScreenUpdating = False
    Dim sh As Worksheet, sh1 As Worksheet
    Set sh1 = Sheets(«Образец»)
    lr = sh1.UsedRange.Rows.Count
    lc = sh1.UsedRange.Columns.Count
    For Each sh In ThisWorkbook.Sheets
        If sh.Name Like «??.??.????» Then
            With sh
                Range(sh1.Cells(1, 1), sh1.Cells(8, lc)).Copy Range(.Cells(1, 1), .Cells(8, lc))
                Range(sh1.Cells(9, 6), sh1.Cells(32, lc)).Copy Range(.Cells(9, 6), .Cells(32, lc))
                Range(sh1.Cells(33, 1), sh1.Cells(lr, lc)).Copy Range(.Cells(33, 1), .Cells(lr, lc))
                Range(sh1.Cells(9, 1), sh1.Cells(lr, 1)).Copy Range(.Cells(9, 1), .Cells(lr, 1))
                sh1.Range(«b9:e32»).Copy
                .Range(«b9:e32»).PasteSpecial xlPasteFormats
            End With
        End If
    Next sh
    Application.ScreenUpdating = True
End Sub

[/vba]
так?


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Didrou

Дата: Пятница, 19.02.2016, 13:44 |
Сообщение № 11

Группа: Пользователи

Ранг: Новичок

Сообщений: 30


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Manyasha, в части форматирования вроде все в порядке.
Осталось применять не по условию:

[vba]

Код

If sh.Name Like «??.??.????» Then

[/vba]

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

[vba]

Код

sh1.Range(«b9:e32»).Copy
.Range(«b9:e32»).PasteSpecial xlPasteFormats

[/vba]

а брался из ячеек D16 и D17 листа «Содержание».

 

Ответить

Manyasha

Дата: Пятница, 19.02.2016, 15:15 |
Сообщение № 12

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

последняя попытка:
[vba]

Код

Sub Форматировать_по_образцу()
    Application.ScreenUpdating = False
    Dim sh As Worksheet, sh1 As Worksheet
    Set sh1 = Sheets(«Образец»)
    lr = sh1.UsedRange.Rows.Count
    lc = sh1.UsedRange.Columns.Count
    With Sheets(«Содержание»)
        r = Range(.Cells(Range(.[d16]).Row, Range(.[d16]).Column), .Cells(Range(.[d17]).Row, Range(.[d17]).Column)).Address
    End With
    For Each sh In ThisWorkbook.Sheets
    If sh.Name Like «??.??.????» Then
        If CDate(sh.Name) >= Sheets(«Содержание»).Range(«d9») And CDate(sh.Name) <= Sheets(«Содержание»).Range(«d10») Then
            ‘Если нужны только значения, уберите Formula
            Rng = sh.Range(r).Formula
            Sheets(«Образец»).Range(«a1:l34»).Copy sh.Range(«a1:l34»)
            sh.Range(r).Formula = Rng
        End If
    End If
    Next sh
    Application.ScreenUpdating = True
End Sub

[/vba]


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Didrou

Дата: Пятница, 19.02.2016, 16:32 |
Сообщение № 13

Группа: Пользователи

Ранг: Новичок

Сообщений: 30


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Manyasha, всё работает, только не тот диапазон брался
[vba]

Код

If CDate(sh.Name) >= Sheets(«Содержание»).Range(«d9») And CDate(sh.Name) <= Sheets(«Содержание»).Range(«d10»)

[/vba]
не d9 и d10, а d14 и d15, но это сущие пустяки, спасибо тебе! :)

 

Ответить

Che_69

0 / 0 / 0

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

Сообщений: 32

1

Макрос «Формат по образцу»

15.01.2014, 18:12. Показов 9462. Ответов 7

Метки нет (Все метки)


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

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

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Option Explicit
 
Sub Ìàêðîñ5()
'
' Ìàêðîñ5 Ìàêðîñ
'
 
'
    ActiveWindow.Panes(1).Activate
    Rows("11:11").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Range(Selection, Selection.End(xlDown)).Select
End Sub

Но он не работает как надо… После исполнения макроса лишь выделяются все нижерасполагающиеся строки, а форматирование не применяется к ним!



0



Programming

Эксперт

94731 / 64177 / 26122

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

Сообщений: 116,782

15.01.2014, 18:12

Ответы с готовыми решениями:

При открытие файла csv макросом меняет формат столбца с «общий» на «числовой»
Здравствуйте! Подскажите, пожалуйста.
Нужно макросом открыть файл csv. При открытии вручную все…

Макрос для Excel. Формат строки по образцу при условии
Добрый день!
Помогите пожалуйста написать макрос.
Нужно. Если в ячейке столбца &quot;C&quot; содержится…

Задача: поменять формат всех ячеек с датой «dd.mm.yyyy hh:mm:ss» на «dd.mm.yy»
Добрый день, уважаемые форумчане!

Есть &quot;умная&quot; таблица с данными, в т.ч., датами, но даты не в…

Как сделать так, чтобы макрос удалял данные из строки, начиная со столбца «p» и заканчивая столбцом «y»?
Здравствуйте, как сделать так, чтобы макрос удалял данные из строки, начиная со столбца &quot;p&quot; и,…

7

Surrogate

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

873 / 182 / 25

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

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

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

15.01.2014, 18:32

2

программное заполнение форматов (FillFormat)

Visual Basic
1
2
3
r = "11:" & ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
    Range("11:11").Select
    Selection.AutoFill Destination:=Range(r), Type:=xlFillFormats



2



1 / 1 / 0

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

Сообщений: 329

03.12.2022, 22:54

3

приветствую!

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



0



Часто онлайн

792 / 530 / 238

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

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

03.12.2022, 22:58

4

Оксана33,
Нажимайте кнопку формат по образцу, переходите на нужный лист и выделяйте ячейку которую нужно.

Я так делал, это работает.



0



1 / 1 / 0

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

Сообщений: 329

04.12.2022, 12:59

5

КостяФедореев, фишка в том чтобы без перехода, находясь на другой странице



0



344 / 206 / 78

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

Сообщений: 591

04.12.2022, 13:22

6

Оксана33, Не нужно так грубо нарушать правила форума.
Вы залезли в чужую тему со своим вопросом, который к ней не имеет никакого отношения. Свою создайте.
Если хотите быстро решить вашу проблему приложите небольшой файл с пояснениями.

Цитата
Сообщение от Оксана33
Посмотреть сообщение

насколько я поняла операция рабочая лишь на активной странице

Это неверно, с помощью VBA можно работать с любыми страницами не делая их активными.



1



Dinoxromniy

1237 / 673 / 240

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

Сообщений: 2,094

05.12.2022, 09:56

7

Цитата
Сообщение от Оксана33
Посмотреть сообщение

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

Строго говоря, это работает не так. По нажатию кнопки происходит копирование (выделенные ячейки кстати и отображаются как положено при копировании) и специальная вставка с параметром «только формат». Вставить скопированное вы можете в любой лист документа. Например кусок кода ниже копирует оформление с любого листа в лист3 ячейку А1:

Visual Basic
1
2
3
Selection.Copy
        ThisWorkbook.Sheets.Item("Лист3").Cells(1, 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False



1



1 / 1 / 0

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

Сообщений: 329

08.12.2022, 15:25

8

AlexOld, я поняла, извините, думала это та же тема, чуть расширив ее

Добавлено через 13 минут
Dinoxromniy, спасибо за ответ! почему то не додумалась сама взять макрос из макрорекодера и переписать, подставив в Selection адреса, что уже делала неоднократно



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

Сообщений: 92,604

08.12.2022, 15:25

Помогаю со студенческими работами здесь

Нужен макрос, который «Разрешает редактирование» и «Включить содержимое»
Добрый день, коллеги!

Необходимо найти способ, через макрос Разрешать редактирование и Включать…

Макрос, который бы в столбце в пустые строки вставлял формулы =»»&&»» предыдущего значения
Помогите пожалуйста, нужен макрос который бы в столбце в пустые строки вставлял формулы =&quot;&quot;&amp;&amp;&quot;&quot;…

Отметить полужирным шрифтом в исходном тексте слова имеющие приставки «пре», «при», «на», «не»
Отметить полужирным шрифтом в исходном тексте слова имеющие приставки &quot;пре&quot;,
&quot;при&quot;, &quot;на&quot;, &quot;не&quot;….

Цифровой формат для TextBox TextBox1.NumberFormat = «0.0»
Kakoj nujen kod dlja togo chtoby pri vvode dannyx Format TextBox-a byl takim 10.000 ili 1.000.000…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

8

На чтение 3 мин. Просмотров 15.1k. Опубликовано 30.07.2016

Есть в Excel отличная функция «Формат по образцу», которая позволяет копировать все последующие ячейки по формату выделенной ячейки. Наверно, многие ей пользовались. И наверно, как и я, пользовались следующим образом: выделил ячейку, нажал формат по образцу, выделил ячейку, опять нажал формат по образцу, выделил ячейку и так далее. Мне показалось, что проблема этой функции в том, что ее нельзя применить сразу на несколько ячеек. И поэтому я написал макрос, который это делает. Вся печаль состоит в том, что этот макрос оказался не нужен, так как в Excel такой функционал есть ох ох.

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

«Формат по образцу»

Нужно просто дважды нажать на кнопку, и можно скопировать формат на несколько ячеек подряд.

Мой макрос работает по другой идеологии. Нужно сначала выделить ячейки (можно раздельные выделения через ctrl)

Выделяем ячейки (раздельное выделение через ctrl)

Запускаем макрос, он спросит ячейку или диапазон ячеек, формат которых нужно скопировать

Выбираем ячейки, у которых надо скопировать формат

После работы видим, что выделенные ячейки приняли нужный формат

Результат работы макроса

В общем, ничего сложного. Можно сказать даже, что макрос в одну строчку через метод PasteSpecial. НО кто пишет макросы в excel, те знают, что после работы макроса отсутствует возможность откатить результат. Если при любом действии Excel вы можете нажать стрелочку назад или ctrl+Z, то после макроса все попытки будут тщетны. А при использовании копирования формата обязательно какие-то ячейки случайно зацепишь или не в тот формат переведешь, в общем, отмену действий надо обязательно сделать.

Прочитав статью Как отменить действия макроса, стало понятно, что надо все делать самому в части восстановления данных. Я пошел по первому пути (сохранении свойств ячейки), все таки делать копию листа это круто, но следить в файле копиями листов без 100% возможности потом за собой убрать как-то нехорошо.

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

Отмена действий макроса

и результат не заставит себя ждать

Результат отмены действий макроса

Есть, конечно, проблемка, описанная в оригинальной статье. Если выделяется, допустим, целая строка или колонка, то сохранение свойств приводит к притормаживанию, а отмена действий посылает Excel в хороший нокдаун. Поэтому в макросе для выделенных ячеек, количество которых более 100, отключается отмена действий. То есть макрос работает, но потом результат не вернешь. Хорошая новость: лучше строки и колонки копировать через стандартную команду «Формат по образцу», так как потом доступна отмена действий и Excel все это делает за секунды.

Единственный косяк в работе стандартной функции копирования формата: при объединенный ячейках в особых случаях excel пишет такое сообщение

Ошибка копирования формата

То есть, когда вы пытаетесь скопировать формат в строку с объединенными ячейками, вам нужно обязательно выделить полностью всю ячейку, иногда сразу это невозможно или трудно сделать. Но вот мой макрос спокойно применяет формат (насильно), убирая при этом объединенные ячейки

Результат работы макроса

Файл Excel c макросом ExampleCopyFont.xlsm

Отдельно только макрос macros_copyFormat.txt

Формулировка задачи:

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

Но он не работает как надо… После исполнения макроса лишь выделяются все нижерасполагающиеся строки, а форматирование не применяется к ним!

Код к задаче: «Макрос «Формат по образцу»»

textual

r = "11:" & ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
    Range("11:11").Select
    Selection.AutoFill Destination:=Range(r), Type:=xlFillFormats

Полезно ли:

15   голосов , оценка 3.667 из 5

Понравилась статья? Поделить с друзьями:
  • Формат по образцу excel что это
  • Формат подписи оси excel
  • Формат по образцу excel для чего
  • Формат подписи данных в диаграмме excel доли
  • Формат печати книги в word