Excel VBA For循环和嵌套IF语句For计数器
我在单元格中有一个值,该值应与目录中文档的文件名匹配 Sheet3列A1=C:\Users\Admin\Desktop\Folder1 表3列A2=test.xlsExcel 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
‘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)的叙述相反。