Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 保存与Excel文件同名的文本文件_Vba - Fatal编程技术网

Vba 保存与Excel文件同名的文本文件

Vba 保存与Excel文件同名的文本文件,vba,Vba,我有一个将excel文件转换为文本文件的Visual Basic脚本。假设我有一个名为example.xlsx的excel文件;目前,脚本将其保存为example.xlsx.txt,这不是我想要的。我需要它另存为:example.txt 有什么想法吗 Option Explicit Dim oFSO, myFolder Dim xlTXT myFolder="C:\..." Set oFSO = CreateObject("Scripting.FileSystemObject")

我有一个将excel文件转换为文本文件的Visual Basic脚本。假设我有一个名为example.xlsx的excel文件;目前,脚本将其保存为example.xlsx.txt,这不是我想要的。我需要它另存为:example.txt

有什么想法吗

Option Explicit

    Dim oFSO, myFolder
Dim xlTXT

myFolder="C:\..."


Set oFSO = CreateObject("Scripting.FileSystemObject")
xlTXT = 21 '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", xlTXT )
                Exit For
            Next
            Set oWSH = Nothing
            Call oWB.Close
            Set oWB = Nothing
        End If
    Next
    Call oExcel.Quit
    Set oExcel = Nothing

End Sub

FileSystemObject有一个类似于
GetBaseName
GetFileName
。所以

Call oWSH.SaveAs (myFolder & "\" & oFile.GetBaseName & ".txt", xlTXT)
GetFileName
将包括扩展名。)

但是,正如Harrison所描述的,您可能希望在文件名中包含sheetname或一些数字


你可以考虑使用工作表的索引作为文件名的一部分,而不是必须创建数字。

< P>你只保存了第一个表,因为你退出了FURACH循环。保存所有可以保存的工作表

替换

        For Each oWSH in oWB.Sheets
            Call oWSH.SaveAs (oFile.Path & ".txt", xlTXT )
            Exit For
        Next

注意:如果您只想保存第一张工作表,而不是在第一张工作表之后使用“退出”,则可以使用此选项

        Call oWB.Sheets(1).SaveAs (oWB.Name & ".txt", xlTXT )

现在,您正在将.txt附加到需要实际更改的文件路径的末尾。似乎最简单的方法是调用oWSH.SaveAs(替换(oFile.path,.xlsx.txt),xlTXT)谢谢!如何将所有文本文件保存到不同的文件夹中?看起来您当前正在覆盖每个工作表的文件,因为您正在将每个文件保存到相同的名称。因此,如果工作簿中有多张工作表,那么除了最后一张工作表之外,您将丢失所有工作表。感谢大家提供的提示。
        Call oWB.Sheets(1).SaveAs (oWB.Name & ".txt", xlTXT )