図形を座標を指定して配置したいんだけどぉ?
座標を表示するコードをご紹介しますね
「任意の図形がある座標は?」「大体この辺りの座標っていくつになる?」とかそんなこと知りたい時もありませんか?そんなときに便利な、リアルタイムで座標を表示できるサンプルプログラムをご紹介します!で今日初めてVBAを開いた方でもコピペでできるのでぜひ使ってみて下さい。
ページ内の座標をテキストボックスに表示します!
こちらで紹介するのはマウスがある場所の座標を、設置してあるテキストボックスに表示するプログラムです。
使い方は「保存」を押す(不要でも押す)だけ!
マウスを動かしてみると表示がかわるはずです。
クラスモジュールを開く
VBAを開くところまではこちら↓↓↓を参照下さい。
まずクラスモジュールを挿入
①下の画面左側、プロジェクトエクスプローラーの上で右クリックします。
②出てきたメニューの中から挿入を選びます。
③クラスモジュールを選びます。
そうするとクラスモジュールのフォルダ+モジュールが追加されます。
④クラスモジュールの名前は「Class1」になっていると思います。Class1をクリックします。
⑤プロパティが表示されるので、オブジェクト名を変更します。
今回は「MouseListener」とします。
※スペースとか入っていると設定できないので注意
標準モジュールと同じようにダブルクリックするとエディターが開く(右側の緑の枠)ので、ここにコードを書きます。
次にテキストボックスを配置
次に座標を表示させるテキストボックスを配置しましょう。
同じようにラベルも表示できるので「X: Y: 」としておきましょう。
①開発タブの挿入(ツールボックス)をクリックします。
②テキストボックスを選びます。
③自動的にページ上に作成されるので自分の好きな位置に配置しましょう。
ちなみにテキストボックスのオブジェクト名前は初期値がTextBox1,2,3の連番です。名前を変える時はメニューの中のコントロールプロパティをクリックするとオブジェクト名や、フォントを設定できます。
Sample Code
クラスモジュールに書くコード
クラスモジュールに以下のコードを入れます。
WithEventsでイベントを作成する感じになります
Dim WithEvents vsoWindow As Visio.Window
Private Sub Class_Initialize()
Set vsoWindow = ActiveWindow
End Sub
Private Sub Class_Terminate()
Set vsoWindow = Nothing
End Sub
Private Sub vsoWindow_MouseMove(ByVal Button As Long, ByVal KeyButtonState As Long, ByVal x As Double, ByVal y As Double, CancelDefault As Boolean)
ThisDocument.TextBox1.Text = x
ThisDocument.TextBox2.Text = y
End Sub
内容的にはアクティブウィンドウの上を動いたマウスの座標を、先ほどページに配置したTextBox1とTextBox2に表示させるというものです。
ThisDocumentに書くコード
クラスモジュールの上の方に「ThisDocument」というノート📄のマークのついたモジュールがあると思います。このThisDocumentに以下のコードを書いていきます。
Dim myMouseListener As MouseListener
Private Sub Document_DocumentSaved(ByVal doc As IVDocument)
Set myMouseListener = New MouseListener
End Sub
Private Sub Document_BeforeDocumentClose(ByVal doc As IVDocument)
Set myMouseListener = Nothing
End Sub
保存したときにクラスを読み込み、閉じたら離すというだけの内容です。
なので保存したらすぐに動き出します!!
結果
マウスを動かすとリアルタイムで、XとYに座標が表示されると思います。
これこれ~~~
クラスモジュールに書いたvsoWindow_MouseMoveのところを、
MouseDownにすればマウスを押し下げた時
MouseUpにすればマウスを離した時に表示されるようにもなるよ!
_MouseMove/_MouseDown/_MouseUpのイベント、いろいろ便利なので使ってみて下さいね!