Как сделать условный оператор IF для вызова модуля переформатирования? - PullRequest
0 голосов
/ 04 октября 2018

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

Как мне сделать что-то вроде:

Dim strAction As String

Dim ActionRow As Long

Dim colAction As Long
colAction = 3

For ActionRow = 2 to ThisWorkbook.Worksheets("Sheet1").UsedRange.Rows.Count

if ThisWorkbook.Worksheets("Sheet1").Cells(ActionRow, 3).Value = "No Action" Then

Call Row_Reformat

End If

Next

Перефразируя, на любом текущем новом листе (фактическое имя листа может быть Листом 54, поэтому мне нужно, чтобы оно ссылалось только на текущий лист)Я нахожусь, если строка в столбце C имеет значение = "Нет действия", то вызовите модуль, который я использую, чтобы переформатировать всю строку как курсив и серый шрифт

РЕДАКТИРОВАТЬ:

Я пыталсяследующее, и это работает, когда я положил:

2 to 10' To Wb.Worksheet("Sheet1").UsedRange.Rows.Count

Но это не работает:

For ActionRow = 2 To Wb.Worksheet("Sheet1").UsedRange.Rows.Count
                        If .Cells(ActionRow, 3).Value = "No Action" Then
                            .Range("A" & ActionRow & ":AB" & ActionRow).Font.Italic = True
                            .Range("A" & ActionRow & ":AB" & ActionRow).Font.Color = 10921638
                        End If
                    Next ActionRow

1 Ответ

0 голосов
/ 04 октября 2018

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


Опция 1

Sub Tester()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim i As Long

For i = 2 To ws.Range("C" & ws.Rows.Count).End(xlUp).Row
    If ws.Range("C" & i) = "No Action" Then
        ws.Range("C" & i).EntireRow.Font.Italic = True
        ws.Range("C" & i).EntireRow.Interior.Color = "INSERT COLER NUMBER HERE"
    Else
        'Do what you want if the value is NOT "No Action"
    End If
Next i

End Sub

Опция 2

Если вы предпочитаете передавать свой диапазон в новую подпрограмму, предназначенную для обработки оператора действиядиапазон, показывающий No Action, вам нужно реализовать что-то вроде этого:

Sub LoopSub()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim i As Long

For i = 2 To ws.Range("C" & ws.Rows.Count).End(xlUp).Row
    If ws.Range("C" & i) = "No Action" Then
        No_Action ws.Range("C" & i)
    Else
        'Do what you want if the value is NOT "No Action"
    End If
Next i

End Sub


Sub No_Action(Target As Range)

With Target
    .EntireRow.Font.Italic = True
    .EntireRow.Interior.Color = "INSERT COLOR NUMBER HERE"
End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...