if else语句有三个条件,使用Application.Match查找行号

时间:2018-03-07 13:17:53

标签: excel-vba vba excel

我正在编写一个宏,它从包含许多子文件夹的文件夹中导入大量.csv文件。到目前为止这是有效的。 现在我想实现,如果文件已经导入,则不应再次导入。我遇到了一个问题。

我真的试图找到一个带搜索功能的解决方案,但我只能找到“If else语句有两个条件”,但它没有让我的代码工作。

我需要用三个条件写一个if else语句。

条件:仅当文件名(列C)文件夹名称(列B)和父文件夹名称(列A)完全匹配时,才能导入文件。

对于一个条件,它工作正常。

这是我在C列中查找文件名的代码片段:

 ' Check if file was already imported should return Row Number --> SearchColumn

If Not IsError(Application.Match(fso.GetBaseName(oFile.name), Columns("C:C"), 0)) Then
   SearchColumn = Application.Match(fso.GetBaseName(oFile.name), Columns("C:C"), 0)
End If

变量SearchColumn告诉我找到文件名的位置,如果它在列表中。我想使用此变量来检查B列和A列的同一行是否与文件名匹配。

我认为会是这样的:

' Check if file was already imported should return Row Number --> SearchColumn

If Not IsError(Application.Match(fso.GetBaseName(oFile.name), Columns("C:C"), 0)) Then
   SearchColumn = Application.Match(fso.GetBaseName(oFile.name), Columns("C:C"), 0)
End If

If Not IsError(Application.Match(fso.GetBaseName(oFile.name), Columns("C:C"), 0)) _
   And Not IsError(Application.Match(fso.GetBaseName(oFolder), "B1:B" & SearchColumn, 0)) _
   And Not IsError(Application.Match(fso.GetBaseName(folderName), "A1:A" & SearchColumn, 0)) Then

' Do nothing because file was already imported

Else

' import file / copy content

Set wbkCS = Workbooks.Open(oFile.path)
  'some more macro code

但不知何故,它忽略了其他两个条件。我错在哪里?

最佳TMC

1 个答案:

答案 0 :(得分:0)

好的,我自己想通了。实际上这很简单。 由于代码很好地处理了一个条件,我只是将条件连接到一个条件。我在新列C( - > C& B& A)中连接了BAE列中的字符串。

Range("E" & LastRow).FormulaR1C1 = fso.GetBaseName(Left(oFolder, InStrRev(oFolder, "\"))) _
                                    & fso.GetBaseName(oFolder) _
                                    & fso.GetBaseName(FileName)

我使用此列来查找我的连接标准:

 If Not IsError(Application.Match(criteria, Columns("E:E"), 0)) Then

    ' Do nothing because file was already imported

 Else

    'import code

就是这样。

最佳TMC