【问题标题】:Exclude certain files, by name, while looping through files in a folder按名称排除某些文件,同时遍历文件夹中的文件
【发布时间】:2020-07-09 14:08:46
【问题描述】:

以下代码循环遍历文件夹中的文件并将文件名添加到 Excel 中的范围内。

Dim oFSO As Object
Dim oFolder As Object
Dim oFile As Object
Dim i As Integer

Dim DNDsh As Worksheet
Dim wb As Workbook

'On Error GoTo ErrHandlr

Set oFSO = CreateObject("Scripting.FileSystemObject")

Set oFolder = oFSO.GetFolder("H:\Desktop\FILES")

Set wb = Workbooks("DOC.xlsm")

Set DNDsh = wb.Worksheets("DO NOT DELETE")

DNDsh.Range("A:A").ClearContents

For Each oFile In oFolder.Files
    DNDsh.Cells(i + 1, 1) = oFile.Name
    i = i + 1
Next oFile

我希望排除名称中包含“POSITION”的文件。

我尝试过使用 InStr,但这不起作用。

For Each oFile In oFolder.Files
    If InStr(oFile.Name, "Position") < 0 Then
        DNDsh.Cells(i + 1, 1) = oFile.Name
        i = i + 1
    End If
Next oFile

【问题讨论】:

  • 检查documentation,如果找不到文本,InStr 返回的内容。提示:不小于 0。
  • 所以在这种情况下应该是 If InStr(___) =0?我对此进行了测试,但它似乎不起作用。 @大本
  • 应该是=0。在返回值部分下,如果string2 is not found,则结果为0
  • 抱歉,我确实读过它。我尝试了 =0,但它返回了所有值。我是否正确使用“oFile.Name”?
  • 也许Debug.Print InStr(oFile.Name, "Position") 看看InStr 实际返回了什么。

标签: excel vba


【解决方案1】:

必须使用 oFile 而不是 oFile.Name。还发现Instr字符串是区分大小写的,所以我固定为大写。

For Each oFile In oFolder.Files
    If InStr(oFile, "POSITION") = 0 Then
        DNDsh.Cells(i + 1, 1) = oFile.Name
        i = i + 1
    End If
Next oFile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2013-05-12
    相关资源
    最近更新 更多