Выполнить макрос на всех листах книги excel

Как применить макрос сразу ко всей книге целиком?

Ekaterina

Дата: Среда, 30.10.2013, 15:23 |
Сообщение № 1

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

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

Сообщений: 26


Репутация:

0

±

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


Excel 2010

Вот написала я макрос. А применить могу его только на том листе, на котором нахожусь. Захожу в список макросов, выбираю конкретный макрос и нажимаю «выполнить».
А как сделать так, чтоб этот выбранный мной макрос применился сразу ко всем листам данной книги?
Спасибо

 

Ответить

Serge_007

Дата: Среда, 30.10.2013, 15:26 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

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

Указать эти листы в макросе

[p.s.]Вы вообще видели в какой раздел постите? При чем здесь формулы?
Тему перенес[/p.s.]


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

SkyPro

Дата: Среда, 30.10.2013, 15:30 |
Сообщение № 3

Группа: Друзья

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

Сообщений: 1206


Репутация:

255

±

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


2010

[vba]

Код

Sub sshheeetttss()
Dim i&
For i = 1 To .sheets.Count
     ThisWorkbook.sheets(i).Activate
         ‘ ваш макрос
Next
End Sub

[/vba]


skypro1111@gmail.com

 

Ответить

Ekaterina

Дата: Среда, 30.10.2013, 18:48 |
Сообщение № 4

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

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

Сообщений: 26


Репутация:

0

±

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


Excel 2010

Serge_007,

P.S.
Вы вообще видели в какой раздел постите? При чем здесь формулы?
Тему перенес

Ой, извините :'(

 

Ответить

Ekaterina

Дата: Среда, 30.10.2013, 18:49 |
Сообщение № 5

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

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

Сообщений: 26


Репутация:

0

±

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


Excel 2010

SkyPro, спасибо большое! Сейчас попробую

 

Ответить

Alex_ST

Дата: Среда, 30.10.2013, 20:18 |
Сообщение № 6

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

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


2003

Ну, что-то я сильно сомневаюсь, что всё так просто, как написал SkyPro.
Скорее всего всё-таки макрос нужно будет перенести в стандартный модуль и, перебирая страницы в цикле, внутри циклов указывать перед Cells и Range имя листа — переменную цикла.



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

SkyPro

Дата: Среда, 30.10.2013, 20:54 |
Сообщение № 7

Группа: Друзья

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

Сообщений: 1206


Репутация:

255

±

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


2010

Alex_ST, ну в условиях задачи нет ничего. Ни файла, ни кода. Так что я выдал стандартный вариант, где все действия применяются к Activesheet.
Если бы люди читали правила, или, хотя бы понимали, что для решения вопроса недостаточно попросить кнопку «сделать как надо», то и ответ был бы другой )


skypro1111@gmail.com

 

Ответить

Ekaterina

Дата: Четверг, 31.10.2013, 09:57 |
Сообщение № 8

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

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

Сообщений: 26


Репутация:

0

±

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


Excel 2010

SkyPro, нет, не работает!
[moder]Странно.

Если бы люди читали правила, или, хотя бы понимали, что для решения вопроса недостаточно попросить кнопку «сделать как надо», то и ответ был бы другой )

 

Ответить

Ekaterina

Дата: Четверг, 31.10.2013, 10:05 |
Сообщение № 9

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

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

Сообщений: 26


Репутация:

0

±

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


Excel 2010

Alex_ST,
SkyPro, вот этот макрос. Только прошу сильно не смеяться :) Я не умею писать макросы, так что делала его просто с помощью кнопки «запись макроса», потом зашла в «изменить макрос» и добавила пароль защиты листа. Где тут в этом коде надо поменять так, чтобы он применялся сразу ко всем листам? Спасибо!

[vba]

Код

Sub защитить_листы()

‘ защитить_листы Макрос


