Excel VBA For循环和嵌套IF语句For计数器

Excel VBA For循环和嵌套IF语句For计数器,excel,vba,loops,counter,Excel,Vba,Loops,Counter,我在单元格中有一个值,该值应与目录中文档的文件名匹配 Sheet3列A1=C:\Users\Admin\Desktop\Folder1 表3列A2=test.xls ‘Location of directory sCurrentXLDirectory = Worksheets("Sheet3").Cells(1, 1).Value Set CurrentXLFSO = CreateObject("Scripting.FileSystemObject") ProceedNow = True Set

我在单元格中有一个值,该值应与目录中文档的文件名匹配

Sheet3列A1=C:\Users\Admin\Desktop\Folder1

表3列A2=test.xls

‘Location of directory
sCurrentXLDirectory = Worksheets("Sheet3").Cells(1, 1).Value
Set CurrentXLFSO = CreateObject("Scripting.FileSystemObject")
ProceedNow = True
Set CurrentXLFolder = CurrentXLFSO.GetFolder(sCurrentXLDirectory)
Set CurrentXLFiles = CurrentXLFolder.Files
‘Always 10 files in this folder
If CurrentXLFiles.Count <> 10 Then
   MsgBox "Wrong Directory or Folder Mismatch"
   ProceedNow = False
Else
'Return one for indentical filename
Dim NameCount As Integer
NameCount = 0
For Each folderIDX In CurrentXLFiles
 ‘Compare file names specified cell value
    If folderIDX.Name = Worksheets("Sheet3").Cells(1, 2).Value Then
    NameCount = NameCount + 1
        If NameCount <> 1 Then
            MsgBox "Unable to find file”
            ProceedNow = False
        End If
    End If
Next
End If
目录的位置 sCurrentXLDirectory=工作表(“Sheet3”).单元格(1,1).Value 设置CurrentXLFSO=CreateObject(“Scripting.FileSystemObject”) ProceedNow=True 设置CurrentXLFolder=CurrentXLFSO.GetFolder(sCurrentXLDirectory) 设置CurrentXLFiles=CurrentXLFolder.Files '此文件夹中始终有10个文件 如果CurrentXLFiles.Count为10,则 MsgBox“错误的目录或文件夹不匹配” ProceedNow=False 其他的 '为缩进文件名返回一个 Dim NAME计数为整数 名称计数=0 对于CurrentXLFiles中的每个folderIDX '比较指定单元格值的文件名 如果folderIDX.Name=Worksheets(“Sheet3”).Cells(1,2).Value,则 NameCount=NameCount+1 如果名称计数为1,则 MsgBox“找不到文件” ProceedNow=False 如果结束 如果结束 下一个 如果结束 出于某种原因,即使我将test.xls更改为test1.xls,它仍将继续执行=True


如果嵌套If语句不是最好的方法,请指导我正确的方向。

您提供的代码不会更改文件名,因此这可能只是您尝试的开始。不过,我发现范围(“A2”)是“单元格(2,1)”,而不是“单元格(1,2)”“,正如您当前拥有的一样。您正在引用单元格B1,该单元格可能不包含文件名

为了在将来减轻这种困惑,请始终提及其中一个,这样可以避免或轻松诊断此类问题

例如:

If folderIDX.Name = Worksheets("Sheet3").Range("A2").Value Then

这将触发您正在查找的“ProceedNow=False”标志。

如果该过程的目的是验证文件是否存在,则使用
Dir()
函数将简单得多

如果这是目标,请尝试以下代码:

Sub test()
    Dim sDirectory As String
    Dim sFile As String

    sDirectory = Worksheets("Sheet3").Cells(1, 1).Value
    sFile = Worksheets("Sheet3").Cells(1, 2).Value
    sFile = Dir(sDirectory & "\" & sFile, vbDirectory)
    If Len(sFile) = 0 Then
        MsgBox "Unable to find file"
    End If
End Sub

谢谢我会在办公室里试试这个。如果他只想这么做的话,摆脱这个循环是件好事。但是,正如我在回答中指出的那样,他正在寻找与错误手机上的姓名相匹配的号码。代码是B1,他的注释是A2。n8说明了一个很好的观点。代码引用了第1行、第1列和第2列(A1和B1),与提及第1列、第1行和第2行(A1和A2)的叙述相反。