1

您好我在处理将 Excel 电子表格转换为 txt 文件时遇到问题。

我想要做的是创建一个宏,它可以将所有 xls 文件放在一个文件夹中并将它们转换为 txt 文件。

目前正在处理的代码

Sub Combined()

  Application.DisplayAlerts = False

  Const fPath As String = "C:\Users\A9993846\Desktop\"
  Dim sh As Worksheet
  Dim sName As String
  Dim inputString As String

  With Application
    .Calculation = xlCalculationManual
    .EnableEvents = False
    .ScreenUpdating = False
  End With

  sName = Dir(fPath & "*.xls*")

  Do Until sName = ""
    With GetObject(fPath & sName)
      For Each sh In .Worksheets
        With sh
          .SaveAs Replace(sName, ".xls*", ".txt"), 42 'UPDATE:
        End With
      Next sh
      .Close True
    End With
    sName = Dir
  Loop

  With Application
    .Calculation = xlAutomatic
    .EnableEvents = True
    .ScreenUpdating = True
  End With
End Sub

但它没有按预期工作,我对 VB 的了解为 0。有人愿意伸出援手吗?

4

2 回答 2

4

下面的代码将给定文件夹中的所有 Excel 工作簿(“xlsx”的测试文件扩展名)转换为 CSV 文件。文件名将是 [workbookname][sheetname].csv,即“foo.xlsx”将得到“foo.xlsxSheet1.scv”、“foo.xlsxSheet2.scv”等。为了运行它,创建一个纯文本文件,将其重命名为 .vbs 并复制粘贴下面的代码。更改路径信息并运行它。

Option Explicit

Dim oFSO, myFolder
Dim xlCSV

myFolder="C:\your\path\to\excelfiles\"


Set oFSO = CreateObject("Scripting.FileSystemObject")
xlCSV = 6 'Excel CSV 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 & oWSH.Name & ".csv", xlCSV)
            Next
            Set oWSH = Nothing
            Call oWB.Close
            Set oWB = Nothing
        End If
    Next
    Call oExcel.Quit
    Set oExcel = Nothing

End Sub

如果需要,您可以提供更好的文件命名、错误处理/等。

于 2013-06-17T08:41:37.147 回答
0

您的代码的问题是您定义sPath为包含通配符的路径:

sName = Dir(fPath & "*.xls*")

并仅替换扩展部分 ( .xls*),但在扩展之前保留通配符:

Replace(sName, ".xls*", ".txt")

这会产生以下路径:

C:\Users\A9993846\Desktop\*.txt

这会导致您观察到的错误,因为该SaveAs方法尝试将电子表格保存到具有文字 name 的文件中*.txt,但*不是文件名的有效字符。

替换这个:

.SaveAs Replace(sName, ".xls*", ".txt"), 42

有了这个:

Set wb = sh.Parent
basename = Replace(wb.FullName, Mid(wb.Name, InStrRev(wb.Name, ".")), "")
.SaveAs basename & "_" & sh.Name & ".txt", xlUnicodeText
于 2013-06-17T11:02:51.490 回答