4.6 ワークブックの保存
 ワークブックを保存する方法です。せっかく作ったワークブックだし、ちゃんと保存してあげましょう。保存をするときの基本はエクセルマクロと全く同じです。エクセルオブジェクトにワークブックを指定して、名前を付けて保存するならSaveAsメソッドを使い、上書き保存をするならSaveメソッドを実行します。
使用例1/新規ワークブックを名前を付けて保存する
 新しいワークブックを作り、ゴソゴソ編集した後名前をつけて保存する例です。SaveAsメソッドを使います。例の内容は、4.5 ワークブックの操作とほとんど同じ内容ですが、SaveAsによるワークブックの保存処理(A)が追加してあります。SaveAsには、パラメタとしてエクセルワークブックのファイル名をフルパスで指定します。

 それと、SaveAsを実行するとき同じファイル名のワークブックが既にある場合、特に何も指定を行わないと「ワークブックを置き換えますか?」というダイアログが表示されるのですが、処理を自動化したい場合にはこんなものは邪魔ですね!?なので、表示しないようにしました。エクセルオブジェクトのDisplayAlertsFalseを指定(@)すれば確認ダイアログが表示されず、強制的に上書きされます。

 ちなみに、既存のワークブックを開いて名前を変えて保存したいときもSaveAsメソッドを使用します。

 この例では、ワークブックへの操作が分かるように、あえてワークブックを閉じたりエクセルの終了(Quit)を行ってません。かつ、VBS(WSH)のプログラムが終了してもエクセルは終了しません。早い話が、エクセルが出っぱなしになります。出っぱなしになる理由については、4.8 ワークブックを扱うときの注意を参考にしてください。

 なお、ワークブックを閉じる方法については、4.7 ワークブックを閉じるをどうぞ。

こっちがメイン(実行する方)。ファイル名はExcelMainSaveAs.wsfで作成
<job id="ExcelJob">

<!-- エクセルのライブラリを宣言(エクセルマクロの定数を使うため) -->
<reference guid="00020813-0000-0000-C000-000000000046"></reference>

<script language="VBScript" src="./workbookeditSaveAs.vbs"></script>
<script language="VBScript">

    '主となる処理はworkbookeditSaveAs.vbsにあるので呼び出します
    Call prcMain

</script>

</job>

こっちは実際の処理を行う方。ファイル名はworkbookeditSaveAs.vbsで作成
Option Explicit

Dim objExcel

Sub prcMain()

    Dim objSelection

    'エクセルオブジェクトを作成します
    Set objExcel = CreateObject("Excel.Application")

    'エクセル画面を表示します
    objExcel.Visible = True

    'ワークブックを作ります
    objExcel.Workbooks.Add

    '範囲を選択します。選択した範囲はオブジェクトとして保存します
    ' (エクセルマクロのSelectionが使えないため)
    Set objSelection = objExcel.Workbooks(1).Worksheets(1).Range("B2:D10")

    '選択した範囲の下に罫線を付けます
    With objSelection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With

    '選択した範囲の上に罫線を付けます
    With objSelection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With

    '選択した範囲の右に罫線を付けます
    With objSelection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With

    '選択した範囲の左に罫線を付けます
    With objSelection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With

    '選択した範囲内のセルを塗りつぶします
    With objSelection.Interior
        .ColorIndex = 10
        .Pattern = xlSolid
    End With

    '@各種の確認ダイアログを非表示
    objExcel.DisplayAlerts = False
    'Aワークブックの保存
    objExcel.Workbooks(1).SaveAs ("c:\happy\エクセル.xls")

    'オブジェクトの破棄
    Set objSelection = Nothing
    Set objExcel = Nothing

End Sub
 ※例では、エクセルの画面をわざと表示しています
使用例2/既存のワークブックを保存する
 こっちは、既存のワークブックを開いてゴソゴソ編集した後、上書き保存する例です。Saveメソッドを使います。例の内容は、4.5 ワークブックの操作とほとんど同じ内容ですが、Saveによるワークブックの保存処理(A)が追加してあります。Saveには、特にパラメタの指定はありません。

 ちなみに、Saveメソッドは元のワークブックに保存するという操作なので「ワークブックを置き換えますか?」のダイアログは出ません。なのに、DisplayAlertsFalseを入れて(@)います…まぁ、念のためですよ(笑)

 この例では、ワークブックへの操作が分かるように、あえてワークブックを閉じたりエクセルの終了(Quit)を行ってません。かつ、VBS(WSH)のプログラムが終了してもエクセルは終了しません。早い話が、エクセルが出っぱなしになります。出っぱなしになる理由については、4.8 ワークブックを扱うときの注意を参考にしてください。

 なお、ワークブックを閉じる方法については、4.7 ワークブックを閉じるをどうぞ。

こっちがメイン(実行する方)。ファイル名はExcelMainSave.wsfで作成
<job id="ExcelJob">

<!-- エクセルのライブラリを宣言(エクセルマクロの定数を使うため) -->
<reference guid="00020813-0000-0000-C000-000000000046"></reference>

<script language="VBScript" src="./workbookeditSave.vbs"></script>
<script language="VBScript">

    '主となる処理はworkbookeditSave.vbsにあるので呼び出します
    Call prcMain

</script>

</job>

こっちは実際の処理を行う方。ファイル名はworkbookeditSave.vbsで作成
Option Explicit

Dim objExcel

Sub prcMain()

    Dim objSelection

    'エクセルオブジェクトを作成します
    Set objExcel = CreateObject("Excel.Application")

    'エクセル画面を表示します
    objExcel.Visible = True

    'ワークブックを作ります
    objExcel.Workbooks.Open "c:\happy\エクセル.xls"

    '範囲を選択します。選択した範囲はオブジェクトとして保存します
    '(エクセルマクロのSelectionが使えないため)
    Set objSelection = objExcel.Workbooks(1).Worksheets(1).Range("B2:D10")

    '選択した範囲の下に罫線を付けます
    With objSelection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With

    '選択した範囲の上に罫線を付けます
    With objSelection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With

    '選択した範囲の右に罫線を付けます
    With objSelection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With

    '選択した範囲の左に罫線を付けます
    With objSelection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With

    '選択した範囲内のセルを塗りつぶします
    With objSelection.Interior
        .ColorIndex = 10
        .Pattern = xlSolid
    End With

    '@各種の確認ダイアログを非表示
    objExcel.DisplayAlerts = False
    'Aワークブックの保存
    objExcel.Workbooks(1).Save

    'オブジェクトの破棄
    Set objSelection = Nothing
    Set objExcel = Nothing

End Sub
 ※例では、エクセルの画面をわざと表示しています

Copyright(C) 1999-2014 結城圭介(Ver.3.51) All rights reserved