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

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

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

Sheet3栏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 

由于某种原因,即使我将test.xls更改为test1.xls,它仍然会执行Proceed = True

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

如果程序的目的是validation文件是否存在,使用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 

您提供的代码不会更改文件名,所以也许这只是您尝试的开始。 我发现的是,Range(“A2”)是“Cells(2,1)”,而不是“Cells(1,2)”,就像你现在所拥有的那样。 您正在引用单元格B1,其中可能不包含文件名称。

为了减轻将来的这种混乱,请务必参考其中的一个,避免或简单地诊断出这些问题。

如:

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

这应该跳过你正在寻找的“ProceedNow = False”标志。