Vba 将工作簿传递到另一个子文件夹时,目录找不到下一个文件
有人能帮我吗?My DIR函数在指定文件夹中找到第一个文件(在“loopthroughnfiles”子文件夹中),但之后找不到下一个文件。这与我将工作簿传递到另一个“INSINQ_宏”子文件夹有关,但我不确定如何更正。提前感谢Vba 将工作簿传递到另一个子文件夹时,目录找不到下一个文件,vba,excel,Vba,Excel,有人能帮我吗?My DIR函数在指定文件夹中找到第一个文件(在“loopthroughnfiles”子文件夹中),但之后找不到下一个文件。这与我将工作簿传递到另一个“INSINQ_宏”子文件夹有关,但我不确定如何更正。提前感谢 Sub loopThroughMNFiles() Application.ScreenUpdating = False Dim MnLoopingFolder As String Dim MnWbk As Workbook
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()循环:您不能嵌套两个不同的调用(正如您在这里所做的那样,即使第二个调用位于不同的子循环中。您可以直接运行第一个调用)