[[20110909232458]] 『マクロの使い方』(石美祢) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロの使い方』(石美祢)
Win7/Excell 2010
自分でいくつかマクロを作成しました。
良く使うマクロは、ショートカットを登録して実行していますが、
月1回とか、週1回使うマクロは「マクロの表示」から呼び出して使っています。

ただ、この呼び出しが面倒です。よく使うマクロを上の方に持ってくるとかでき
ないため、名前の先頭を少しずつ変えて、よく使うものを上の方に登録しています。

ボタンの登録でもいいのですが、何種類もあるとどのアイコンがどのマクロという
のが覚えられません。

いっそのこと、クイックアクセスツールバーに、自分で登録したマクロを
追加できないかと思いましたが、このようなことはできますか?


 そこまで名前がわかっていれば、検索でいろいろと実装例が見つかりますよ。
http://officetanaka.net/excel/excel2007/044.htm
 (Mook)

クイックアクセスツールバーだと思っていたところが、クイックアクセスツールバーではないようです。
「ホーム」「挿入」とかが並んでいるところ(=リボン?)に、自分が作ったマクロのを、好きな順番に上から登録するようなことはできますか。
例えば、「自作マクロ」というタブを作って、マクロを登録する方法はありますか?
(石美祢)

 エクセルの機能を活用という観点でメニューに登録するという方法も、確かにあるけれど、
マクロブックを他のPCで動かすなんてことがあるとやっかいな面もでてくる。

 たとえばユーザーフォームを用意して、そこにプロシジャの数だけコマンドボタンを配置する。
ボタンのキャプションにどのマクロかわかるような文言をいれておく。
順序も任意になるし、必要ならコメントなどもラベルに書き込んでおいたりControlTipTextに書いておいて
マウスを当ててポップアップさせることもできる、等々、融通性がメニュー登録より増す。

 で、このユーザーフォームをShowするプロシジャをショートカット登録しておいて表示させるなり
ブックのOpenイベントで走らせるなり。

 サンプル

 標準モジュール (ブックの WOrkbook_Openプロシジャでもいい)

 Sub ShowForm()
    UserForm1.Show
 End Sub

 ユーザーフォームモジュール

 Private Sub CommandButton1_Click()
    LinkProc "マクロ名"
 End Sub

 Private Sub CommandButton2_Click()
    LinkProc "マクロ名"
 End Sub

 Private Sub CommandButton3_Click()
    LinkProc "マクロ名"
 End Sub

 Private Sub LinkProc(pName As String)
    Me.Hide
    Application.Run pName
    Me.Show
 End Sub

 (ぶらっと)

ぶらっと様
ユーザーフォームは初トライでしたが、
上のアドバイスを参考に何とかできました。
本当にありがとうございました^^
(石美祢)

ぶらっと様

同じファイル上に登録したマクロを、コマンドボタンに登録する場合はうまくいきますが、
他のファイル上に登録したマクロを、登録した場合はどのように書けばいいのでしょうか。
さらに、他のファイルの名前が変わるので、次のようなコードを書きましたが(よくわからずに書きました。。。)、

Private Sub CommandButton15_Click()

    Dim WB As String
    WB = ActiveWorkbook.Name
    LinkProc "WB!マクロ名"
End Sub

実行時エラー1004
Runメソッドは失敗しました、Application オブジェクト

が表示され、デバッグを押すと、「Application.Run pName」が黄色でハイライトされてしまいます。
(石美祢)


 それでは、まずLinkProc を
Private Sub LinkProc(pName As String, Optional wbn As Variant)
    Me.Hide
    If IsMissing(wbn) Then
        Application.Run pName
    Else
        Application.Run wbn & "!" & pName
    End If
    Me.Show
 End Sub

 で、自ブックマクロは、今まで通りの記述。
 別ブックマクロなら(その別ブックが開かれているという前提で)
Private Sub CommandButton15_Click()
    LinkProc "マクロ名","別ブッック名" '別ブック名は拡張子付き
End Sub

 ところで、この構成は、マクロ実行がおわれば自動的にフォームが再表示される。
便利といえば便利だけど、フォームがモーダル表示されるので、フォーム表示中はブックをさわれない。
これが具合悪ければ、一番簡単な方法としては、LinkProcの最後の Me.SHow をけす。
で、必要なら、再度SHowFormを実行する。

 (ぶらっと)

ぶらっと様

ありがとうございました。うまくいきました。

フォームがモーダル表示されるので、フォーム表示中はブックをさわれない

Showのあとに、vbModelessと書いてもいいですね。

大変勉強になりました。
(石美祢)


 >Showのあとに、vbModelessと書いてもいいですね。

 でもいいね。
 本格的にフォームをモードレス表示にして本件対応する構成にもできる。すこし「技」が必要になるけど。

 追記)「技」をつかっても、本件の役にはたたないということに気がついたので
    ↑のコメントは忘れてください。

 (ぶらっと)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.