Cells.Select
Selection.Locked = True
Selection.FormulaHidden = False
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 13
ActiveWindow.ScrollColumn = 14
ActiveWindow.ScrollColumn = 16
ActiveWindow.ScrollColumn = 17
ActiveWindow.ScrollColumn = 18
ActiveWindow.ScrollColumn = 19
ActiveWindow.ScrollColumn = 20
ActiveWindow.ScrollColumn = 21
ActiveWindow.ScrollColumn = 22
ActiveWindow.ScrollColumn = 23
ActiveWindow.ScrollColumn = 24
ActiveWindow.ScrollColumn = 25
ActiveWindow.ScrollColumn = 26
ActiveWindow.SmallScroll Down:=-9
Range(«AE13:AP27»).Select
Range(Selection, Selection.End(xlDown)).Select
Range(«AE13:AP638»).Select
Selection.Locked = False
Selection.FormulaHidden = False
ActiveWindow.ScrollColumn = 27
ActiveWindow.ScrollColumn = 28
ActiveWindow.ScrollColumn = 30
ActiveWindow.ScrollColumn = 31
ActiveWindow.ScrollColumn = 32
ActiveWindow.ScrollColumn = 33
ActiveWindow.ScrollColumn = 34
ActiveWindow.ScrollColumn = 35
ActiveWindow.ScrollColumn = 36
ActiveWindow.ScrollColumn = 37
ActiveWindow.ScrollColumn = 38
ActiveWindow.ScrollColumn = 39
ActiveWindow.ScrollColumn = 40
ActiveWindow.ScrollColumn = 41
ActiveWindow.ScrollColumn = 42
ActiveWindow.ScrollColumn = 43
ActiveWindow.ScrollColumn = 44
ActiveWindow.ScrollColumn = 45
ActiveWindow.ScrollColumn = 46
ActiveWindow.ScrollColumn = 47
ActiveWindow.ScrollColumn = 48
Range(«BF11»).Select
Selection.Locked = False
Selection.FormulaHidden = False
Range(«BN631:BR638»).Select
Range(«BN638»).Activate
ActiveWindow.ScrollRow = 608
ActiveWindow.ScrollRow = 605
ActiveWindow.ScrollRow = 599
ActiveWindow.ScrollRow = 593
ActiveWindow.ScrollRow = 582
ActiveWindow.ScrollRow = 566
ActiveWindow.ScrollRow = 551
ActiveWindow.ScrollRow = 533
ActiveWindow.ScrollRow = 514
ActiveWindow.ScrollRow = 478
ActiveWindow.ScrollRow = 444
ActiveWindow.ScrollRow = 394
ActiveWindow.ScrollRow = 358
ActiveWindow.ScrollRow = 328
ActiveWindow.ScrollRow = 297
ActiveWindow.ScrollRow = 279
ActiveWindow.ScrollRow = 270
ActiveWindow.ScrollRow = 260
ActiveWindow.ScrollRow = 250
ActiveWindow.ScrollRow = 239
ActiveWindow.ScrollRow = 230
ActiveWindow.ScrollRow = 209
ActiveWindow.ScrollRow = 202
ActiveWindow.ScrollRow = 201
ActiveWindow.ScrollRow = 195
ActiveWindow.ScrollRow = 191
ActiveWindow.ScrollRow = 187
ActiveWindow.ScrollRow = 181
ActiveWindow.ScrollRow = 177
ActiveWindow.ScrollRow = 174
ActiveWindow.ScrollRow = 170
ActiveWindow.ScrollRow = 166
ActiveWindow.ScrollRow = 163
ActiveWindow.ScrollRow = 158
ActiveWindow.ScrollRow = 152
ActiveWindow.ScrollRow = 144
ActiveWindow.ScrollRow = 137
ActiveWindow.ScrollRow = 128
ActiveWindow.ScrollRow = 119
ActiveWindow.ScrollRow = 110
ActiveWindow.ScrollRow = 103
ActiveWindow.ScrollRow = 96
ActiveWindow.ScrollRow = 90
ActiveWindow.ScrollRow = 86
ActiveWindow.ScrollRow = 83
ActiveWindow.ScrollRow = 79
ActiveWindow.ScrollRow = 76
ActiveWindow.ScrollRow = 74
ActiveWindow.ScrollRow = 71
ActiveWindow.ScrollRow = 70
ActiveWindow.ScrollRow = 68
ActiveWindow.ScrollRow = 67
ActiveWindow.ScrollRow = 65
ActiveWindow.ScrollRow = 63
ActiveWindow.ScrollRow = 61
ActiveWindow.ScrollRow = 60
ActiveWindow.ScrollRow = 56
ActiveWindow.ScrollRow = 52
ActiveWindow.ScrollRow = 49
ActiveWindow.ScrollRow = 47
ActiveWindow.ScrollRow = 45
ActiveWindow.ScrollRow = 43
ActiveWindow.ScrollRow = 41
ActiveWindow.ScrollRow = 39
ActiveWindow.ScrollRow = 35
ActiveWindow.ScrollRow = 32
ActiveWindow.ScrollRow = 31
ActiveWindow.ScrollRow = 27
ActiveWindow.ScrollRow = 25
ActiveWindow.ScrollRow = 23
ActiveWindow.ScrollRow = 21
ActiveWindow.ScrollRow = 19
ActiveWindow.ScrollRow = 14
ActiveWindow.ScrollRow = 13
Range(«BN13:BR638»).Select
Range(«BN638»).Activate
Selection.Locked = False
Selection.FormulaHidden = False
ActiveWindow.ScrollColumn = 45
ActiveWindow.ScrollColumn = 41
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 5
ActiveWindow.SmallScroll Down:=-9
Range(«D8»).Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Password:=»art789″, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowSorting:=True, AllowFiltering:=True
End Sub

