ExcelVBA 応用編 ブックとシート |
「ExcelVBA入門」を応用したサンプルプロシージャです。
このサンプルプロシージャは、私の環境で作成したものです。このままコードをコピーしても実行させることはできません。
お使いになる場合は、自分の環境に合わせて作成しなおしてください。
★ブックの有無を調べるには
ブックの有無を調べるには Dir関数を使います。
Sub ブックの有無を調べる()
Dim myBook As String
myBook = Dir("c:\MyData\ExcelData\納品書.xls")
MsgBox myBook
End Sub
★アクティブブックのパスを求めるには
アクティブブックのパスを求めるには、ThisWorkbookプロパティを使います。
Sub パスを調べる()
'アクティブブックのパスを調べる
Dim myPath As String
myPath = ThisWorkbook.Path
MsgBox myPath
End Sub
★ブックを開く
ブックが存在してるかを調べて、存在していたら開きます。
Sub ブックを開く()
Dim myBook As String
'ブック名をパスつきで変数に代入
myBook = ThisWorkbook.Path & "\" & "納品書.xls"
'もしも指定のファイルがなかったプロシージャを終える
If Dir(myBook) = "" Then
MsgBox "納品書.xsl がありません"
Exit Sub
End If
'ワークブックを開く
Workbooks.Open myBook
End Sub
★ブックが開かれているか調べる
このプロシージャでは指定のブックが開かれているかを調べます。
Sub ブックが開かれているか調べる()
Dim myBook As Workbook, flag As Boolean
'For Each ステートメント内では Workbooks コレクションのメンバーが順番に登場します。
'そこで、myBook.Name が「納品書.xls」かどうかを判定します。
For Each myBook In Workbooks
If myBook.Name = "納品書.xls" Then flag = True
Next myBook
If flag = True Then
MsgBox "納品書は開いています", vbInformation
Else
MsgBox "納品書は開いていません", vbInformation
End If
End Sub
★ワークシートをコピーする
Sub 納品書作成()
'変数を宣言する
Dim myYear, myMonth, myDay As Integer
Dim sheetName As String
Dim sheetCount As Integer
Dim i As Integer
'年月日(メニューシート)を変数に代入する
With Worksheets("メニュー")
myYear = .Range("B3").Value
myMonth = .Range("C3").Value
myDay = .Range("D3").Value
End With
'新しいシート名を変数に格納する
'シート名には年月日をつけるものとする
sheetName = myYear & "-" & Format(myMonth, "00") _
& "-" & Format(myDay, "00")
sheetCount = Worksheets.Count
'エラー処理
'同じ名前のシートを見つけたら処理を中断する
For i = 3 To sheetCount
If sheetName = Worksheets(i).Name Then
MsgBox "同じ名前のシートがあります"
Worksheets(i).Activate
Exit Sub
End If
Next
'納品書フォームシートを末尾にコピーします。
Worksheets("納品書フォーム").Copy After:=Worksheets(sheetCount)
'コピーしたシートに名前をつけます。
With Worksheets(sheetCount + 1)
.Name = sheetName
.Range("F4").Value = myYear & "年" & myMonth & "月" & myDay & "日"
End With
End Sub