Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Как объединить несколько макросов в один или выполнить их последовательно?
 
Добрый день.

Помогите пож-та объединить четыре макроса в один. В 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 - 21 Сен 2018 19:46:07
 
Pavel.Nev, неужели Вы не видели, как выглядят макросы у других? Оформляйте код соответствующим тегом: ищите такую кнопку (см. скрин) и исправьте своё сообщение.
По вопросу: Можно не объединять, а просто вызывать все Ваши макросы в нужной последовательности примерно так:
Код
Sub Macro1()
'....
'....
'....
    Call Macro2
    Call Macro3
    Call Macro4
End Sub
Тег VBA.jpg (19.2 КБ)
 
последние 3 как то так
Код
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
 
Если нужен не поочередный запуск, а объединение кодов, то вариант есть, но скрыт и ждет изменения названия темы согласно правилам форума. Изменить могут модераторы.
 
Цитата
vikttur написал:
Если нужен не поочередный запуск, а объединение кодов, то вариант есть, но скрыт и ждет изменения названия темы согласно правилам форума. Изменить могут модераторы.
как к ним обратиться?
 
Прямо здесь предложите название.
 
Объединение четырех макросов в один.
 
Что в лоб, что по лбу.
Вам объединить - как? Если поочередно запустить (объединить запуск) - Юрий М Вам показал.
 
Объединение в моем понимании означает объединить 4е макроса в один ;)  Одним словом нажимаешь одну кнопку, и выполняются последовательно четыре  макроса. То есть предлагаю следующий заголовок: "Объединить несколько макросов, чтобы их запуск выполнялся последовательно". Пойдет так?
 
Цитата
Юрий М написал:
По вопросу: Можно не объединять, а просто вызывать все Ваши макросы в нужной последовательности примерно так:
Юрий, не могли бы вы пожалуйста написать полный код, поскольку я не особо силен в VBA... Спасибо большое!
 
Какова должна быть последовательность выполнения макросов из стартового сообщения?
 
Неужели я задаю такие трудные вопросы, что на них нельзя ответить сразу?
Первый макрос будет выглядеть так:
Код
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 - у Вас обновление экрана отключалось/включалось несколько раз.
 
Цитата
Юрий М написал: Неужели я задаю такие трудные вопросы, что на них нельзя ответить сразу?
Ну получается, что нельзя, дядя ;) Попроще надо отвечать и общаться, а то можно и в жбан получить....Это вам так на будущее.
За помощь с макросом благодарю!
 
Автор получит жбан, если не объяснится
 
Да, уж...
 
Цитата
vikttur написал:
Автор получит жбан, если не объяснится
Объясните сначала вот это: "Неужели я задаю такие трудные вопросы, что на них нельзя ответить сразу?" Апосля и поговорим...

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

За макрос еще раз спасибо ;)
 
Цитата
Pavel.Nev написал:
Вообще уважительней надо общаться...
Вот просто интересно, про жбан, вы написали в надежде завоевать тут уважение , авторитет, образ шутника на форуме сформировать или поучить уважаемых тут людей, как себя вести в обществе?

ВсеЖ бан тут заслуженный на мой взгляд.
 
Цитата
Pavel.Nev написал:
уважительней надо общаться
Pavel.Nev, и что же неуважительного было в моём вопросе? Нормальный вопрос - ничего обидного. А в ответ хамство. Извиниться не хотите?
 
А мне кажется наоборот, что обидный вопрос. И это совсем не хамство, только лишь дружеский совет. Первый не хотите извиниться?

Цитата
БМВ написал: про жбан, вы написали...
Это была реакция на неуважительное отношение! По моему это никто не любит...
Страницы: 1
Читают тему (гостей: 1)
Наверх