Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 将工作簿传递到另一个子文件夹时,目录找不到下一个文件_Vba_Excel - Fatal编程技术网

Vba 将工作簿传递到另一个子文件夹时,目录找不到下一个文件

Vba 将工作簿传递到另一个子文件夹时,目录找不到下一个文件,vba,excel,Vba,Excel,有人能帮我吗?My DIR函数在指定文件夹中找到第一个文件(在“loopthroughnfiles”子文件夹中),但之后找不到下一个文件。这与我将工作簿传递到另一个“INSINQ_宏”子文件夹有关,但我不确定如何更正。提前感谢 Sub loopThroughMNFiles() Application.ScreenUpdating = False Dim MnLoopingFolder As String Dim MnWbk As Workbook

有人能帮我吗?My DIR函数在指定文件夹中找到第一个文件(在“loopthroughnfiles”子文件夹中),但之后找不到下一个文件。这与我将工作簿传递到另一个“INSINQ_宏”子文件夹有关,但我不确定如何更正。提前感谢

    Sub loopThroughMNFiles()

    Application.ScreenUpdating = False

    Dim MnLoopingFolder As String

    Dim MnWbk As Workbook

    Dim MnFile As String

    Dim sheetName As String

    MnLoopingFolder = "C:\Users\xxxxxx\Desktop\outlook-attachments\MN Reports\2-26-18\INSINQ\"

    MnFile = Dir(MnLoopingFolder) 'DIR gets the first file of the folder

'Loop through all files in a folder until DIR cannot find anymore

    Do While MnFile <> “”

'Opens the file and assigns to the wbk variable for future use

        Set MnWbk = Workbooks.Open(FileName:=MnLoopingFolder & MnFile)

        Call INSINQ_Macro(MnWbk)

'MnWbk.Close

        MnFile = Dir 'DIR gets the next file in the folder

    Loop

    Application.ScreenUpdating = True

    MsgBox "Task Finished"
End Sub


    Sub INSINQ_Macro(InsinqSourceBook As Workbook)

        Application.DisplayAlerts = False

        Application.ScreenUpdating = False

        Dim OutlookApp As Outlook.Application

        Dim MItem As Outlook.MailItem

        Dim insinqWorkbookName As String

        Dim fileDate As String

        Dim folderDate As String

        fileDate = Format(Date, "yymmdd")

        folderDate = Format(Date, "mm-dd-yy")

        Dim sUserName As String

        sUserName = Environ$("username")

        Dim ws As Worksheet

        Dim success As Boolean

        Dim localDesktopMnPath As String

        For Each ws In Sheets

            sheetName = LCase(ws.Name)

            If sheetName Like "*high" Or sheetName Like "*mark" Then

                InsinqSourceBook.ws.Delete

            End If

        Next

        localDesktopMnPath = "C:\Users\" + sUserName + "\Desktop\MN Weekly\" + folderDate + "\"

        If Dir(localDesktopMnPath, vbDirectory) = "" Then

            MkDir localDesktopMnPath

        End If

        success = True

        insinqWorkbookName = LCase(InsinqSourceBook.Name)

        If InStr(insinqWorkbookName, "tenv2") <> 0 Then

            InsinqSourceBook.SaveAs FileName:=localDesktopMnPath + fileDate + " Minnesota Users on INSINQ Security Tables TENV2.csv", fileFormat:=xlCSV, CreateBackup:=False

            Set InsinqSourceBook = ActiveWorkbook

        ElseIf InStr(insinqWorkbookName, "tenv3") <> 0 Then

            InsinqSourceBook.SaveAs FileName:=localDesktopMnPath + fileDate + " Minnesota Users on INSINQ Security Tables TENV3.csv", fileFormat:=xlCSV, CreateBackup:=False

            Set InsinqSourceBook = ActiveWorkbook

        ElseIf InStr(insinqWorkbookName, "tenv4") <> 0 Then

            InsinqSourceBook.SaveAs FileName:=localDesktopMnPath + fileDate + " Minnesota Users on INSINQ Security Tables TENV4.csv", fileFormat:=xlCSV, CreateBackup:=False

            Set InsinqSourceBook = ActiveWorkbook

        ElseIf InStr(insinqWorkbookName, "tenv5") <> 0 Then

            InsinqSourceBook.SaveAs FileName:=localDesktopMnPath + fileDate + " Minnesota Users on INSINQ Security Tables TENV5.csv", fileFormat:=xlCSV, CreateBackup:=False

            Set InsinqSourceBook = ActiveWorkbook

        ElseIf InStr(insinqWorkbookName, "tenv6") <> 0 Then

            InsinqSourceBook.SaveAs FileName:=localDesktopMnPath + fileDate + " Minnesota Users on INSINQ Security Tables TENV6.csv", fileFormat:=xlCSV, CreateBackup:=False

            Set InsinqSourceBook = ActiveWorkbook

        ElseIf InStr(insinqWorkbookName, "tenv7") <> 0 Then

            InsinqSourceBook.SaveAs FileName:=localDesktopMnPath + fileDate + " Minnesota Users on INSINQ Security Tables TENV7.csv", fileFormat:=xlCSV, CreateBackup:=False

            Set InsinqSourceBook = ActiveWorkbook

        ElseIf InStr(insinqWorkbookName, "tenvb") <> 0 Then

            InsinqSourceBook.SaveAs FileName:=localDesktopMnPath + fileDate + " Minnesota Users on INSINQ Security Tables TENVB.csv", fileFormat:=xlCSV, CreateBackup:=False

            Set InsinqSourceBook = ActiveWorkbook

        ElseIf InStr(insinqWorkbookName, "tenvc") <> 0 Then

            InsinqSourceBook.SaveAs FileName:=localDesktopMnPath + fileDate + " Minnesota Users on INSINQ Security Tables TENVC.csv", fileFormat:=xlCSV, CreateBackup:=False

            Set InsinqSourceBook = ActiveWorkbook

        ElseIf InStr(insinqWorkbookName, "prod") <> 0 Then

            InsinqSourceBook.SaveAs FileName:=localDesktopMnPath + fileDate + " Minnesota Users on INSINQ Security Tables PROD.csv", fileFormat:=xlCSV, CreateBackup:=False

            Set InsinqSourceBook = ActiveWorkbook

        Else

            success = False

            InsinqSourceBook.Close savechanges:=False

