2016-07-18 5 views
0

私は現在、xlsまたはxlsxファイルからいくつかのシートをエクスポートし、シートの名前に応じてすべてを別のファイル形式にエクスポートできるようにする一連のvba関数を作成しています。これは、古いファイルを使用する非常に特殊な手順です。閉じられたブックシートを.CSVファイルにエクスポートするにはどうすればよいですか?

選択したファイルのシートの一部は生データとして扱う必要があり、データを変更せずに.CSVファイルとしてエクスポートしたいとします。それが助けても、IFやその他の論理的な処理を行うためにデータを「見る」必要はありません。

閉じたファイルから特定のシートの特定のセルからデータを取得する機能は既にありますが、シートのすべてのデータをどのように取得するのかわかりません。 Cell(23785; GP)にデータがあるかどうかをチェックするためにほとんど空です。

これは私が既に持っている機能であり、期待される動作を理解するのに役立ちます。

Private Function GetInfoFromClosedFile(ByVal wbPath As String, _ 
    ByVal WBName As String, wsName As String, cellRef As String) As Variant 
    Dim arg As String 
    GetInfoFromClosedFile = "" 
    If Right(wbPath, 1) <> "\" Then wbPath = wbPath & "\" 
    If Dir(wbPath & "\" & WBName) = "" Then Exit Function 
    arg = "'" & wbPath & "[" & WBName & "]" & wsName & "'!" & Range(cellRef).Address(True, True, xlR1C1) 
    On Error Resume Next 
    GetInfoFromClosedFile = ExecuteExcel4Macro(arg) 
End Function 

他のワークブックはまだ最後に閉じていて、現在のものに何も変更されていないことが必要です。少なくとも、すべての変更は元に戻す必要がありますので、ファイルを選択した後、ユーザーは確認メッセージと新しく作成したファイルを自分のコンピュータに表示します。これはプログラマーでも技術にも精通していない人たちによって使用されるので、同時に何かのために使うことができる自分の現在のワークブックを台無しにすると、私たちはいくつかの苦情を受けるでしょう。

+0

ADO経由でSQLを使用します。 –

+0

申し訳ありませんが、これは本当にあまり役に立ちません。私はvbaを使用したことがなかったし、これまでにも非常に優れているので、「ADO経由でSQLを使用する」と言えば、データベースであるかのようにファイルを読み取る方法があるだけです。私はどのように考えていないと私はまた、 –

+0

の後にCSVにエクスポートする必要があり、それは助けになる、これはコードを書くサービスではありません。 CSVとしてファイルを保存する方法の詳細がない場合、私はショックを受けます。 –

答えて

0

このサブファイルは、文字列とシート名を引数として取り、拡張子.csvに前の名前、シート名、拡張子を付加した.CSVファイルを作成します。

Private Sub export_file_to_csv(src_path, sheet_name) 
    Application.DisplayAlerts = False 

    Set src_workbook = Workbooks.Open(src_path, , True) 
    src_workbook.Sheets(sheet_name).Activate 

    dst_path = src_path & " - " & sheet_name & ".csv" 
    src_workbook.SaveAs Filename:=dst_path, FileFormat:=xlCSV 
    src_workbook.Close 

    Application.DisplayAlerts = True 
End Sub 

次に、別のサブで必要な回数だけ呼び出すことができます。

Sub main_sub() 
    export_file_to_csv "C:\Users\username\Desktop\maps.xlsx", "Europe" 
    export_file_to_csv "C:\Users\username\Desktop\maps.xlsx", "Asia" 
    export_file_to_csv "C:\Users\username\Documents\budget.xls", "Sheet1" 
End Sub 

だけで、別のブックにこのコードを入れマクロメニューに表示されますCSV形式にエクスポートし、main_subを実行されるファイルのパスとシート名を編集します。元のファイルは、読み取り専用で開いているので、そのまま保存されます。

希望すると助かります!

+0

ありがとう、これは私が探していたものに非常に近いです。それは正しい方向への大きな一歩です。唯一の問題は、これを最初のシートでのみ実行することができないことです。シートの名前を付けることができなければならない。そのファイルは特定の順番で約12の異なるシートを含み、それらのうちの3〜4だけが.CSVに変換される必要があるからである。あなたはそれをする方法を知っていますか? –

+0

答えに編集されました。これで、ファイルパスとシート名をSubに渡すことができるので、Excelは各ファイルに対してどのシートを書き出すかを知っています。生成された各CSVファイルは、その名前に選択されたシート名を持ちます。 –

+0

ありがとうございました!私は答えを受け入れました。なぜなら、私は必要なことをしましたが、少し問題があります。 "é"のような特殊文字は、カンマで置き換えられ、その行がぼやけます。エンコードの問題のように見えます。 また、生成されるCSVは必要以上に大きくなります。たとえば、私のシートの1つでは、すべてのデータが列Jの前に表示されます。データが格納された後、列は表示されません。生成されたCSVには適切な数の行がありますが、各行には何もない前後の何百もの末尾のカンマがあります。必要なデータはすべてそこにありますが、そのためにcsvは不必要に大きくなります。 –

関連する問題