Excel VBA:在执行任务之前检查另一个工作簿中的单元格是否包含String

时间:2016-10-20 20:39:55

标签: excel vba excel-vba macros

注意:此问题适用于我之前的帖子here

这是我的问题的背景。我在一个文件夹中有多个相同格式的测试文件。我需要计算" YES"的具体数量。在每本工作簿的一栏中。从我之前的问题,我能够获得遍历每个文件的宏,计算" YES",并将计数器放在主工作簿中。以下宏显示了此代码:

Private Sub CommandButton1_Click()

    Dim r As Range
    With Worksheets("Sheet1")
        For Each r In .Range("A2", .Range("A" & .Rows.Count).End(xlUp))
            r.Offset(0, 1).Value = getYesCount(r.Value)
        Next
    End With
End Sub

Function getYesCount(WorkBookName As String) As Long
    Const FolderPath As String = "C:\Users\khanr1\Desktop\CodeUpdateTest\"

    If Len(Dir(FolderPath & WorkBookName)) Then
        With Workbooks.Open(FolderPath & WorkBookName)
            With .Worksheets("Sheet2")
                getYesCount = Application.CountIf(.Range("D:D"), "YES")
            End With
            .Close False
        End With
    Else
        Debug.Print FolderPath & WorkBookName; ": Not Found"
    End If
End Function

现在我遇到的问题是添加一个计算" YES"只要有一个字符串"警告"毗邻它。请参考以下某个测试文件的快照:

Warning Snap

以下是主工作簿(CountResults.xlsm)的快照:

enter image description here

我的想法是创造一个' If'检查单元格是否包含"警告"如果是这样,继续计算YES列。作为旁注,我不能创建一个只看到列是否有字符串的宏,因为该列可能有多个字符串。它需要指定"警告"或"警告*" (如果有详细信息)。

1 个答案:

答案 0 :(得分:2)

  getYesCount = Application.CountIfs(.Range("D:D"), "YES", _
                                     .Range("B:B"), "Warning*")