'send failure email - filename wasn't named correctly

            Exit Sub

        End If

        InsinqSourceBook.Close savechanges:=False

        Application.ScreenUpdating = True

' send succesful email

    End Sub
Sub-loopthroughnfiles()
Application.ScreenUpdating=False
Dim MnLoopingFolder作为字符串
将MnWbk设置为工作簿
将文件设置为字符串
将sheetName设置为字符串
MnLoopingFolder=“C:\Users\xxxxxx\Desktop\outlook attachments\MN Reports\2-26-18\INSINQ\”
MnFile=Dir(MnLoopingFolder)'Dir获取文件夹的第一个文件
'循环浏览文件夹中的所有文件,直到目录无法再找到为止
在文件“”中执行此操作
'打开文件并分配给wbk变量以供将来使用
设置MnWbk=Workbooks.Open(文件名:=MnLoopingFolder&MnFile)
调用INSINQ_宏(MnWbk)
“MnWbk.Close
MnFile=Dir'Dir获取文件夹中的下一个文件
环
Application.ScreenUpdating=True
MsgBox“任务已完成”
端接头
子INSINQ_宏(作为工作簿的InsinqSourceBook)
Application.DisplayAlerts=False
Application.ScreenUpdating=False
Dim OutlookApp作为Outlook.Application
将MItem设置为Outlook.MailItem
Dim insinqWorkbookName作为字符串
将文件日期设置为字符串
Dim folderDate作为字符串
文件日期=格式(日期,“yymmdd”)
folderDate=格式(日期,“mm-dd-yy”)
朦胧的宿命如弦
sUserName=Environ$(“用户名”)
将ws设置为工作表
将成功视为布尔值
Dim localDesktopMnPath作为字符串
对于每个ws-In表单
sheetName=LCase(ws.Name)
如果sheetName如“*高”或sheetName如“*标记”,则
InsinqSourceBook.ws.Delete
如果结束
下一个
localDesktopMnPath=“C:\Users\”+sUserName+“\Desktop\MN Weekly\”+folderDate+“\”
如果Dir(localDesktopMnPath,vbDirectory)=“”,则
MkDir localDesktopMnPath
如果结束
成功=正确
insinqWorkbookName=LCase(InsinqSourceBook.Name)
如果InStr(insinqWorkbookName,“tenv2”)为0,则
InsinqSourceBook.SaveAs文件名:=localDesktopMnPath+fileDate+“INSINQ安全表TENV2.csv上的明尼苏达用户”,文件格式:=xlCSV,CreateBackup:=False
设置InsinqSourceBook=ActiveWorkbook
ElseIf InStr(insinqWorkbookName,“tenv3”)0然后
InsinqSourceBook.SaveAs文件名:=localDesktopMnPath+fileDate+“INSINQ安全表TENV3.csv上的明尼苏达用户”,文件格式:=xlCSV,CreateBackup:=False
设置InsinqSourceBook=ActiveWorkbook
ElseIf InStr(insinqWorkbookName,“tenv4”)0然后
InsinqSourceBook.SaveAs文件名:=localDesktopMnPath+fileDate+“INSINQ安全表TENV4.csv上的明尼苏达用户”,文件格式:=xlCSV,CreateBackup:=False
设置InsinqSourceBook=ActiveWorkbook
ElseIf InStr(insinqWorkbookName,“tenv5”)0然后
InsinqSourceBook.SaveAs文件名:=localDesktopMnPath+fileDate+“INSINQ安全表TENV5.csv上的明尼苏达用户”,文件格式:=xlCSV,CreateBackup:=False
设置InsinqSourceBook=ActiveWorkbook
ElseIf InStr(insinqWorkbookName,“tenv6”)0然后
InsinqSourceBook.SaveAs文件名:=localDesktopMnPath+fileDate+“INSINQ安全表TENV6.csv上的明尼苏达用户”,文件格式:=xlCSV,CreateBackup:=False
设置InsinqSourceBook=ActiveWorkbook
ElseIf InStr(insinqWorkbookName,“tenv7”)0然后
InsinqSourceBook.SaveAs文件名:=localDesktopMnPath+fileDate+“INSINQ安全表TENV7.csv上的明尼苏达用户”,文件格式:=xlCSV,CreateBackup:=False
设置InsinqSourceBook=ActiveWorkbook
ElseIf InStr(insinqWorkbookName,“tenvb”)0然后
InsinqSourceBook.SaveAs文件名:=localDesktopMnPath+fileDate+“INSINQ安全表TENVB.csv上的明尼苏达用户”,文件格式:=xlCSV,CreateBackup:=False
设置InsinqSourceBook=ActiveWorkbook
ElseIf InStr(insinqWorkbookName,“tenvc”)0然后
InsinqSourceBook.SaveAs文件名:=localDesktopMnPath+fileDate+“INSINQ安全表TENVC.csv上的明尼苏达用户”,文件格式:=xlCSV,CreateBackup:=False
设置InsinqSourceBook=ActiveWorkbook
ElseIf InStr(insinqWorkbookName,“产品”)0然后
InsinqSourceBook.SaveAs文件名:=localDesktopMnPath+fileDate+“INSINQ安全表上的明尼苏达用户PROD.csv”,文件格式:=xlCSV,CreateBackup:=False
设置InsinqSourceBook=ActiveWorkbook
其他的
成功=错误
InsinqSourceBook.Close保存更改:=False
'发送失败电子邮件-文件名命名不正确
出口接头
如果结束
InsinqSourceBook.Close保存更改:=False
Application.ScreenUpdating=True
'发送成功的电子邮件
端接头

