Vba 如何生成条件IF语句以调用重新格式化模块

Vba 如何生成条件IF语句以调用重新格式化模块,vba,excel,Vba,Excel,我有一个脚本,它根据原始数据中的值收集数组,但该数组中的某些行需要使用灰色字体和斜体 我将如何做以下事情: 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

我有一个脚本,它根据原始数据中的值收集数组,但该数组中的某些行需要使用灰色字体和斜体

我将如何做以下事情:

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列中的一行有value=“No Action”,则调用我使用的模块将整行重新格式化为斜体和灰色字体

编辑:

我尝试了以下方法,当我将

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
选择2 如果您希望将您的范围传递给一个新的子系统,该子系统专用于处理显示
无操作的范围的操作语句,则您需要执行如下操作:

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


您需要将限定范围传递给子
行\u重新格式化
。如果你只是改变颜色,你不需要第二个潜艇。在这里就可以了。只需将
调用
替换为两行,说明格式我将实现什么来指定出现“无操作”的单元格的全流程?学习如何将关注点分离到单独的过程中,以及如何传递参数都不会有什么坏处。从来没有编写的程序“需要”多个类和作用域等等——只要编译,代码就可以在全局作用域和单个God过程中完美地运行,但代码是为人类阅读和维护而编写的,而不仅仅是为某些运行时执行而编写的。OP的想法是让一个程序只负责格式化一行,这是一种很好的思维方式,我不同意将其击倒(无论如何都是向上投票)。在我对解决方案下面的评论中,我(含糊地)提到了将其传递给另一个子系统所需的步骤。在大多数情况下,何时传递参数,似乎是个人喜好的问题。我倾向于只在动作语句范围较大时才这样做。如果只有两行,我宁愿当场处理。我可能应该重新表述我的解决方案——我的意图不是要否定最初的想法。只是为了提供一个不同的视角:)@MathieuGuindon@MathieuGuindon更新的解决方案显示了这两种方法:)@urderboy我成功地编辑了我在OP中发布的:但当我取出评论并尝试将其计数到最后一行时,它说不支持对象
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