代码在第二个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"))