Excel 将目录中的所有xlsx文件转换为文本

Excel 将目录中的所有xlsx文件转换为文本,excel,excel-2010,vba,Excel,Excel 2010,Vba,我正在尝试在.xlsm中创建一个按钮,该按钮将把myFolder目录中的~100.xlsx文件转换为.txt。下面的VBA代码返回一个预期结束子项错误。数据始终在“表1”中,即使可能存在其他表 Dos命令执行并转换文件,但这些文件不可读(与Excel格式有关?)。我不知道该怎么办?谢谢:) Dos VBA Option Explicit Private Sub CommandButton1_Click() Dim oFSO, myFolder Dim xlText myFolder =

我正在尝试在.xlsm中创建一个按钮,该按钮将把
myFolder
目录中的~100
.xlsx
文件转换为
.txt
。下面的
VBA
代码返回一个
预期结束子项
错误。数据始终在“表1”中,即使可能存在其他表

Dos
命令执行并转换文件,但这些文件不可读(与Excel格式有关?)。我不知道该怎么办?谢谢:)

Dos

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

代码的第一行属于
私有子命令button1\u Click()

(必须通过
结束子节点关闭)

选项显式
和适当的代码缩进在这种情况下会有所帮助

请尝试以下版本:




我很高兴它能帮上忙。我做了一些小改动并改进了文本文件名:初始版本将文件保存为
Book1.xlsx.txt
(现在保存为
Book1.txt
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
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