[/vba]

 

Ответить

Ekaterina

Дата: Четверг, 31.10.2013, 10:06 |
Сообщение № 10

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

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

Сообщений: 26


Репутация:

0

±

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


Excel 2010

Этого достаточно? Или нужно весь файл выкладывать?

 

Ответить

Ekaterina

Дата: Четверг, 31.10.2013, 10:10 |
Сообщение № 11

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

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

Сообщений: 26


Репутация:

0

±

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


Excel 2010

А ещё можно один вопросик задать? Вот допустим есть у меня макрос, который удаляют содержимое определённых ячеек, ну и плюс проставляет суммы в некоторых колонках. Мне нужно, чтоб он 1 раз сделал это действие во всех листах книги, а после этого не действовал. Что нужно для этого сделать? Если, например, я этот макрос оставлю в списке сохранённых макросов этой конкретной книги, то при каждом открытии этой книги он будет опять проделывать все эти действия? Или не будет? А если я его удалю, то все те действия, которые он проделал до этого, отменятся или нет?

 

Ответить

Alex_ST

Дата: Четверг, 31.10.2013, 12:24 |
Сообщение № 12

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

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


2003

Ekaterina,
не вдаваясь в подробности, что и зачем Вы защищали, по всем листам книги будет так:
[vba]

Код

Sub защитить_листы()
        Dim sH As Worksheet
        Application.ScreenUpdating = False
        For Each sH In ThisWorkbook.Worksheets
           sH.Cells.Locked = True: sH.Cells.FormulaHidden = False
‘       sH.Range(«AE13:AP638», «BF11», «BN13:BR638»).Locked = False ‘ это НЕ ПРАВИЛЬНО — ошибка синтаксиса!!!
           sH.Range(«AE13:AP638,BF11,BN13:BR638»).Locked = False ‘ вот так должно быть
           sH.Protect DrawingObjects:=True, Contents:=True, Password:=»art789″, _
                      Scenarios:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
                      AllowFormattingRows:=True, AllowSorting:=True, AllowFiltering:=True
        Next sH
        Application.ScreenUpdating = True
End Sub

[/vba]
А про «вопросик», так ведь макрос сам по себе ничего делать не будет. Чтобы он сработал, нужно его вызвать.
Вызвать его можете Вы сами, запустив, например, из списка макросов.
А можно ещё организовать его работу автоматически, но не самостоятельно, а только по факту происхождения какого-либо события (например, открытия книги, выбора листа, изменения выбранной ячейки, и ещё огромная куча событий-Event может быть отслежена программно).
А если у Вас в книге обработка событий (вызов процедур по событиям) не прописан, то никакой макрос сам по себе не запустится.

**********************************************
ВНИМАНИЕ! Вчера в коде мною была допущена ошибка в синтаксисе обращения к объекту Range. Прошу прощения. На данный момент она уже закомментирована и исправлена.



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STПятница, 01.11.2013, 10:25

 

Ответить

Ekaterina

Дата: Четверг, 31.10.2013, 12:39 |
Сообщение № 13

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

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

Сообщений: 26


Репутация:

0

±

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


Excel 2010

Alex_ST, спасибо большое. Но я не поняла, а где все те строчки, которые были у меня? Их же тоже нужно куда-то вставлять, чтоб у меня защищались на листе именно те области, которые нужно защитить? Или это и есть весь макрос целиком?

 

Ответить

Ekaterina

Дата: Четверг, 31.10.2013, 12:57 |
Сообщение № 14

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

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

