简体   繁体   English

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

[英]convert all xlsx files in directory to text

I am trying to create a button in a . 我正在尝试在中创建按钮。 xlsm that will convert each of the ~100 .xlsx files in the myFolder directory to .txt . xlsm会将myFolder目录中的每个〜100 .xlsx文件转换为.txt The below VBA code returns an Expected End Sub error. 下面的VBA代码返回Expected End Sub错误。 The data is always in `Sheet 1" even though there may be other sheets present. 即使可能存在其他工作表,数据也始终位于“工作表1”中。

The Dos command executes and converts the files but they are unreadable (something to do with excels formatting?). Dos命令执行并转换文件,但是它们不可读(与excel格式有关吗?)。 I am not sure what to do? 我不确定该怎么办? Thank you :) 谢谢 :)

Dos 多斯

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

VBA 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

The first lines of your code belong in Private Sub CommandButton1_Click() 您代码的第一行属于Private Sub CommandButton1_Click()
(it has to be closed by End Sub ) (它必须由End Sub关闭)

Option Explicit and proper code indentation can help in this situation Option Explicit和适当的代码缩进可以在这种情况下提供帮助

Try this version: 试试这个版本:


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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM