2017-07-04 68 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”) –

相关问题