Сообщений: 26


Репутация:

0

±

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


Excel 2010

Alex_ST, не работает :( . Выделяет вот этот отравок End With
sH.Range и выдаёт ошибку: «Compile error: Wrong number of arguments or invalid property assignment»

 

Ответить

SkyPro

Дата: Четверг, 31.10.2013, 13:11 |
Сообщение № 15

Группа: Друзья

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

Сообщений: 1206


Репутация:

255

±

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


2010

Приложите ваш файл.


skypro1111@gmail.com

 

Ответить

Ekaterina

Дата: Четверг, 31.10.2013, 13:22 |
Сообщение № 16

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

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

Сообщений: 26


Репутация:

0

±

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


Excel 2010

SkyPro, я не знаю как его сделать размером в 100 кБ. Он весит намного больше, хотя я удалила 2/3 всех листов, чтоб вставить сюда

 

Ответить

Ekaterina

Дата: Четверг, 31.10.2013, 13:29 |
Сообщение № 17

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

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

Сообщений: 26


Репутация:

0

±

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


Excel 2010

Уже удалила всё что только можно, но весит всё равно много 4 Мб

 

Ответить

Alex_ST

Дата: Четверг, 31.10.2013, 13:39 |
Сообщение № 18

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

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


2003

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



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

SkyPro

Дата: Четверг, 31.10.2013, 14:06 |
Сообщение № 19

Группа: Друзья

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

Сообщений: 1206


Репутация:

255

±

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


2010


Ну почему ничего ? Скроллит вверхвниз :)

Ekaterina, скопируйте все данные в новый файл. Скорее всего у вас там очень много лишнего (строк, столбцов).


skypro1111@gmail.com

 

Ответить

Alex_ST

Дата: Четверг, 31.10.2013, 19:01 |
Сообщение № 20

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

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


2003

Ну, описАлся когда аргументы в Range(…) перечислял… Поспешил, не проверил :'(
Наврал в синтаксисе перечисления диапазонов в Range :(
Код исправил в предыдущем посте чтобы на форуме не было ошибочного синтаксиса



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STЧетверг, 31.10.2013, 20:43

 

Ответить

 

SHARP

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

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

#1

10.03.2017 13:32:18

Доброго времени суток
Как сделать так, чтобы При сохранении книги макрос работал на всех листах где это нужно, а не только на активном?

Скрытый текст

 

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

Изменено: Ігор Гончаренко10.03.2017 14:09:11

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

 

SHARP

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

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

#3

10.03.2017 14:32:04

Если в макрос вставить

Скрытый текст

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

Как проверить наличии «КнопкаЗОР» на листе
или
прописать В СЛУЧАИ ОТСУТСТВИИ ТАКОВОЙ

 

Юрий М

Модератор

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

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

#4

10.03.2017 15:00:21

Цитата
SHARP написал:
тогда он будет всегда выполняться на всех листах, а мне нужно чтобы только при сохранении

1. Вы сами просили на всех листах.
2. Вызывайте эту процедуру при  наступлении события сохранения.
===
И перечитайте цитату — какая связь? ))

 

SHARP

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

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

Макрос «ЗАКРЫТЬ» вызывается нажатием кнопки активного листа и выполняется только на текущем листе
при вызове процедуры сохранить надо, чтобы этот макрос «ЗАКРЫТЬ» выполнялся на всех листах.
сам дошел до создания двух макросов для различных процедур.

 

Юрий М

Модератор

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

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

#6

10.03.2017 15:18:14

Цитата
SHARP написал:
надо, чтобы этот макрос «ЗАКРЫТЬ» выполнялся на всех листах

Перебирайте листы циклом и выполняйте нужные действия для каждого листа.
А вот эта строка

Код
If Worksheets(i).Name <> "" Then

вызывает недоумение: не может лист не иметь имени.

 

SHARP

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

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

про это я писал посте #3

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

 

Юрий М

Модератор

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

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

Я читал #3. Зачем два макроса? Нажали на кнопку, макрос перебирает все листы, на каждом выполняет нужные операции. Проблема в чём?
И Вы ничего не ответили про проверку имя листа в #6.

 

SHARP

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

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

