如何为文件夹中的excel VBA循环文件编写程序,并在单元格中查找特定文本,如果文件符合条件,则将其保存在另一个文件夹中

如何为文件夹中的excel VBA循环文件编写程序,并在单元格中查找特定文本,如果文件符合条件,则将其保存在另一个文件夹中,excel,vba,Excel,Vba,例如,文件夹中有一些文件,文件夹中有循环文件,如果文本与单元格匹配,它应该在指定的单元格中搜索特定的文本。文件应该保存在指定的路径中 This line am getting error"If Range("A6").Value = ("CORE SKUS ONLY: N").Value & If Range("A7").Value =("ECO SKUS ONLY: Y").Value Then {{{{Sub OpenLatestFile() Dim MyPath作为字符串 将

例如,文件夹中有一些文件,文件夹中有循环文件,如果文本与单元格匹配,它应该在指定的单元格中搜索特定的文本。文件应该保存在指定的路径中

This line am getting error"If Range("A6").Value = ("CORE SKUS ONLY: N").Value  & If Range("A7").Value =("ECO SKUS ONLY: Y").Value Then 
{{{{Sub OpenLatestFile()

Dim MyPath作为字符串
将MyFile设置为字符串
将最新文件设置为字符串
将LatestDate变为Date
变光范围
作为字符串的Dim stresearch
strSearch=“仅限核心库存单位”
Dim LMD作为日期
MyPath=“C:\Users\p\u Divyanka\Desktop\Divyanka\Vendor Metrics\US”
如果正确(MyPath,1)“\”则MyPath=MyPath&“\”
MyFile=Dir(MyPath&“RptLineItemFillRate.*.xls”,vbNormal)
如果Len(MyFile)=0,则
MsgBox“未找到任何文件…”,请使用感叹号
出口接头
如果结束
当Len(MyFile)>0时执行
LMD=FileDateTime(MyPath&MyFile)
如果LMD>最晚日期,则
LatestFile=MyFile
LatestDate=LMD
如果结束
MyFile=Dir
环
工作簿。打开MyPath和LatestFile
Windows(“RptLineItemFillRate.*.xls”)。激活
活动窗口
如果范围(“A6”)。值=(“仅限核心库存单位:N”)。值&如果范围(“A7”)。值=(“仅限生态库存单位:Y”)。则值
Windows(“RptLineItemFillRate.*.xls”)。激活
ChDir“C:\Users\p\u Divyanka\Desktop\Divyanka\Vendor Metrics\US\FY2018\ING”
ActiveWorkbook.SaveAs文件名:=_
“C:\Users\p\u Divyanka\Desktop\Divyanka\Vendor Metrics\US\FY2018\ING\US\u ING\u Aged\u Detail.xls”_
,文件格式:=xlExcel8,密码:=“”,WriteResPassword:=“”_
ReadOnlyRecommended:=False,CreateBackup:=False
活动窗口,关闭
其他的
活动窗口,关闭
如果结束
结束子}}}}

这是VBS,因此可以粘贴到VBA中

'Remove next line in VBA
Main

Sub Main
    'On Error Resume Next
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dirname = InputBox("Enter Dir name (don't use quotes)")
    Searchterm = Inputbox("Enter search term")
    ProcessFolder DirName
End Sub

Sub ProcessFolder(FolderPath)
'   On Error Resume Next
    Set fldr = fso.GetFolder(FolderPath)
    Set Fls = fldr.files
    For Each thing in Fls
            If Instr(LCase(thing.OpenAsTextStream.ReadAll), LCase(SearchTerm)) > 0 then
            msgbox Thing.Name & " " & Thing.path 
            'fso.copyfile thing.path, "C:\backup"
        End If
    Next

    Set fldrs = fldr.subfolders
    For Each thing in fldrs
        ProcessFolder thing.path
    Next
End Sub

到底是什么问题?请更详细地描述您的问题。您想删除问题行中的第二个
IF
。在VBA中,
IF
Then
是应用程序识别条件的“标记”。如果在一个
之前有两个
,则
会混淆应用程序。此外,对于逻辑条件,请使用
而不是
&
&
主要用于连接字符串。
'Remove next line in VBA
Main

Sub Main
    'On Error Resume Next
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dirname = InputBox("Enter Dir name (don't use quotes)")
    Searchterm = Inputbox("Enter search term")
    ProcessFolder DirName
End Sub

Sub ProcessFolder(FolderPath)
'   On Error Resume Next
    Set fldr = fso.GetFolder(FolderPath)
    Set Fls = fldr.files
    For Each thing in Fls
            If Instr(LCase(thing.OpenAsTextStream.ReadAll), LCase(SearchTerm)) > 0 then
            msgbox Thing.Name & " " & Thing.path 
            'fso.copyfile thing.path, "C:\backup"
        End If
    Next

    Set fldrs = fldr.subfolders
    For Each thing in fldrs
        ProcessFolder thing.path
    Next
End Sub