SHOJI's Code
 仕事や趣味で書いた各種言語のプログラミングコード(エクセルVBA,PHP,C/C++/C#,JavaScript等)、その他雑記。
2017.10<<123456789101112131415161718192021222324252627282930>>2017.12
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

CSVはテキストで扱いやすいので別システムなどでデータをCSV形式で保存することがよくある。そのCSVを読みこみ、帳票として整形するのだが、リンクはしたくないので、マクロで一旦CSVを開き、帳票用のエクセルファイルの特定のシートに丸ごとコピーし、それを参照して使うのが私の定石である。が、不満があった。CSVを読み込む様子が表示されてしまうことである。

それは、美しくない・・・。

ということでちょっと考えてみた。
Function LoadCSV(ByVal dest As Worksheet, ByVal csvfile As String) As Boolean

Dim ap As Application
Dim wb As Workbook
Dim ws As Worksheet

On Error Resume Next

LoadCSV = False

Set ap = CreateObject("Excel.Application")

Set wb = ap.Workbooks.Open(csvfile, False, True, 2)
If Not (wb Is Nothing) Then

Set ws = wb.Worksheets(1)

used$ = ws.UsedRange.Address
dest.Range(used$).Value = ws.Range(used$).Value

LoadCSV = True

wb.Saved = True
wb.Close
End If

Set ap = Nothing

End Function


EXCELマクロの中でEXCEL.Applicationオブジェクトを作成するという無理やりな技。が、CreateObjectによって作成されたEXCEL.Applicationオブジェクトは非表示なので、そこに表示したくないCSVを読み込ませている。別オブジェクトのEXCEL間でうまくセルの内容が渡るかな?と思ったがうまくいっているようだ。
なんか機会があったら、使ってみよっと(^^)

テーマ:Excel - ジャンル:コンピュータ
コメント
この記事へのコメント
コメントを投稿する

管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2004-2006 SHOJI, Powered By FC2ブログ all rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。