クリックした位置に図形を描く方法(クラス入門)

クリックした位置に図形を描く方法(クラス入門) VBA

吹き出し、Visioページのクリックしたところに、
ハンコみたいな感じで図形を描くマクロが欲しいんだ。

VBAのクリックイベントが使えるかな

え?クリック?イベント?

あ、イベントを全部理解する必要なんてないから安心して

Visioで図面を描いていると、「ここをクリックした位置に、同じ図形をポンポン置けたら楽なのに」と思うこと、ありませんか。今回はそんなハンコ感覚で使えるマクロを、VBAのイベントを使ってゆるっと紹介します。

図形の書き方はこちら

ハンコ感覚で使えるマクロ

やりたいことは、とてもシンプルです。

  • ページ上をクリック
  • クリックした位置に丸が出る

「ここクリック 👉 ポンっと図形が出る 🎈」

そして今回マクロを作るにあたって知っておきたい言葉がイベントクラスです。

・・・なんて言うと難しそうとと思いがちですが、安心してください。
👉 全部理解する必要はありません

イベントとかクラスとか…難しそう

大丈夫!イベントやクラスの全部を理解する必要はなくて
今回はここだけ分かればOK👇

✔ クリックされた  
✔ その場所が分かる 

ではいってみましょう!

イベントとは?

いつものマクロは、だいたいこんな流れですよね。
マクロを実行すると、処理が一気に走って、そのまま終わり。

でも今回は、
ユーザーがクリックするのを待ち、クリックされた瞬間に処理したい
という動きが必要になります。

この「待つ → 反応する」という処理は、普通の Sub マクロだけではできません。
と、そこで登場するのが イベント です。

イベントというのは、
「クリックされたよ」「ここが押されたよ」
といった起きた出来事を教えてくれる仕組み

Visioが「今なにが起きたか」を教えてくれる、合図みたいなものですね。

実際は 「クリックをお知らせする係を用意する」
くらいの感覚で大丈夫です 🖱️✨

じゃあ、クラスは何をしているの?

実はVisioのイベントは、
普通のマクロ(標準モジュール)では直接つかめません。

そこで登場するのが クラスモジュール

クラスは難しい仕組みというより、
👉 「イベントを受け取る専用の係」
くらいのイメージで大丈夫です。

  • ページがクリックされた
  • マウスが押された

こうしたイベントを
「お、今起きたね」とキャッチする役目をします。

ページをクリックする度に丸を描くコード

※ 少しコードが長く見えますが、
先に「動くもの」を貼って、あとでざっくり解説します。

① クラスモジュールを作る

クラスモジュールを1つ追加して、 名前を MouseListener にします。コード

Dim WithEvents vsoWindow As Visio.Window
 
Private Sub Class_Initialize()
 
   Set vsoWindow = ActiveWindow
 
End Sub
 
Private Sub Class_Terminate()
 
   Set vsoWindow = Nothing
 
End Sub

② ThisDocument に書くコード

次にThisDocumentにこんなコードを描きます。

Dim myMouseListener As MouseListener
Private WithEvents mywin As Visio.Window
  
Private Sub Document_BeforeDocumentClose(ByVal doc As IVDocument)
 
   Set myMouseListener = Nothing
 
End Sub

Sub DrawWin()

    Set mywin = ActiveWindow

End Sub

Private Sub mywin_MouseDown(ByVal Button As Long, ByVal KeyButtonState As Long, ByVal x As Double, ByVal y As Double, CancelDefault As Boolean)

    ActiveWindow.Page.DrawOval x, y, x - 0.2, y - 0.2

End Sub

実行結果

ページをクリックすると、そこに丸が描けると思います。

あとからざっくり解説

ここがクリック

Private Sub mywin_MouseDown(…)

ここが、 **「ページがクリックされた瞬間」**に呼ばれる場所です。

ここが座標

ByVal x As Double, ByVal y As Double

この x, y が、 クリックされた位置の座標です。

ここで図形を描いてる

ActiveWindow.Page.DrawOval x, y, x – 0.2, y – 0.2

クリック位置を基準にして、 小さな丸を描いています。

サイズを変えれば、 四角でも、もっと大きな図形でもOKです。

まとめ

ハンコマクロだ!
こんなのあったら嬉しい場面って結構あるかも

  • クリック位置に図形を描くには
  • 「待つ」処理が必要
  • そのためにクラスとイベントを使う

これができるようになると、 Visioの自動化が一気に楽しくなります✨
ハンコ感覚、ぜひ試してみてください。

タイトルとURLをコピーしました