VBA第2部分中If语句中的通配符数组

时间:2017-10-05 21:08:20

标签: excel vba

所以我上周问了这个问题,我对这个问题有了一个解决方案,但只有一件不起作用。 Application.Match部分似乎不起作用。当myarray与arr(1)不匹配时,我也得到了结果。

最初的问题是:

我想用这段代码做的是:

  1. 浏览指定文件夹中的所有文件以及该文件夹中的所有子文件夹。 (该文件夹中的文件通常用下划线分为5个部分。例如," XX1_XX2_XX3_XX4_XX5"

  2. 如果myarray中的3个字符指示符中的任何一个与文件名中的XX2匹配,则在Cell(22,3)上列出XX4,在Cell(22,4)上列出XX5并继续重复......细胞(23,3),细胞(23,4),细胞(24,3),细胞(24,4).....等。我只想要完全匹配..不知道该怎么做。

  3. 文件夹中有一些文件只有3个下划线...所以" XX1_XX2_XX3_XX4"。对于这些文件,如果myarray匹配XX2,则在单元格(i,3)上列出XX4并显示" NO INDICATOR" for Cells(i,4)


  4. Sub tracker()
    
        Const FPATH As String = "\\KEVINXX\FILESXX\FILES\"
        Dim f As String, i, j As Long, arr, sht As Worksheet
        Dim myarray As Variant
        myarray = Array("XXX", "AAA", "BBB", "SBM", "SBS", "JDS", "QQQ", "WWW", "CCC", "DDD", "EEE", "XXX", "AAS", "RRR", "SSS", "KKK", "ABX")
        Set sht = ActiveSheet
    
    
    
        f = Dir("\\KEVINXX\FILESXX\FILES\")
        i = 22
        Do While f <> ""
    
            'split filename on underscore
            arr = Split(f, "_", 5)
    
            If UBound(arr) >= 3 Then
                If IsError(Application.Match(arr(1), myarray, 0)) Then
                    If UBound(arr) = 3 Then
                        sht.Cells(i, 3).Value = Left(arr(3), Len(arr(3)) - 5)
                        sht.Cells(i, 4).Value = "No Indicator"
                    Else
                        sht.Cells(i, 3).Value = arr(3)
                        If UBound(arr) >= 4 Then
                            sht.Cells(i, 4).Value = Left(arr(4), Len(arr(4)) - 5)
    
                        End If
                    End If
                    i = i + 1
                End If 'no match
            End If
            f = Dir() 'next file
        Loop
    End Sub
    

1 个答案:

答案 0 :(得分:0)

您是否尝试过遍历数组

for x = 0 to 16
    If IsError(Application.Match(arr(1), myarray(x), 0)) Then
        If UBound(arr) = 3 Then
            sht.Cells(i, 3).Value = Left(arr(3), Len(arr(3)) - 5)
            sht.Cells(i, 4).Value = "No Indicator"
        Else
            sht.Cells(i, 3).Value = arr(3)
            If UBound(arr) >= 4 Then
                sht.Cells(i, 4).Value = Left(arr(4), Len(arr(4)) - 5)

            End If
        End If
            i = i + 1
    End If 'no match
next x

善待,快退或留下反馈)