2014-08-27 76 views
1

我是vba的新手,我可以使用一些幫助。 這是我正在使用的代碼。這只是調用另一個宏和循環的基本宏。但是,它似乎在跳過從workbooks.openactiveworkbook.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 
+0

'rawPath'結尾可能缺少一個路徑分隔符?也許試試'rawFile = Dir(rawPath&Application.PathSeparator&「* .txt」)' – 2014-08-27 21:44:05

回答

2

如果它跳過那些行,則表明Dir()函數的結果爲空。

它看起來像你可能在rawPath的末尾丟失了一個路徑分隔符?這應該可以解決它:

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

或可替代只是確保你添加到您的分配statment:

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")) 
+0

謝謝!這工作。我猜想的菜鳥錯誤 – wes5550 2014-08-28 13:40:24