Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:在执行任务之前,检查其他工作簿中的单元格是否包含字符串_Vba_Excel_Macros - Fatal编程技术网

Excel VBA:在执行任务之前,检查其他工作簿中的单元格是否包含字符串

Excel VBA:在执行任务之前,检查其他工作簿中的单元格是否包含字符串,vba,excel,macros,Vba,Excel,Macros,注意:这个问题与我上一篇文章完全相同 这是我的问题的背景。我在一个文件夹中有多个相同格式的测试文件。我需要在每本工作手册的一列中计算“是”的具体数量。从上一个问题中,我能够获得一个遍历每个文件的宏,计算“是”,并将计数器放入主工作簿中。以下宏显示此代码: Private Sub CommandButton1_Click() Dim r As Range With Worksheets("Sheet1") For Each r In .Rang

注意:这个问题与我上一篇文章完全相同

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

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
现在我的问题是添加一个功能,仅当其旁边有一个字符串“Warning”时才计算“YES”。请参阅其中一个测试文件的以下快照:

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

我的想法是创建一个“If”函数,检查单元格是否包含“Warning”,如果是,则继续计算YES列。作为旁注,我不能制作一个宏来只查看列是否有字符串,因为该列可能有多个字符串。它需要指定“警告”或“警告*”(如果后面有详细信息)

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