ビジネスに役立つ講座や交流会を開催
社長・個人事業主からサラリーマン・主婦まで、どなたでも
アベノ塾

ホーム  会場案内  お問合せ

〒545-0052
大阪市阿倍野区阿倍野筋3-12-2
あべのクオレ1F
(ナガセキャリアプラザ アベノ校)
TEL 06-6647-5571

(4)ブックの操作

 ブックの操作はエクセル内での操作だけでなくWindowsからの操作が必要になる時があります。具体的にはApplicationはエクセル全体を表すオブジェクトです。
メソッドも多くあり使いこなせば応用が広いと思いますが、難しいです。

VBA実践塾は結果を出すことが目的ですので、必要なものを部品として活用するという考えで使ってください。

(a)ファイルを開く

ファイルを開くダイアログが開きエクセルのファイルを開くと同じです。
Sub yobidasi()
    Dim OpenFileName As String
    OpenFileName = Application.GetOpenFilename("Excelブック,*.xlsx")
    If OpenFileName <> "False" Then
        Workbooks.Open OpenFileName
    End If
End Sub

(b)同じフォルダーのファイルを開く

フォルダー(ディレクトリィ)の場所を変える。Change Directory
昔MSDOSのコマンドを勉強した人はCDが懐かしいでしょう。

 

 

 

 

 

Sub yobidasi1()
    Dim OpenFileName As String
    Dim myFol As String
    myFol = ThisWorkbook.Path
    ChDir myFol
    OpenFileName = Application.GetOpenFilename("Excelブック,*.xlsx")
    If OpenFileName <> "False" Then
        Workbooks.Open OpenFileName
    End If
End Sub

(c)同じフォルダーのファイルを開くShellを使う

Shellコマンドを使うとエクセルからほとんどのプログラムが実行できます。
Sub yobidasi2()
    Dim myFol As String
    myFol = ThisWorkbook.Path
    Shell "C:\Windows\Explorer.exe " & myFol, vbNormalFocus
End Sub

(d)ファイルを開く指定したファイル(ファイルが存在しているか判断)

これもMSDOSでおなじみのコマンドDIRです。
Sub yobidasi3()
    Dim MyFile As String
    MyFile = "D:\大阪.xlsx"
    If Dir(MyFile) <> "" Then
      Workbooks.Open Filename:=MyFile
    Else
      MsgBox "そのブックは存在しません"
    End If
End Sub

(e)ファイルを開く指定したファイル(ファイルが開いているか判断)

オブジェクト変数の繰り返しはFor Each文を使います。
事務処理ではあまり使いませんので部品として使ってください。
Sub yobidasi4()
    Dim flag As Boolean
    Dim wb As Workbook
    Dim MyFile As String
    MyFile = "D:\大阪.xlsx"
    flag = False
    For Each wb In Workbooks
        If wb.FullName = MyFile Then
            flag = True
            MsgBox MyFile & "は既に開いています"
            Exit Sub
        End If
    Next wb
    If flag = False Then
        MsgBox MyFile & "を開きます"
        Workbooks.Open MyFile
    End If
End Sub


 

(f)ファイルを開く指定したファイル(ファイルが存在しているか判断)(ファイルが開いているか判断)

ファイルを開くだけなら
Workbooks.Open"D:\大阪.xlsx"
だけでいけますがプログラムはエラー処理のために長く、難しくなります。
自分が使うプログラムであればエラー処理はあまり必要ないと思いますが他人が使う場合
その方のエクセルの習熟度によってプログラムが難しくなるものです。
そのためにオブジェクト変数も使わないといけません。

Sub yobidasi5()
    Dim flag As Boolean
    Dim wb As Workbook
    Dim MyFile As String
    MyFile = "D:\大阪.xlsx"
    If Dir(MyFile) <> "" Then
       flag = False
       For Each wb In Workbooks
           If wb.FullName = MyFile Then
              flag = True
              MsgBox MyFile & "は既に開いています"
              Exit Sub
           End If
       Next wb
       If flag = False Then
          MsgBox MyFile & "を開きます"
          Workbooks.Open MyFile
       End If
    Else
      MsgBox "そのブックは存在しません"
    End If
End Sub

(g)上書き保存

保存のダイアログ(上書き・保存・名前を付けて保存・キャンセル)のダイアログを出すとそれの処理が必要となりますので上書きのみでダイアログを表示させません。
Workbooks("大阪.xlsx").Close SaveChanges:=True

Sub hozon()
    Dim flag As Boolean
    Dim wb As Workbook
    Dim MyFile As String
    MyFile = "D:\大阪.xlsx"
    For Each wb In Workbooks
        flag = False
        If wb.FullName = MyFile Then
           flag = True
           Exit For
        End If
    Next wb
    If flag = False Then
       MsgBox MyFile & "は開いていません"
       Exit Sub
    End If
    Workbooks("大阪.xlsx").Close SaveChanges:=True
    MsgBox "保存されました"
End Sub

(h)名前をつけて保存

名前を付けるファイルが存在していると困るので保存する前にDir関数で判断しています。
Sub hozon1()
    Dim flag As Boolean
    Dim wb As Workbook
    Dim MyFile As String
    Dim MyFile1 As String
    MyFile = "D:\大阪.xlsx"
    MyFile1 = "D:\大阪1.xlsx"
    For Each wb In Workbooks
        flag = False
        If wb.FullName = MyFile Then
           flag = True
           Exit For
        End If
    Next wb
    If flag = False Then
       MsgBox MyFile & "は開いていません"
       Exit Sub
    End If
    If Dir(MyFile1) <> "" Then
       MsgBox "名前を変更するそのブックは存在しています"
       Exit Sub
    End If
    Workbooks("大阪.xlsx").SaveAs Filename:=MyFile1
    Workbooks("大阪1.xlsx").Close
    MsgBox "保存されました"
End Sub