●詳細●
サンプルでは、マクロの実行状況をステータスバーに表示しています。
サンプル内容は、マクロのあるブックをアクティブにしてセルをコピー
したら、新規に追加したブックをアクティブにして貼り付ける、を繰り
返します。そして、画面の表示を動かした場合と、画面の表示を固定した
場合で、ステータスバーのメッセージを変えています。
画面の表示を動かした場合は、2つのブックが交互に表示されるので、
画面がめまぐるしく動きます。そして、ステータスバーには、画面の状態
が固定されていないことと処理状況が表示されます。 画面の表示を停止さ
せた場合は、新規ブックのシート2が表示されたままで動きません。そして、
やはりステータスバーには、画面が固定されていることと処理状況が表示さ
れます。 画面の動きと、処理結果が分かりやすいように、マクロのあるブック
のシートに一時的に色を付けているので、画面の表示が動く時と停止している時
で、貼り付け結果の色が違います。
●準備●
新規ブックにサンプルマクロを貼り付けてください。
●サンプル●
Sub sample()
Dim myWB As Workbook
Dim newWB As Workbook
Dim myState(2) As String
Dim myBar As Boolean
Dim i, j As Integer
'<画面の動きを配列にセットします。>
'<画面が動きます。>
myState(1) = "True"
'<画面の動きを止めます。>
myState(2) = "False"
'<マクロのあるブックを取得します。>
Set myWB = ThisWorkbook
'<新規ブックを取得します。>
Set newWB = Workbooks.Add '←(1)
'<ステータスバーの状態を保存します。>
myBar = Application.DisplayStatusBar '←(2)
'<ステータスバーを表示します。>
Application.DisplayStatusBar = True
MsgBox "画面とステータスバーを見ていてくださいね。"
'<画面の動きがある場合と停止させた場合の確認をし、
'画面の状態をステータスバーに表示します。>
For i = 1 To 2 '←(3)
'<動きが分かりやすいようにシートに色を付けます。>
myWB.Activate
Worksheets(1).Activate
'<全てのセルを選択します。>
Cells.Select
'<内部を塗りつぶす色を指定します。>
Selection.Interior.ColorIndex = 34 + i '←(4)
newWB.Activate
Worksheets(i).Activate
'<画面の動きを止めるかどうかセットします。>
Application.ScreenUpdating = myState(i) '←(5)
'<マクロのあるシートのA1〜A10のセル内容をコピーして
'新規ブックの1枚目のシートのB1〜B10へ貼り付けます。>
For j = 1 To 10
'<ステータスバーにメッセージを表示します。>
If i = 1 Then '←(6)
Application.StatusBar = "画面は動いています。・・・" _
& j & "行目コピー中(新規ブックのシート1へ)"
Else
Application.StatusBar = "画面の動きを止めました。・・・" _
& j & "行目コピー中(新規ブックのシート2へ)"
End If
'<マクロのあるシートをコピーします。>
myWB.Activate
Worksheets(1).Activate
Range("A" & j).Select
Selection.Copy
'<1秒間マクロを中止します。>
Application.Wait (Now + TimeValue("00:00:01")) '←(7)
'<新規シートへ貼り付けます。>
newWB.Activate
Worksheets(i).Activate
Range("B" & j).Select
ActiveSheet.Paste
'<1秒間マクロを中止します。>
Application.Wait (Now + TimeValue("00:00:01"))
Next j
Next i
'<マクロのあるブックのシートの色を元に戻します。>
myWB.Activate
Worksheets(1).Activate
Cells.Select
Selection.Interior.ColorIndex = xlNone
Range("A1").Select
'<新規ブックのシート1をアクティブにします。>
newWB.Activate
Worksheets(1).Activate
'<ステータスバーの表示内容をExcelの規定値に戻す。>
Application.StatusBar = False '←(8)
'<ツールバーを元に戻します。>
Application.DisplayStatusBar = myBar
'<画面の動きを解除します。>
Application.ScreenUpdating = True
MsgBox "新規ブックのシート1とシート2を確認してください。"
End Sub
●補足説明●
(1) Addメソッドは、新しいブックを作成します。そして、新しいブックが作業中
のブックになります。
(2)DisplayStatusBarプロパティは、ステータスバーの値の取得と設定ができます。
Trueでステータスバーを表示します。
(3)「For〜Next」ステートメントは、指定された回数分、処理を繰り返します。
<構文> For x = i To y
(処理)
Next x
x:繰り返す回数をカウントする数値変数を指定します。
i:初期値をセットします。
y:繰り返す回数(最終値)をセットします。
Nextステートメントでxに1加算され、再び処理を繰り返します。
(4)ColorIndexプロパティは、セル内部の塗りつぶしなどに適用する色を設定します。
色は、現在のカラーパレットのインデックス、または定数で表します。
現在のカラーパレットを返すには、Colorsプロパティを使ってください。
(5)ScreenUpdatingプロパティは、マクロの実行中に画面表示を更新する(True)・
更新しない(False)を設定します。ブール型 (Boolean) の値を使用します。
画面を更新しないと、マクロの処理過程は見ることができませんが、マクロの実行
速度が向上します。
マクロが終了したら、ScreenUpdatingプロパティの値をTrueに戻します。
*ブール型 (Boolean)
ブール型 (Boolean) の変数は、16 ビット(2バイト) の変数です。
ブール型変数が格納できる値は、真(True)または偽(False)だけです。
(6)StatusBarプロパティに、任意の文字列を代入してメッセージを表示します。
(7)実行中のマクロを指定の時刻まで停止します。指定の時間に達した場合、Trueを
返します。
Wait メソッドは、Excel のすべての動作を停止させますが、印刷や再計算などの
バックグラウンド処理は続行されます。
*Now関数・・・コンピュータのシステムの日付と時刻の設定に基づいて、現在の
日付と時刻を表すバリアント型 (内部処理形式 Date の Variant)の値を返します。
*TimeValue関数・・・時刻を表すバリアント型 (内部処理形式 Date の Variant)の
値を返します。
<構文> TimeValue(time)
引数 time は必ず指定します。引数 time には、通常 0:00:00 (12:00:00
AM)〜23:59:59 (11:59:59 PM) の範囲の時刻を表す文字列式を指定します。
(8)Excel側でステータス バーを制御しているとき、このプロパティは False を返します。
ステータスバーの文字列を既定値に戻すには、プロパティに Falseを設定します。
|