1.マクロ実行方法

1-1.マクロ実行ダイアログからの実行
マクロを実行する最も基本的な方法は、メニューからマクロ実行ダイアログを表示しそこに表示 されたマクロ名を指定する方法です。(事前にマクロの入った対象のブックを開いておく事)





[1] 左図は、KI(load_np)のマクロ実行例です

[2] マクロ名を選択し「実行」をクリックで実行スタート






1-2.ブックオープンで自動実行
Workbookオブジェクトの「Open」イベントは、ブックが開いた時にイベントが発生します
したがって、ブックが開いた時Workbook_Open()プロシージャーに記載したマクロが実行されます

このマクロの作成方法は、メニューの「ツール」「マクロ」「Visual Basic Editor」で Visual Basic Editorを開き、プロジェクトエクスプポーラに表示されている「ThisWorkbook」を ダブルクリックでコードウンドウを表示します。上側の窓に(General)と表示されていますが、 これを「Workbook」に変えると、

Private Sub Workbook_Open()

End Sub

がウインドウ内に出来ます。(下図参照)


上図プロシージャーの場合は、「Call load_np」でマクロ[load_np]が実行されます。



1-3.「Ctrl」+「q] キーからマクロ実行
ショートカットキーにマクロを登録して、「Ctrl」+「q]キーでマクロを実行したい場合は、 マクロ実行ダイアログを表示(1-1項のダイアログ)を表示して下図のように「マクロオプション」 でキー(本例の文字は"q")を登録してマクロを実行出来ます。



[1] メニューから「ツール」「マクロ」「マクロ」マクロダイアログ表示

[2] ショートカットキーで実行したいマクロを選択

[3] 「オプション」ボタンクリック

[4] 「マクロオプション」ダイアログ表示

[5] ショートカットキーに使用したい文字を入力

  (大文字の場合は「Shift」キーを押しながら入力) [6] 「OK」クリック




以上の登録で、マクロ[load_np]は「Ctrl」+「q] で実行出来ます。
なお、大文字で登録した場合は、「Ctrl」+「Shift」+「Q] で実行となります
-------------------------------------------------------------------------------
上記のダイアログから登録ですが、マクロでショートカットを登録は以下で出来ます。

Private Sub Workbook_Open()
    Application.OnKey "^{q}", "load_np"
End Sub
[1] Workbook_Open()プロシージャーの表示についたは1-2項を参照のこと。
[2] 「OnKey」メソッドで指定したキー(又はキーの組合せ)でプロシージャを実行出来ます。
[3] "^"は VBAのキー表記で「Ctrl」の意味です。
[4] また、キー表記で文字を書く場合は"{}"で囲みます。

本例の場合は、ブックを開いた時登録されるので、以降は「Ctrl」+「q] でマクロを実行出来ます。 なお、{Q}と大文字を指定した場合は「Ctrl」+「Shift」+「Q] で実行となります。



1-4. ファンクションキーからマクロ実行
前項をマクロは殆ど同じですが、キーとしてファンクションキーを指定すれば 指定したファンクションボタンをクリックでマクロを実行できます。

Private Sub Workbook_Open()
   Application.OnKey "{F10}", "load_np"
End Sub
本例の場合は、ブックを開いた時登録されるので、以降は「F10」キーでマクロを実行できます。 なお、キー登録するとこちらが優先され、Excelの標準機能で通常実行する機能が実行できなくなるので、 どのキーを指定するか注意して選ぶ必要があります。

1-5. コマンドボタンからマクロ実行
シートにコマンドボタンを付け、そのボタンにマクロを登録すれば、ボタンクリックで マクロを実行できます。



(1)ボタンの貼り付け
[1] Excelブックを開く(本例はマクロ作成済みのKI(load_np.xls)の場合)
[2] メニューの「表示」「ツール」「フォーム」でフォームのダイアログ表示(左図右側)
[3] ボタンをクリックで、マウス矢印がが十字に変わるので、設定したい場所にボタンを書く(左図左側)
[4] ボタンを書き終えると「マクロ登録」ダイアログが表示されるのでマクロを登録
  (マクロの入ったブックを事前に開いて置けばダイアログにマクロ名があるのでそれを選ぶ)
  (マクロ登録や変更は、下記の(2)の方法でもできます)
[5] ボタンの表題は、右クリックでボタンを選択状態にして再度左クリックをできます)
[6] ボタン作成後ブックを保存すれば、次回からはボタンは表示されます





(2)マクロの登録
[1]右クリックでショートカットメニューが表示される(左図側)
[2] マクロ登録クリック [3] 「マクロ登録」ダイアログが表示されるのでマクロを登録
  (マクロの入ったブックの場合はダイアログにマクロ名があるのでそれを選ぶ)



-------------------------------------------------------------------------------
上記はツールバーからボタンを作成しマクロ登録ですが、 マクロでボタンを作成しマクロ登録は以下で出来ます。

Sub ボタン追加()
For Each zu In ActiveSheet.Shapes
    shname = zu.Name
    If InStr(1, shname, "Button", 1) > 0 Then
          zu.Delete
    End If
Next
        ActiveSheet.Buttons.Add(268.5, 1.5, 55.5, 15.25).Select
        Selection.OnAction = "load_np"
        Selection.Characters.Text = "株価ロード"
        Range("A1").Select
End Sub
上記マクロを1度実行すればシートに、「株価ロード」が出来ます。
なお、このマクロを何回も実行した場合同じ場所に重ねて同じボタンが出来るのを 防止する為、シートにありボタンを事前に全部削除を追加する方式にしてあります。


