我对vba很陌生,我需要一些帮助。这是正在使用的代码。这只是一个调用另一个宏和循环的基本宏。但是,它似乎跳过了从workbooks.open到activeworkbook.saveas的所有内容。令人讨厌的一点是,我以前使用过这段代码两次,但文件名和路径不同,一切都正常工作。
我已经完成了这段代码,它实际上只是跳过了那些行,而在原始代码中却没有这样做。
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发布于 2014-08-27 21:44:42
如果它跳过了这些行,那么这就意味着Dir()函数的结果为null。
看起来您可能在rawPath的末尾缺少一个路径分隔符吗?这应能解决以下问题:
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"))https://stackoverflow.com/questions/25536702
复制相似问题