用于循环的Excel VBA For Counter和用于Counter的嵌套IF语句

时间:2014-12-02 00:49:08

标签: excel vba loops counter

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

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语句不是更好的方法,请指导我正确的方向。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

为了减轻将来的这种混淆,请始终参考其中一种,然后避免或轻易诊断出这些问题。

如:

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

这应该会使您正在寻找的“ProceedNow = False”标志出现。