作成日 2004/8/1
最終更新日 2005/10/22

マウスダウンイベント等でバグがある(マウスの座標が正しく取得できない)

Microsoft Excel X for Mac のエクセルVBAではマウスダウンイベント等でマウスの座標が正しく取得できないバグがあります。
このバグはMicrosoft社のホームページで紹介されています。
 ここ をクリックするとMicrosoft社のホームページの、このバグについてのページにとびます(別ウインドウが開きます)

で、ここでは、だるまが考えた代替措置を紹介します。
考え方:MacのAPI(Application Program Interface)を呼び出す。

1.バグの詳細
2.代替措置のプログラムと説明
3.代替措置の欠点
4.参考文献

1.バグの詳細

 MouseMoveMouseUpMouseDown イベントで、マウスポインタの座標が正しく取得できないバグです。
 下はMouseMoveイベントを使って、マウスポインタがある座標(フォームの左上が原点)を表示させてみたものです。
 やり方:新規に作ったUserformLabel1Label2 を貼付け、図にあるようにコードを入力した。
Excel X for Macの場合、マウスの座標を正しく取得できない。
実行中の画面(上)とソース(下)
x座標が0〜3.8、y座標が0のままで、
マウスの座標が正しく取得されていない。
このページのトップへ

2.代替措置のプログラムと説明

 と、いうことで仕方ないので、下の表のMacのAPIを使って座標を取得します。
APIの名前
説明
GetMouse
カレントグラフポートのローカル座標が得られる
LocalToGlobal
ローカル座標をグローバル座標に変換する

やり方:
新規にUserformをつくり、そこにLabel1Label2を貼付けた。
Userformに以下のコードを入力した。
Private Type Point
    y As Integer
    x As Integer
End Type

Private Declare Sub GetMouse CDecl Lib "CarbonLib" (ByRef aa As Point)
Private Declare Sub LocalToGlobal CDecl Lib "CarbonLib" (ByRef aa As Point)

Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
    Dim point1 As Point

    Call GetMouse(point1)
    Call LocalToGlobal(point1)
    x = point1.x - UserForm1.Left
    y = point1.y - UserForm1.Top - 22
       
    Label1.Caption = "x:" + Format(x)
    Label2.Caption = "y:" + Format(y)
End Sub
で、結果はこんな感じ。
APIを使ってマウスポインタの座標を取得したときの実行結果
APIを使ってマウスポインタの座標を取得したときの実行結果

 このプログラムをMacのときだけ実行するには#If Then #End Ifを使えばなんとかなる。あと、エクセルのバージョンがXとときだけ実行するようにするにはapplication.versionとIf文を使えば多分なんとかなる。
このページのトップへ

3.代替措置の欠点

 Userformじゃなくて、他のコントロールのMouseMoveでマウスポインタの座標を取得したい場合、面倒くさい。
このページのトップへ

4.参考文献

 新居雅行『Macintoshアプリケーションプログラミング〈上巻〉』 ディー・アート (1995)

Prev Up Next  Top
このページのトップへ

このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方はメールをお願いします。

Microsoft 、Windows 、Visual Basic および Excel は米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
ここではExcel® をエクセル、Visual Basic® for Applications をVBAと表記する場合があります。
Mac 、Mac OS 、Mac OS X は米国Apple Computer,Inc.の登録商標または商標です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。

このホームページの作成者はこれらの会社とはいっさい関係がありません。