目次
SCHOOL OF VBA そのあとに その3
こんにちは。伊川(@naonaoke)です。
長らくお待たせしました。
さぼっていたわけではないのですが、時間をおいて申し訳ありませんでした。
今回は、作成したファイルを自動で保存します。
特殊フォルダの取得
作成したファイルをデスクトップに自動保存します。
その際に必要な知識は、WScript.Shell,SpecialFoldersプロパティです。
CreateObject関数で作成したWscript.ShellのSpecialFoldersプロパティで、
特殊フォルダを示す文字列を引数に指定して特殊フォルダを取得します。
デスクトップのフォルダ、スタートメニューのフォルダ、個人用ドキュメントのフォルダなどを取得できます。
自動保存 作業手順 その1 コード抜粋
CreateObject関数で作成したオブジェクトを利用するにはCreateObject関数の戻り値を
Setステートメントでオブジェクト変数に代入します。
この書き方でデスクトップを取得できます。
自動保存 作業手順 その3 コードを解説
Sheet2を選択
最終行を取得
条件分岐で判定する
もし、セルC2の文字数が、0以上だったら
出力範囲を設定します。
新しいシートを作成して、選択したデータを新しいシートにコピー
CSVで出力するコード
これで、自動でデスクトップに作成した数値が自動保存されます。
Sub CSVファイルへ出力() Dim i As Long Dim rng As String Dim Path As String, WSH As Variant Set WSH = CreateObject("WScript.Shell") Path = WSH.SpecialFolders("Desktop") & "\" Sheets(2).Activate maxrow = Cells(Rows.Count, 4).End(xlUp).Row For i = 2 To maxrow If Len(Worksheets(2).Range("C2")) > 0 Then Worksheets(2).Range("C2:U13").Select rng = Selection.Address '選択範囲のセルアドレス sname = Worksheets(2).Name 'シート名 Worksheets(sname).Range(rng).Copy Destination:=Worksheets.Add.Range("A1") '新しいシートを追加し、選択範囲をコピー ActiveSheet.Move '新しいブックを作成し、そこにシートを移動する Application.DisplayAlerts = False '上書きのメッセージを表示させない ActiveWorkbook.SaveAs Filename:=Path & Left(ActiveSheet.Range("A2"), 14), FileFormat:=xlCSV ActiveWorkbook.Close SaveChanges:=False '保存せずに閉じる Application.DisplayAlerts = True 'メッセージ表示を戻す Set WSH = Nothing End If Next i MsgBox "出力完了" End Sub
ここがポイント
ここがポイント
全自動で保存されます。名前を付けて保存等、面倒な作業を依頼すると売れません。最初は、何時間も考えました。一度覚えると、カンタンなもので、パーツを組み合わせる感覚です。
まとめ
一応、ACCESSへの転送等もあるのですが、それは、一般公開の動画で紹介しています。
ここでは、割愛します。