以下是我在评论中的意思:

Sub loopThroughMNFiles()

    Const MnLoopingFolder As String = "C:\Users\xxxxxx\Desktop\outlook-attachments\MN Reports\2-26-18\INSINQ\"

    Dim colFiles As New Collection, f
    Dim MnWbk As Workbook, MnFile As String, sheetName As String

    'add the files to a collection
    MnFile = Dir(MnLoopingFolder)
    Do While MnFile <> ""
        colFiles.Add MnFile
        MnFile = Dir()
    Loop

    Application.ScreenUpdating = False
    'loop over the filenames from the collection
    For Each f In colFiles
        INSINQ_Macro Workbooks.Open(Filename:=MnLoopingFolder & f)
    Next
    Application.ScreenUpdating = True
    MsgBox "Task Finished"
End Sub
Sub-loopthroughnfiles()
Const MnLoopingFolder As String=“C:\Users\xxxxxx\Desktop\outlook attachments\MN Reports\2-26-18\INSINQ\”
将文件作为新集合,f
Dim MnWbk作为工作簿,MnFile作为字符串,sheetName作为字符串
'将文件添加到集合中
MnFile=Dir(MnLoopingFolder)
在文件“”中执行此操作
colFiles.addmnfile
MnFile=Dir()
环
Application.ScreenUpdating=False
'循环访问集合中的文件名
对于colfile中的每个f
INSINQ_宏工作簿。打开(文件名:=MnLoopingFolder&f)
下一个
Application.ScreenUpdating=True
MsgBox“任务已完成”
端接头
VBA一次只能运行一个Dir()循环:您不能嵌套两个不同的调用(正如您在这里所做的那样,即使第二个调用位于不同的子循环中。您可以直接运行第一个调用)