2013-04-12 53 views
3

我將Excel VBA腳本拼湊在一起,將所有工作表寫入打開的工作簿以分隔製表符分隔的文件(這仍然是「宏」 ?我正在Excel真空中學習)。它一次在一個工作簿上運行良好。這裏是。將工作簿的文件夾循環並使用Excel VBA將所有工作表導出爲製表符分隔的文本

Sub exportSheetsToText() 
    Dim sWb As String 
    Dim sFile As String 
    Dim oSheet As Worksheet 

    sWb = Left(ActiveWorkbook.FullName, InStr(ActiveWorkbook.FullName, ".") - 1) 

    For Each oSheet In Worksheets 
     oSheet.Copy 
     sFile = sWb & "-" & oSheet.Name & ".txt" 
     ActiveWorkbook.SaveAs fileName:=sFile, FileFormat:=xlText 
     ActiveWorkbook.Close SaveChanges:=False 
     Next oSheet 
End Sub 

我想縮小這個範圍,以便我可以將此宏應用於工作簿文件夾。我寫了我認爲會遍歷每個滿足過濾器的工作簿的內容,但它不寫入任何.txt文件。這裏是。

Sub exportsSheetsToTextForAll() 

    Dim sPath As String 
    Dim sWildcard As String 
    Dim sMacro As String 
    Dim oWb As Workbook 
    Dim oPersWb As Workbook 

    Application.AutomationSecurity = msoAutomationSecurityForceDisable 
    Set oPersWb = Workbooks("PERSONAL.XLSB") 
    sMacro = "'" & oPersWb.Name & "'" & "!exportSheetsToText()" 
    sPath = "C:\Users\richard\Documents\Research\Data\Excel\Datastream - payout" 
    sWildcard = "New*.xlsx" 
    sFile = Dir(sPath & "\" & sWildcard) 


    Do While Len(sFile) > 0 
     Workbooks.Open Filename:=sPath & "\" & sFile 
     Application.Run sMacro 
     ActiveWorkbook.Close SaveChanges:=False 
     sFile = Dir 
    Loop 

End Sub 

遍歷所有的我的測試文件,但我沒有看到任何效果(即沒有.txt文件並沒有錯誤)。

最後我將在宏中使用非常大的工作簿,因此禁用宏(我本地沒有宏,它們位於專用數據機器上)並在打開之前關閉一個大型工作簿非常重要下一個。

任何想法?謝謝!

+2

我剛剛給它鳥瞰,因爲我現在必須走出任何時刻。這裏有一個建議,雖然...而不是'Workbooks.Open Filename:= sPath&「\」&sFile'嘗試'Set oWB = Workbooks.Open(Filename:= sPath&「\」&sFile)'然後修改你的宏把wb作爲參數,所以'exportSheetsToText()'變成'Sub exportSheetsToText(wb as workbook)''完成這一步。不要在'exportSheetsToText()'中使用Activeworkbook。改用'wb'。 –

+0

是所有** xlsx **文件的擴展名* .xlsx * –

+0

@Philip - 是的。我從Windows資源管理器上下文菜單中創建了一些準系統「新Microsoft Excel Worksheet.xlsx」文件,並使用幾列「RAND()」填充它們。 –

回答

2

@ Siddarth關於將參數傳遞給exportSheetsToText()的想法是關鍵。還有,我的宏名傳遞給了Application.Run。以下工作,更清潔。

Sub exportsSheetsToTextForAll() 

    Application.AutomationSecurity = msoAutomationSecurityForceDisable 

    excelFiles = Dir(ThisWorkbook.Path & "\" & "New*.xlsx") 
    fromPath = ThisWorkbook.Path 

    Do While Len(excelFiles) > 0 
     Debug.Print Files 
     Set oWb = Workbooks.Open(Filename:=fromPath & "\" & excelFiles) 
     Application.Run "exportSheetsToText", oWb 
     oWb.Close SaveChanges:=False 
     excelFiles = Dir 
    Loop 

End Sub 

Sub exportSheetsToText(iWb As Workbook) 

    For Each ws In iWb.Worksheets 
     ws.Copy 
     Set wb = ActiveWorkbook 
     textFile = Left(iWb.FullName, InStr(iWb.FullName, ".") - 1) & "-" & ws.Name & ".txt" 
     wb.SaveAs Filename:=textFile, FileFormat:=xlText 
     wb.Close SaveChanges:=False 
    Next ws 
End Sub 
+1

+ 1 Bravo!我很高興看到你已經設法解決它自己的問題!抱歉不能留下來幫助你,因爲我不得不帶我媽媽去看電影:) –

+0

@SiddharthRout - 謝謝! :)別擔心。我很快就會回來尋求更多的幫助。我無法讓它在宏中運行在工作簿上!儘管如此,我並沒有放棄。 –

相關問題