Проблема в том, что пи нажатии кнопки макрос должен выполнятся только на активном листе и мне не нужно, чтобы он перебирал другие листы и делал на них какие либо изменения. Данная задача ставиться только при сохранении книги.
Строкой в посте#6 я организую условия для переборки всех листов. Т.к. лист не может не иметь имени, значит будут перебраны все листы.
Бывают листы, в которых не требуются изменения и впоследствии они могут туда быть вписаны.

Изменено: SHARP10.03.2017 15:44:23

 

Юрий М

Модератор

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

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

#10

10.03.2017 15:59:30

Если при нажатии на кнопку макрос должен делать действия только на активном листе, а при событии сохранения пройтись по всем, то я бы добавил глобальную логическую переменную и проверял её значение: например, если ИСТИНА, обработали только активный лист и вышли из процедуры. Если ЛОЖЬ — выполняется цикл.

Цитата
SHARP написал:
Строкой в посте#6 я организую условия для переборки всех листов. Т.к. лист не может не иметь имени, значит будут перебраны все листы.

Макрос и так переберёт ВСЕ листы. Условие перебора всех листов задаётся не строкой, которую я цитировал, а параметрами цикла. В Вашем случае с первого листа по последний.

 

The_Prist

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

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

Профессиональная разработка приложений для MS Office

#11

10.03.2017 16:02:49

Цитата
SHARP написал:
Бывают листы, в которых не требуются изменения

Имена листов известны?

Цитата
SHARP написал:
Как проверить наличии «КнопкаЗОР» на листе

Можно так:

Код
function IsShapeExists(ws as worksheet, s as string)
dim osh as shape
on error resume next
set osh = ws.shapes(s)
IsShapeExists = not osh is nothing
end function

Sub CallCheck()
dim ws as worksheet
for each ws in thisworkbook.worksheets
if IsShapeExists(ws,"КнопкаЗОР") then
'здесь есть кнопка с именем "КнопкаЗОР"
end if
next
end sub

при условии, что кнопка является элементом форм или автофигурой. С ActiveX подход определения на листе иной будет, хоть общий принцип тот же.

Или можно просто перебрать только нужные листы:

Код
Sub CycleByNames()
dim ws as worksheet
dim arr,x
arr = array("Лист1","Лист5","Отчет")
for each x in arr
set ws = thisworkbook.sheets(x)
'что-то делаем с листом, например, активируем
ws.Select
next
end sub

Изменено: The_Prist10.03.2017 16:05:12

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

SHARP

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

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

#12

10.03.2017 16:31:34

Цитата
Юрий М написал:
я бы добавил глобальную логическую переменную и проверял её значение: например, если ИСТИНА, обработали только активный лист и вышли из процедуры. Если ЛОЖЬ — выполняется цикл.

Я про это и спрашиваю. Я понимаю, что при разных условиях и разное решение. Решение готово, а условия построить не получается.

Цитата
The_Prist написал:
Имена листов известны?

Все листы имеют разное название, но те, которые перебирать не надо — Известны.

Цитата
The_Prist написал:
С ActiveX подход определения на листе иной будет

у меня как раз ActiveX, но ваш код встал как влитой. Спасибо

 

Юрий М

Модератор

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

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

#13

10.03.2017 18:39:45

В модуль книги:

Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Flag = True
    Call ЗАКРЫТЬ
End Sub

В стандартный модуль:

Код
Public Flag As Boolean
Sub ЗАКРЫТЬ()
'Выполняются операции только на активном листе
    ActiveSheet.КнопкаЗОР.Caption = "ЗАКРЫТО"
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    If Not Flag Then Exit Sub
'Все последующие строки будут выполнены только в том случае, если макрос был вызван по событию
    For i = 1 To Sheets.Count
        If Worksheets(i).Name <> "Лист1" And Worksheets(i).Name <> "Лист3" Then
            Sheets(i).Activate 'Активация листа только для примера: здесь нужные операции с листами
        End If
    Next
    Flag = False
End Sub

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

 

SHARP

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

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

 

assedo

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

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

#15

21.07.2017 16:38:39

Доброго времени суток
в продолжении темы «выполнение макроса на всех листах»
имею вот такой макрос (удаление строк со значением «0»):

Код
Sub M55_DelRows2()
    Dim x As Range, y As Range, fst As String
    Set x = [B:B].Find(0, , xlValues, xlWhole)
    If Not x Is Nothing Then
        fst = x.Address
        Do
            If y Is Nothing Then Set y = x Else Set y = Union(y, x)
            Set x = [B:B].FindNext(x)
        Loop While fst <> x.Address
        y.EntireRow.Delete
    End If