1-6. ショートカットメニューからマクロ実行


(2)マクロの登録
[1] 右クリックでショートカットメニューが表示される(左図側)
[2] "Webから株価ロード"が追加されているので、これをクリックでマクロ"load_np"を実行
[3] このマクロはブックを開いた時追加されます
[4] 通常のワークシートで表示のショートカットメニューであり、他のショートカットには追加されません




Private Sub Workbook_Open()
   ShortcutMenus(xlWorksheetCell).MenuItems.Add "-"
   ShortcutMenus(xlWorksheetCell).MenuItems.Add "Webから株価ロード", "load_np"
End Sub
上記のAdd "-"で区切り線が入ります


1-7. 自作のツールバーからマクロ実行
自作のツールバーからマクロ実行は、マクロに合ったアイコンの場合絵で実行内容が判る利点があります。
ここでは下図のようなコマンドバーの作成しマクロを割り当てる方法を説明します。

Private Sub Workbook_Open()  
  Dim cb As CommandBar

On Error Resume Next          '[1]
    CommandBars("mycb").Delete
On Error GoTo 0

Set cb = Application.CommandBars.Add(Name:="mycb", temporary:=True)  '[2]
    With cb
        .Visible = True                  '[3]
        .Position = msoBarTop            '[4]
    End With

Set cb1 = cb.Controls.Add(Type:=msoControlButton, before:=1)
   With cb1
        .Caption = "Webからロード"       '[5]
        .FaceId = 3021                   '[6]
        .OnAction = "load_np"            '[7]
   End With
Set cb2 = cb.Controls.Add(Type:=msoControlButton, before:=2)
   With cb2
        .BeginGroup = True                '[8]
        .Caption = "シート保護"
        .FaceId = 2041
        .OnAction = "シート保護"
   End With
Set cb3 = cb.Controls.Add(Type:=msoControlButton, before:=3)
   With cb3
        .Caption = "シート保護解除"
        .FaceId = 2042
        .OnAction = "保護解除"
   End With
End Sub
'-----------------------------------------------------------------------
Sub シート保護()
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    MsgBox "シートにプロテクトを掛けました"
End Sub
Sub 保護解除()
    ActiveSheet.Unprotect
    MsgBox "シートにプロテクトを解除しました"
End Sub

[1] .Delete →ツールバーは毎回作成の関係で前に作成分の削除が必要
[2] temporary:=True →Excel終了で本ツールバーは消える。
[3] .Visible = True → 自作のCommandBars名前"mycb"を表示
[4] .Position = msoBarTop → ツールバーをトップへ表示
[5] .Caption = "Webからロード" → マウスが来た時の説明文
[6] .FaceId = 3021 → 表示するアイコン番号(この指定方法は内臓のマクロは実行されない)
[7] .OnAction = "load_np"  → アイコンをクリックした時実行するマクロ
[8] .BeginGroup = True → ツールバーに区切りの縦線を入れる


1-8. 既存のメニューアイテムへ追加してマクロ実行
本例はワークシートメニューの「ツール」へ「Webからロード」を追加した例

Private Sub Workbook_Open()
Dim menu As CommandBar

Set menu = Application.CommandBars("Worksheet Menu Bar")
Set menu1 = menu.Controls("ツール(&T)")                                 '[1]

Set menu2 = menu1.Controls.Add(Type:=msoControlButton, Temporary:=True) '[2]
   With menu2
        .Caption = "Webからロード"
        .OnAction = "load_np"
   End With
End Sub

[2] 既存の「ツール」バーと指定
[2] temporary:=True → これがないとこのブックを開く度に追加されるので必ず入れる事。


1-9. メニューへ新規に追加してマクロ実行
本例はワークシートメニューへ自作の"株価ロード"メニューを追加した例

Private Sub Workbook_Open()
Dim menu1 As CommandBar
Dim menu2 As CommandBarControl

Set menu1 = Application.CommandBars("worksheet menu bar")        '[1]
Set menu2 = menu1.Controls.Add(Type:=msoControlPopup, Temporary:=True)   '[2]

menu2.Caption = "株価ロード"                      '[3]

With menu2
     .Controls.Add Type:=msoControlButton  
   With .Controls(1)
        .Caption = "株価ロード"                    '[4]
        .OnAction = "load_np"                      '[5]
   End With
 
' サブメニュー追加
    .Controls.Add Type:=msoControlPopup            '[6]
   With .Controls(2)
        .Caption = "その他"
        
        .Controls.Add Type:=msoControlButton
        .Controls(1).Caption = "シート保護"
        .Controls(1).OnAction = "シート保護"
        
        .Controls.Add Type:=msoControlButton
        .Controls(2).Caption = "シート保護解除"
        .Controls(2).OnAction = "保護解除"
   End With
 End With
End Sub

Sub シート保護()
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    MsgBox "シートにプロテクトを掛けました"
End Sub
Sub 保護解除()
    ActiveSheet.Unprotect
    MsgBox "シートにプロテクトを解除しました"
End Sub
[1] コマンドバーは"worksheet menu bar"を指定
[2] temporary:=True →Excel終了で本ツールバーは消える。
[3] 追加したメニューバーのタイトル"株価ロード"
[4] 追加したメニューバーのタイトル.Caption = "株価ロード"
[5] .OnAction = "load_np" → 実行するマクロ
[6] サブメニューは、Type:=msoControlPopup で指定



【戻る】