Помогите пож-та объединить четыре макроса в один. В VBA не особо силен
Код
Sub DeleteSheet()
Dim Sh As Object
For Each Sh In ActiveWorkbook.Sheets
Application.DisplayAlerts = False
If Sh.Visible <> xlSheetVisible Then Sh.Delete
Application.DisplayAlerts = True
Next
End Sub
Public Sub DelHiddenRows()
Dim lR As Long, i As Long, Sh As Worksheet
On Error Resume Next
Application.ScreenUpdating = False
For Each Sh In ThisWorkbook.Worksheets
Sh.Activate
lR = Sh.UsedRange.Rows.Count + Sh.UsedRange.Row - 1
For i = lR To 1 Step -1
If Sh.Rows(i).Hidden Then Rows(i).Delete
Next
Next
Application.ScreenUpdating = True
End Sub
Sub delete_hidden_columns()
Dim ws As Worksheet
Dim i As Integer
For Each ws In ThisWorkbook.Worksheets
For i = 256 To 1 Step -1
If ws.Columns(i).EntireColumn.Hidden Then
ws.Columns(i).EntireColumn.Delete
End If
Next
Next ws
Set ws = Nothing
End Sub
Sub DeleteAllComments()
For Each xWs In Application.ActiveWorkbook.Sheets
For Each xComment In xWs.Comments
xComment.Delete
Next
Next
End Sub
Pavel.Nev, неужели Вы не видели, как выглядят макросы у других? Оформляйте код соответствующим тегом: ищите такую кнопку (см. скрин) и исправьте своё сообщение. По вопросу: Можно не объединять, а просто вызывать все Ваши макросы в нужной последовательности примерно так:
Код
Sub Macro1()
'....
'....
'....
Call Macro2
Call Macro3
Call Macro4
End Sub
Application.ScreenUpdating = False
For Each Sh In ThisWorkbook.Worksheets
lR = Sh.UsedRange.Rows.Count + Sh.UsedRange.Row - 1
For i = lR To 1 Step -1
If Sh.Rows(i).Hidden Then Rows(i).Delete
Next
For i = 256 To 1 Step -1
If Sh.Columns(i).EntireColumn.Hidden Then
Sh.Columns(i).EntireColumn.Delete
End If
Next
Sh. SpecialCells(xlCellTypeComments).ClearComments
Next
Application.ScreenUpdating = True
Если нужен не поочередный запуск, а объединение кодов, то вариант есть, но скрыт и ждет изменения названия темы согласно правилам форума. Изменить могут модераторы.
Объединение в моем понимании означает объединить 4е макроса в один Одним словом нажимаешь одну кнопку, и выполняются последовательно четыре макроса. То есть предлагаю следующий заголовок: "Объединить несколько макросов, чтобы их запуск выполнялся последовательно". Пойдет так?
Неужели я задаю такие трудные вопросы, что на них нельзя ответить сразу? Первый макрос будет выглядеть так:
Код
Sub DeleteSheet()
Dim Sh As Object
Application.DisplayAlerts = False
For Each Sh In ActiveWorkbook.Sheets
If Sh.Visible <> xlSheetVisible Then Sh.Delete
Next
'Отработал первый макрос - вызываем остальные
Call DelHiddenRows 'Вызвали второй макрос
Call delete_hidden_columns 'Вызвали третий макрос
Call DeleteAllComments 'Вызвали четвёртый макрос
Application.DisplayAlerts = True
End Sub
С остальными делать ничего не нужно - пусть остаются на своих местах. P.S. В первом макросе переместил строки с Application.DisplayAlerts - у Вас обновление экрана отключалось/включалось несколько раз.
Юрий М написал: Неужели я задаю такие трудные вопросы, что на них нельзя ответить сразу?
Ну получается, что нельзя, дядя Попроще надо отвечать и общаться, а то можно и в жбан получить....Это вам так на будущее. За помощь с макросом благодарю!
Pavel.Nev написал: Вообще уважительней надо общаться...
Вот просто интересно, про жбан, вы написали в надежде завоевать тут уважение , авторитет, образ шутника на форуме сформировать или поучить уважаемых тут людей, как себя вести в обществе?
Добрый день. Я только изучаю VBA и вот столкнулась с проблемой. Смысл в том, чтобы при нажатии на диаграмму, изменялись её свойства: т.е. чтобы по первому щелчку можно было перемещать и изменять размеры диаграммы вместе с ячейками, а по второму щелчку на ту же диаграмму перемещать её, но не изменять размеры. Я прописала 2 макроса, но они последовательно не работают, работает только один. Помогите, пожалуйста, объединить 2 макроса. Файл во вложении
Да как Ваш вопрос связан с темой?! Создайте отдельную тему с названием, отражающим суть задачи. На форуме по Excel не картинки нужно показывать, а файлы-примеры.