代码在第二个macros中不起作用

我很新vba,我可以使用一些帮助。 这是我正在使用的代码。 这只是调用另一个macros和循环的基本macros。 然而,它似乎是从workbooks.open通过activeworkbook.saveas跳过一切。 令人讨厌的是我以前使用过这个代码两次,但有不同的文件名和path,一切正常。

我已经通过了代码,它似乎只是跳过这些行,而不是在原来的代码中。

 Sub oddball_macro_loop() ' ' oddball_macro_loop Macro ' ' Dim rawPath As String Dim rawFile As String Dim savePath As String Dim oWB As Workbook Dim fName As Variant rawPath = "I:\Cores\DMB\E-Prime Tasks\Salience Task\Data\Macros\Raw\For macro" rawFile = Dir(rawPath & "*.txt") savePath = "I:\Cores\DMB\E-Prime Tasks\Salience Task\Data\Macros\Processed" ChDir (rawPath) Application.DisplayAlerts = True Do While rawFile <> "" Workbooks.Open Filename:="I:\Cores\DMB\E-Prime Tasks\Salience Task\Data\Macros\oddball_macro.xlsm" Set oWB = Workbooks.Open(rawPath & rawFile) Application.Run "'oddball_macro.xlsm'!oddball_macro" Sheets("Data").Select 'Sets File Name Dim text As String text = Range("Z12") fName = Mid(text, 19) ActiveWorkbook.SaveAs Filename:=savePath & fName, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False ActiveWorkbook.Close False rawFile = Dir() Loop ActiveWorkbook.Close False Application.ScreenUpdating = True End Sub 

如果跳过这些行,则表明Dir()函数的结果为空。

它看起来像你可能会在rawPath的末尾丢失一个path分隔符? 这应该解决它:

 rawFile = Dir(rawPath & Application.PathSeparator & "*.txt") 

或者,只要确保将其添加到您的作业中即可:

 rawPath = "I:\Cores\DMB\E-Prime Tasks\Salience Task\Data\Macros\Raw\For macro\" 

通常你会看到人们做这样的事情是一种双重检查:

 If Not right(rawPath, 1) = Application.PathSeparator then rawPath = rawPath & Application.PathSeparator End If rawFile = Dir(rawPath & "*.txt") 

或者你可以得到真正的幻想,并做到这一点:

 Dim sep as String sep = Application.PathSeparator rawFile = Dir(rawPath & IIF(Right(rawPath,1) = sep, "*.txt", sep & ".txt"))