|
|
本章では、プログラムを制御するVBA記述ルールと、コードサンプルを例示します。 |
|
|
|
|
|
|
|
|
プログラムの実行を一時的に中断する。
Stop |
|
|
|
|
|
繰り返し処理やプロセジャーから抜ける。
Exit Do
Exit For
Exit Function
Exit Property
Exit Sub |
|
|
|
|
|
プロセジャーやステートメントを終了させる。
End
End Function
End If
End Property
End Select
End Sub
End Type
End With
|
|
|
|
|
|
【呼び出しの制限】
Privatepロセジャーは同じモジュール内でのみ呼び出しが可能
【呼び出しの規則】
標準モジュールからクラスモジュールを呼び出す場合は、プロセジャーの前にクラスモジュール名を記述する。
ex.
クラスモジュールX.プロセジャーY
|
|
|
|
|
|
|
|
If 条件文 Then 処理1 'コードが1つの場合
If 条件文 Then 'コードが複数の場合
処理1
EndIf
ex.
If Counter < 20 Then Counte = 20
|
|
|
|
|
|
|
|
If 条件文 Then 処理1 Else 処理2 'コードが1つの場合
If 条件文 Then 'コードが複数の場合
処理1
Else 処理2
EndIf
|
|
|
|
|
|
If 条件文 Then
処理1
ElseIf
処理2 ElseIf
処理3
Else
処理4
EndIf
|
|
|
|
|
|
|
|
Select Case 領域/条件文
Case ケース1
処理1
Case ケース2
処理2
End Select
ex.
Select Case A
Case 10
X=1
Case 20
X=2
End Select |
|
|
|
|
|
|
|
While 条件文
-- ここに繰り返す処理を書く --
Wend
ex.
While Counter < 20
-- ここに繰り返す処理を書く --
Wend |
|
|
|
|
|
|
|
Do While 条件文
-- ここに繰り返す処理を書く --
Loop
Do
-- ここに繰り返す処理を書く --
Loop Until 条件文 |
|
|
|
|
|
|
|
For Counter = 1 To 20
-- ここに繰り返す処理を書く --
Next Counter |
|
|
|
|
|
『コレクション』の各オブジェクトや『配列』の各要素に対して繰り返し処理を実行する
Dim ss As Range
For Each ss In ActiveSheet.UsedRange
ss.Value = "使用範囲です"
Next |
|
|
|
|
|
SubやFunctionの中から、さらに自分自身を呼び出すような処理ができます。再帰呼び出しを利用することで、複雑な処理を非常に単純なコードとして実現できる場合があります。下の例では、「Msgbox
CC」を5回実行します。
ex.
Sub a()
CountDown (5)
End Sub
Function CountDown(cc As
Integer) As Integer
If cc >
0 Then
MsgBox
cc
CountDown
= CountDown(cc - 1)
Else
MsgBox
"ここまで"
End If
End Function |
|
|
|
|
|
Application.OnTime TimeValue("17:00:00"), "my_Procedure"
上の OnTime メソッドの設定を取り消す
Application.OnTime TimeValue("17:00:00"), "my_Procedure",,False |
|
|
|
|
|
Application.Wait "18:23:00"
次の使用例は、実行中のマクロを約 10 秒間停止します。
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 10
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime |
|
|
|
|
|
Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure" |
|
|
|
|
|
例1
Call File_Open("news_program.xls") 'ファイルを開きます(Auto_Openは実行されません)
Application.Run "news_program.xls!Main", 1 '引数1が渡されます
例2
MYCUSTOM.XLM というマクロ シートで定義されている、My_Func_Sum という関数マクロを呼び出します。
マクロ シートは開かれている必要があります。
この関数には 2 つの数値引数があり、次の使用例では1 と 5 が渡されます。
mySum = Application.Run("MYCUSTOM.XLM!My_Func_Sum", 1, 5)
MsgBox "マクロの結果: " & mySum
例3
020補助簿.xls というブックのModule1というマクロ シートで定義されている、Import という関数マクロを呼び出します。
マクロ シートは開かれている必要はありません
Application.Run "020補助簿.xls!Module1.Import" |
|
|
|
|
|
Dim myPath as String 'パス
Dim fileName as String 'バッチファイル
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run """" & myPath & fileName & """", vbNormalFocus, True ' FullPathで指定
Set WSHShell = Nothing |
|
|
|
|
|
Sub Delete_Module()
Dim obj As Object
For Each obj In ActiveWorkbook.VBProject.VBComponents
If obj.Type = 1 And obj.Name = "Module11" Then
ActiveWorkbook.VBProject.VBComponents.Remove obj
End If
Next obj
Set obj = Nothing
End Sub
※参照設定が必要(パソコンにインストールされているライブラリを、VBAから使えるように参照する仕組み)
「Microsoft Visual Basic for Application Extensibility」
※セキュリtyヒ設定が必要
【ツール】−【マクロ】−【セキュリティ】−【信頼できる発行元】
□Visual Basic プロジェクトへのアクセスを信頼する。 にチェック(レ)を入れる。 |
|
|
|
|
|
Sub Export_Module()
Dim Obj As VBIDE.VBProject
Dim ExpFile As String
Set Obj = ThisWorkbook.VBProject
ExpFile = ActiveWorkbook.Path & "\" & "Module1.bas"
Obj.VBComponents("Module1").Export (ExpFile)
Set Obj = Nothing
End Sub
※参照設定が必要(パソコンにインストールされているライブラリを、VBAから使えるように参照する仕組み)
「Microsoft Visual Basic for Application Extensibility」
※セキュリtyヒ設定が必要
【ツール】−【マクロ】−【セキュリティ】−【信頼できる発行元】
□Visual Basic プロジェクトへのアクセスを信頼する。 にチェック(レ)を入れる。 |
|
|
|
|
|
Sub Import_Module()
Dim Obj As VBIDE.VBProject
Dim ImFile As String
Set Obj = ThisWorkbook.VBProject
ImFile = ActiveWorkbook.Path & "\" & "Module1.bas"
Obj.VBComponents.Import ImFile
Set Obj = Nothing
End Sub
※参照設定が必要(パソコンにインストールされているライブラリを、VBAから使えるように参照する仕組み)
「Microsoft Visual Basic for Application Extensibility」
※セキュリtyヒ設定が必要
【ツール】−【マクロ】−【セキュリティ】−【信頼できる発行元】
□Visual Basic プロジェクトへのアクセスを信頼する。 にチェック(レ)を入れる。 |
|
|
|
|
|
Dim Msg
On Error GoTo ErrHndlr
'カーソルを時計マークにする
Application.Cursor = xlWait
'ステータスバーを表示する
Application.DisplayStatusBar = True
Open "a" For Input As #1
Application.StatusBar = "処理 50% 終了しました"
'標準に戻す
Application.Cursor = xlNormal
Application.DisplayStatusBar = False
Exit Sub
ErrHndlr:
Msg = "エラー番号 " & Str(Err.Number) & Err.Source & " でエラーが発生しました。" _
& Chr(13) & Err.Description
MsgBox Msg, , "エラー", Err.HelpFile, Err.HelpContext
'標準に戻す
Application.Cursor = xlNormal
Application.DisplayStatusBar = False |