我正在编写一个宏,它从包含许多子文件夹的文件夹中导入大量.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
答案 0 :(得分:0)
好的,我自己想通了。实际上这很简单。
由于代码很好地处理了一个条件,我只是将条件连接到一个条件。我在新列C
( - > C& B& A)中连接了B
,A
和E
列中的字符串。
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