2017-07-04 102 views
0

我正在試圖創建一個按鈕。 xlsm將會將myFolder目錄中的〜100 .xlsx文件中的每一個轉換爲.txt。以下VBA代碼返回Expected End Sub錯誤。儘管可能有其他表單存在,但數據總是在「表單1」中。將目錄中的所有xlsx文件轉換爲文本

Dos命令執行並轉換文件,但它們不可讀(與excels格式有關?)。怎麼辦?謝謝:)

該做什麼

cd C:\Users\Desktop\folder 
Copy *.xlsx *.txt 

VBA

Option Explicit 

Private Sub CommandButton1_Click() 


Dim oFSO, myFolder 
Dim xlText 

myFolder = "C:\Users\Desktop\folder" 


Set oFSO = CreateObject("Scripting.FileSystemObject") 
xlText = -4158 'Excel txt format enum 
Call ConvertAllExcelFiles(myFolder) 
Set oFSO = Nothing 

Call MsgBox("Done!") 


Sub ConvertAllExcelFiles(ByVal oFolder) 
Dim targetF, oFileList, oFile 
Dim oExcel, oWB, oWSH 

Set oExcel = CreateObject("Excel.Application") 
oExcel.DisplayAlerts = False 
Set targetF = oFSO.GetFolder(oFolder) 
Set oFileList = targetF.Files 
For Each oFile In oFileList 
If (Right(oFile.Name, 4) = "xlsx") Then 
    Set oWB = oExcel.Workbooks.Open(oFile.Path) 
    For Each oWSH In oWB.Sheets 
     Call oWSH.SaveAs(oFile.Path & ".txt", FileFormat:=xlTextWindows) 
    Next 
    Set oWSH = Nothing 
    Call oWB.Close 
    Set oWB = Nothing 
End If 
Next 
Call oExcel.Quit 
Set oExcel = Nothing 
End Sub 

回答

1

你的代碼的第一線屬於在Private Sub CommandButton1_Click()
(它必須由End Sub關閉)

Option Explicit和適當的代碼縮進可以在這種情況下

幫助試試這個版本:


Option Explicit 

Private Sub CommandButton1_Click() 
    Dim myFolder As String 

    myFolder = "C:\Users\Desktop\folder" 
    ConvertAllExcelFiles myFolder 
    MsgBox "Done!" 
End Sub 

Public Sub ConvertAllExcelFiles(ByVal folderPath As String) 
    Dim xlApp As Object, wb As Workbook, ws As Variant, fso As Object 
    Dim fileList As Object, itm As Object, fileName As String 

    Set fso = CreateObject("Scripting.FileSystemObject") 
    Set fileList = fso.GetFolder(folderPath).Files 
    Set xlApp = CreateObject("Excel.Application") 
    xlApp.DisplayAlerts = False 

    For Each itm In fileList 
     If Right(itm.Name, 4) = "xlsx" Then 
      Set wb = xlApp.Workbooks.Open(itm.Path) 
      fileName = fso.GetParentFolderName(itm.Path) & "\" & fso.GetBaseName(itm.Path) 
      If True Then 'if converting all sheets use For loop (Change True to False) 
       wb.Sheets(1).SaveAs fileName & ".txt", FileFormat:=xlTextWindows 
      Else 
       For Each ws In wb.Sheets 
        ws.SaveAs fileName & " - " & ws.Name & ".txt", FileFormat:=xlTextWindows 
       Next 
       Set ws = Nothing 
      End If 
      wb.Close: Set wb = Nothing 
     End If 
    Next 
    xlApp.Quit 
End Sub 

+1

非常感謝你:)。 – Chris

+1

我很高興它有幫助。我做了一些小改動和改進了文本文件名:最初的版本將文件保存爲「Book1.xlsx.txt」(現在它保存爲「Book1.txt」) –

相關問題