2011-12-08 8 views
5

私はVBA/VBSスクリプトを使用してプログラマティカルにすべてのワークシートをエクスポートする必要があります(合計4つ、名前はわかります)マクロを手動で実行します。各シートを別々のCSVファイルにエクスポート

スクリプトは、ソースファイルパス/ filename.xlsとエクスポートファイルパスをコマンドライン引数として使用するのが理想的です。

私はExcel内でこれを行うための多くのExcel VBAスクリプトを読んでおり、最初のシートをエクスポートするExcelブックを読み込むためのものもあります。取得するには

(1,12) Expected End of Statement

Dim source As Workbook 
Set source = Application.Workbooks.Open(WScript.Arguments.Item(0), ReadOnly:=True) 
For Each sheet In source.Sheets 
.SaveAs Filename:= WScript.Arguments.Item(1) & Source.Sheets.Name, FileFormat:=xlCSV 
Next sheet 
wb.Close 
+4

のしたがって使用はStackOverflowのへようこそ!他の人がデバッグを助けるようにコードを投稿してください。努力を示すことは、常に高く評価されています。 – Excellll

+0

申し訳ありませんが、実行しようとしていたコードで私はおそらく途方もないと感じましたので、提出したくありませんでした。私が言ったように、最初のシートを取得するのと同じようなvbaの作業をしていますが、このコードは、ワークブックスクリプトの他のものと単純な合併です。 –

答えて

10

このコードを実行するには、次のようになります。

  1. VBSファイルは、ファイルが(このためFSOオブジェクトテスト)が存在するかのようにフォルダ名が重複しているコマンドライン
  2. から実行することができ、それが中に存在するフォルダには、
  3. コードが存在しなければなりませんExcelは、あなたが「でき

    • の上ごVBAに比べて注意することは、シート

2つのキーポイントを分離するために自動化文字列、ワークブックなど(初期のエラー)としてvbsオブジェクトを消してください。あなたは、このようなVBScriptでxlCSVなどという名前の定数を使用することはできません

  • あなたがそれらだけを暗くすることができ、6

  • Dim strFilename 
    Dim objFSO 
    Set objFSO = CreateObject("scripting.filesystemobject") 
    strFilename = "C:\temp\test.xlsx" 
    If objFSO.fileexists(strFilename) Then 
        Call Writefile(strFilename) 
    Else 
        wscript.echo "no such file!" 
    End If 
    Set objFSO = Nothing 
    
    Sub Writefile(ByVal strFilename) 
    Dim objExcel 
    Dim objWB 
    Dim objws 
    
    Set objExcel = CreateObject("Excel.Application") 
    Set objWB = objExcel.Workbooks.Open(strFilename) 
    
    For Each objws In objWB.Sheets 
        objws.Copy 
        objExcel.ActiveWorkbook.SaveAs objWB.Path & "\" & objws.Name & ".csv", 6 
        objExcel.ActiveWorkbook.Close False 
    Next 
    
    objWB.Close False 
    objExcel.Quit 
    Set objExcel = Nothing 
    End Sub 
    

    CSV形式として以下の
    +1

    これは私が必要としていたものです。多くの感謝、非常に良い説明と、私が間違っていた場所を教えてくれてありがとう。私はここで何かを学んだ。 –

    -1

    は、あなたが開始しました::

    ------------------------------- 
    SELECT * FROM Demo 
    ------------------------------- 
    |F1|F2 |F3  |F4  | 
    | 1|1.1|12/10/2011|text elm 1| 
    | 2|2.2|12/11/2011|text elm 2| 
    | 3|4.4|12/12/2011|text elm 3| 
    ------------------------------- 
    

    などシートのデモを含むExcelワークブックを考えると、私はブレンドしようしかしときに、2つは、私はこのエラーを取得します次のようなConnectionStringとのADODB.Connection:

    Provider=MSDASQL.1;Extended Properties="DBQ=<FullPathToYourXls>;Driver={Microsoft 
    Excel Driver (*.xls)}; 
    

    あなたが.Executeに必要なすべてを取得する

    SELECT * INTO [Demo.csv] IN '<PathToYourCsvFolder>' 'Text;' FROM Demo 
    

    のようなSELECT INTO文です:

    type ..\data\ExcelCsv2\Demo.csv 
    "F1";"F2";"F3";"F4" 
    1;1,10;10.12.2011 00:00:00;"text elm 1" 
    2;2,20;11.12.2011 00:00:00;"text elm 2" 
    3;4,40;12.12.2011 00:00:00;"text elm 3" 
    

    (ドイツ語ロケール)

    をSELECT INTO文が適切なセクション

    を作成します。
    [Demo.csv] 
    ColNameHeader=True 
    CharacterSet=1252 
    Format=Delimited(;) 
    Col1=F1 Integer 
    Col2=F2 Float 
    Col3=F3 Date 
    Col4=F4 Char Width 50 
    

    がschema.iniファイル内に自動的にあります。

    +0

    多くのありがとうEkkehardしかし、私は私の環境から達成することができます従来の言語を使用していませんが必要なパラメータを渡しながらVBスクリプトを呼び出すことです。しかし、接続文字列をVBAで実行できる場合は、接続を維持できるxlsファイルを切り替えることができます。 –

    +0

    また、ワークブック内の複数のシートでサンプルがどのように機能するのかわかりませんが、何か不足していますか? –

    関連する問題