2020年6月12日金曜日

[VBA] 09. ブックの操作

ブックの操作についてまとめました。複数のブックの値を集計する時などによく使う。



ブックの選択
開いるブックに対してのみ有効。ブックを開く方法については後述する。
'Book1 をアクティブにする
Workbooks("Book1.xlsx").Activate

シートのように Workbooks(1) とする事もできるが、指定する数字はブックを開いた順番(だったかな?)というなんとも曖昧な値になるので、ろくでもない事が起きる予感しかしない。


ブックの追加
'新規ブックを追加する
Workbooks.Add
新規ブックを追加したら、追加されたブックはアクティブ化される。


ブック情報の取得
マクロを記述しているファイルの情報を取得する。
'ブック名を取得
Debug.Print ThisWorkbook.Name

'ブックのパスを取得 (ファイル名は含まない)
Debug.Print ThisWorkbook.Path

'ブックのパスを取得 (ファイル名を含む)
Debug.Print ThisWorkbook.FullName

アクティブなワークブック名を取得したい場合は以下。
Debug.Print ActiveWorkbook.Name


ブックを開く
Dim path As String

path = "C:\Users\xxxx\Desktop\Book1.xlsx"

'ブックを開く
Workbooks.Open Filename:=path

'ブックを読み取り専用で開く
Workbooks.Open Filename:=path, ReadOnly:=True
Filename:= は省略可。
実際はファイルの存在確認などを行う必要があるので、以下のようになる。
Dim path As String, file As String, wb As Workbook

path = "C:\Users\xxxx\Desktop\Book1.xlsx"

'パスからファイル名を取得
file = Dir(path)

'ファイルの存在チェック
If file <> "" Then
    '同名のブックのチェック
    For Each wb In Workbooks
        If wb.Name = file Then
            MsgBox "同じ名前のブックを既に開いています。" & vbCrLf & file
        End If
    Next
    'ブックを開く
    Workbooks.Open Filename:=path
Else
    MsgBox path & vbCrLf & "が存在しません。"
End If


ブックの保存
'上書き保存
ActiveWorkbook.Save
名前を付けて保存は以下のようにする。[いいえ], [キャンセル] が押された場合の対処をしておかないとエラーになる。
'名前を付けて保存
On Error Resume Next  'エラー処理を無効化
ActiveWorkbook.SaveAs Filename:="C:\Users\xxxx\Desktop\Book2.xlsx"
If Err.Number <> 0 Then MsgBox "保存しませんでした。"  '[いいえ], [キャンセル] が押されてないかチェック
On Error Goto 0  'エラー処理を通常に戻す
現状をコピーして別の名前で保存したい場合は、SaveCopyAs を使用する。元のファイル自体は保存されない。
'コピーを保存
ActiveWorkbook.SaveCopyAs Filename:="C:\Users\xxxx\Desktop\Book2.xlsx"


ブックを閉じる
'ブックを閉じる
ActiveWorkbook.Close

'ブックを保存せずに閉じる
ActiveWorkbook.Close SaveChanges:=False



0 件のコメント:

コメントを投稿