End Sub

он выполняется только на первом листе
что необходимо дописать/исправить что бы выполнял на всех листах или на выбранных листах

заранее благодарю

Изменено: assedo21.07.2017 16:39:31

 

Sanja

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

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

#16

21.07.2017 16:49:50

Для ВСЕХ листов

Код
Sub M55_DelRows2()
Dim sh As Worksheet, x  As Range, y As Range, fst As String
For Each sh In Worksheets
    With sh
        Set x = .Columns("B").Find(0, , xlValues, xlWhole)
        If Not x Is Nothing Then
            fst = x.Address
            Do
                If y Is Nothing Then Set y = x Else Set y = Union(y, x)
                Set x = .Columns("B").FindNext(x)
            Loop While fst <> x.Address
            y.EntireRow.Delete
        End If
    End With
Next
End Sub

Согласие есть продукт при полном непротивлении сторон.

 

assedo

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

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

#17

21.07.2017 16:51:08

Sanja,
Благодарю, хорошего дня.

Обычно мы можем запускать макрос на листе, если есть несколько листов, которые необходимо применить этот макрос, вы должны запускать код один за другим. Есть ли другой быстрый способ запустить один и тот же макрос на нескольких листах одновременно в Excel?

Запустить или выполнить один и тот же макрос на нескольких листах одновременно с кодом VBA


Запустить или выполнить один и тот же макрос на нескольких листах одновременно с кодом VBA

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

1. Удерживайте ALT + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. Нажмите Вставить > Модули, и вставьте следующий макрос в Модули Окно.

Код VBA: запускать один и тот же макрос на нескольких листах одновременно:

Sub Dosomething()
    Dim xSh As Worksheet
    Application.ScreenUpdating = False
    For Each xSh In Worksheets
        xSh.Select
        Call RunCode
    Next
    Application.ScreenUpdating = True
End Sub
Sub RunCode()
    'your code here
End Sub

Внимание: В приведенном выше коде скопируйте и вставьте свой собственный код без ниже заголовок и End Sub нижний колонтитул между Дополнительный код выполнения () и End Sub скрипты. Смотрите скриншот:

макрос запуска документа на всех листах 1

3. Затем поместите курсор на макрос первой части и нажмите F5 нажмите клавишу для запуска кода, и ваш код макроса будет применяться к одному листу.



Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (13)


Оценок пока нет. Оцените первым!

Возможно, Lena, Вам нужно, чтобы на всех листах происходили одинаковые изменения? — тогда в макросе необходимо предварительно все листы книги выделить так:

Visual Basic
1
ThisWorkbook.Sheets.Select

Далее присвоим активной ячейке (это та, что на активном листе), какое-либо значение, например, 15 и зальём её цветом:

Visual Basic
1
2
ActiveCell = 15
ActiveCell.Interior.Color = RGB(15, 20, 200)

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

Автор iva, 24 апреля 2017, 19:04

Добрый день!

Пожалуйста, подскажите, как сделать, чтобы этот макрос работал на всех листах книги, а не только на активном?

Sub T()

Dim lngI As Long
Dim lngJ As Long
    lngI = Cells(Rows.Count, 18).End(xlUp).Row ‘определяем строку последней заполненной ячейки в столбце R
    lngJ = Cells(Rows.Count, 6).End(xlUp).Row ‘определяем строку последней заполненной ячейки в столбце F
    Range(«R» & lngI).Copy Range(«R» & lngI + 1 & «:R» & lngJ)

End Sub



Администратор

  • Administrator
  • Сообщения: 2,254
  • Записан

Sub T()

    Dim sh As Worksheet
    Dim lngI As Long
    Dim lngJ As Long

        For Each sh In Worksheets
        lngI = sh.Cells(sh.Rows.Count, 18).End(xlUp).Row ‘определяем строку последней заполненной ячейки в столбце R
        lngJ = sh.Cells(sh.Rows.Count, 6).End(xlUp).Row ‘определяем строку последней заполненной ячейки в столбце F
        sh.Range(«R» & lngI).Copy sh.Range(«R» & lngI + 1 & «:R» & lngJ)
    Next sh

End Sub



  • Форум по VBA, Excel и Word

  • VBA, Excel

  • VBA, макросы в Excel

  • Excel: Макрос для всех листов книги

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