(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