Макрос / VBA для цикла и пропустить листы на основе значения ячейки

может ли кто-нибудь помочь мне с макросом/VBA, поскольку то, что я прошу, немного продвинуто для меня.

У меня есть книга Excel с 10 листами данных.

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

раньше у меня был только 1 лист, но теперь у меня есть 10 листов, мне нужно, чтобы мой макрос для перебора листов и сделать такие же изменения на каждом листе, но только если лист не Не содержит значение 'UK' в ячейке A1. Если лист содержит UK в ячейке A1, я хочу, чтобы он пропустил этот лист, не внес никаких изменений и перешел на следующий.

для примера, скажем, я хочу удалить столбец H и изменить цвет текста на красный. Как бы я это сделал, используя правила, которые я изложил выше?

надеюсь, это имеет смысл.

спасибо заранее

FYI я использую excel 2016

обновление:

макрос, который у меня есть записывается следующим образом;

Sub Sort_Data()
'
' Sort_Data Macro
'

'
    Sheets("Sheet2").Select
    Columns("AG:AI").Select
    Selection.Delete Shift:=xlToLeft
    Columns("AE:AE").Select
    Selection.Delete Shift:=xlToLeft
    Columns("H:AA").Select
    Range("AA1").Activate
    Selection.Delete Shift:=xlToLeft
    Columns("E:E").Select
    Selection.Cut
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight
    Columns("J:M").Select
    Selection.Cut
    Columns("H:H").Select
    Selection.Insert Shift:=xlToRight
    Columns("B:B").Select
    Selection.Copy
    Columns("P:P").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Columns("P:P").Select
    Application.CutCopyMode = False
    ExecuteExcel4Macro _
        "FORMULA.REPLACE(""$"","""",2,1,FALSE,FALSE,,FALSE,FALSE,FALSE,FALSE)"
    Range("Q2").Select
    ActiveCell.FormulaR1C1 = "=RC[-1]/RC[-9]"
    Selection.AutoFill Destination:=Range("Q2:Q6")
    Range("Q2:Q6").Select
    Columns("H:H").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("R:R").Select
    Selection.Copy
    Columns("H:H").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Columns("Q:R").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft
    Range("H1").Select
    ExecuteExcel4Macro "PATTERNS(0,0,0,,2,2,0,0)"
    Selection.Locked = True
    Selection.FormulaHidden = False
    ActiveCell.FormulaR1C1 = "Efficiency"
    Columns("B:O").Select
    With Selection
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .MergeCells = False
    End With
    Cells.Select
    Selection.Columns.AutoFit
    Range("A1").Select
End Sub

Я попытался и не смог использовать функцию петли описано здесь:

Поддержка Microst

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

спасибо

18
задан jcbermu
05.01.2023 4:03 Количество просмотров материала 2562
Распечатать страницу

2 ответа

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

Public Sub AmendSheets()
    Dim i As Integer
' Start a count to go from sheet 1 to the total number of sheets
    For i = 1 To Application.Sheets.Count
' Select each sheet individually
    Worksheets(i).Activate

' Check for UK to see if changes are required
    If Range("A1").Value <> "UK" Then
' Put your changes in here

      End If
    Next i
End Sub
0
отвечен Stephen 2023-01-06 11:51

Это решение, которое вам нужно:

Public Function SheetReview()
    Dim wkb As Workbook
    Dim wks As Worksheet
    Set wkb = ThisWorkbook 'This object references the workbook
    wscount = wkb.Worksheets.Count 'Number of sheets in the workbook
    For i = 1 To wscount ' Loop one by one the sheets
        Set wks = wkb.Worksheets(i) 'Assign the current sheeet to object wks
        If wks.Cells(1, 1) <> "UK" Then ' If cell A1 is not UK
            With wks 'Let's work on the object wks
                '**********************
                'From here goes you code:
                'Sheets("Sheet2").Select <- Now you don't need this. it's referenced in the object wks
                Columns("AG:AI").Select
                Selection.Delete Shift:=xlToLeft
                .
                .
                .






            End With
        End If
    Next i
End Function

открыть VBA / Macros с помощью Alt+F11 щелкните правой кнопкой мыши Workbook и вставить новый модуль.

вставьте код справа.

0
отвечен jcbermu 2023-01-06 14:08

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

macros
microsoft-excel
microsoft-excel-2016
vba
Вверх