3

csv必要な形式のファイルが大量にあり.xlsます。マクロを使用してバッチ変換を実行することは可能ですか、それとも別の言語で行うのが最適ですか?

このコードhttp://www.ozgrid.com/forum/showthread.php?t=71409&p=369573#post369573を使用してディレクトリを参照しましたが、各ファイルを開いて保存するコマンドがわかりません。ここに私が持っているものがあります:

Sub batchconvertcsvxls()
    Dim wb As Workbook
    Dim CSVCount As Integer
    Dim myVar As String

    myVar = FileList("C:\Documents and Settings\alistairw\My Documents\csvxlstest")
    For i = LBound(myVar) To UBound(myVar)

        With wb

            Application.Workbooks.OpenText 'How do I reference the myvar string ?
            wb.SaveAs '....

        End With

    Next
End Sub

Function FileList(fldr As String, Optional fltr As String = "*.*") As Variant
    Dim sTemp As String, sHldr As String
    If Right$(fldr, 1) <> "\" Then fldr = fldr & "\"
    sTemp = Dir(fldr & fltr)
    If sTemp = "" Then
        FileList = Split("No files found", "|") 'ensures an array is returned
        Exit Function
    End If
    Do
        sHldr = Dir
        If sHldr = "" Then Exit Do
        sTemp = sTemp & "|" & sHldr
    Loop
    FileList = Split(sTemp, "|")
End Function

編集:ファイルはcsvとしてフォーマットされた.txtファイルです

4

5 に答える 5

3

はるかに少ないコード行で、これにより必要なものが得られるはずです。ただし、毎回ワークブックを開いたり、保存したり、閉じたりしているため、これが最速の方法ではない可能性があります。より速い方法を探しますが、その方法を頭のてっぺんから忘れてしまいます。

Sub batchconvertcsvxls()

Dim wb As Workbook
Dim strFile As String, strDir As String

strDir = "C:\"
strFile = Dir(strDir & "*.csv")

Do While strFile <> ""

    Set wb = Workbooks.Open(strDir & strFile)
    With wb
        .SaveAs Replace(wb.FullName, ".csv", ".xls"), 50 'UPDATE:
        .Close True
    End With
    Set wb = Nothing
Loop

End Sub

** 更新 ** .xls ファイルの適切なファイル形式列挙が必要です。50だと思いますが、そうでない場合は、ここでExcel File Type Enumerationを確認できます。

于 2012-05-29T17:03:48.877 に答える
3

スコット・ホルツマンのコードは、私のためにほとんどそれをしました。動作させるには、2 つの変更を加える必要がありました。

  1. 彼は、ループを次のファイルに継続させる行を追加するのを忘れていました。ループが読み取る前の最後の行

    strFile = Dir

  2. Workbooks.Open メソッドが期待どおりに CSV ファイルを読み取れませんでした (行全体が最初のセルのテキストになってしまいました)。パラメータを追加すると、Local:=True機能しました:

    Set wb = Workbooks.Open(Filename:=strDir & strFile, Local:=True)

于 2012-12-12T17:08:12.267 に答える
0

これは、少なくとも Excel 2013 では適切に機能します。filetype タグ 50 の代わりに FileFormat:=xlExcel8 パラメータを使用すると、セキュリティの問題なしで開くファイルが作成されます。

サブ CSV_to_XLS()

Dim wb As Workbook Dim strFile As String、strDir As String

strDir = "C:\temp\" strFile = Dir(strDir & "*.csv")

Do While strFile <> ""

Set wb = Workbooks.Open(Filename:=strDir & strFile, Local:=True)
wb.SaveAs Replace(wb.FullName, ".csv", ".xls"), FileFormat:=xlExcel8
wb.Close True

Set wb = Nothing
strFile = Dir

ループ

サブ終了

于 2014-04-15T21:30:06.317 に答える