私ははるかに岩場の状況で戻ってきました。
私は誰もがそれを選択できるということを意味する「クリックスルー」という形を作る必要があり、その背面のセルを選択することができます。
だから私は右のセルを返し、その関数の下に書いたシェイプ/オブジェクトの背面にあるセルを選択するにはどうすればいいですか?
Function ShapeOnClick() As Excel.Range
'Created by HvSum
Dim Rng As Range, DShape As Shape
Dim X As Long, Y As Long, Zoom As Byte
Zoom = Int(ActiveWindow.Zoom)
With ActiveSheet
X = 0.75 * (MouseX() - Split(getCellLocation(.Range("A1")), ",")(0))
If ActiveWindow.SplitColumn > 0 Then X = X - .Columns(ActiveWindow.SplitColumn + 1).left
Y = 0.75 * (MouseY() - Split(getCellLocation(.Range("A1")), ",")(1))
If ActiveWindow.SplitRow > 0 Then Y = Y - .Rows(ActiveWindow.SplitRow + 1).top
x = x/Zoom * 100
y = y/Zoom * 100
Set DShape = .Shapes.AddShape(msoLine, X, Y, 1, 1)
End With
With DShape
.Visible = msoTrue
Set Rng = .TopLeftCell
.Delete
End With
Set ShapeOnClick = Rng
End Function
説明: するmouseX、mouseYのは、API呼び出しからマウスの位置を取得する機能です。
Getcelllocationは、ActiveWindow.PointsToScreenPixelsXとActiveWindow.PointsToScreenPixelsYを使用して、使用可能な画面の最初のセルの点を画面上のX、Y座標に変換するX、Y座標を取得する関数です。
0.75はピクセルとポイント(オフィス)間の変換レートとしての通常のconst使用です。
すべてが、私はその瞬間からパネル(スプリット行/スプリット列) を凍結してテストするまで、すべての近くのセルにつながる、なかれ間違った形状をクリックしてください...
誰が何を指摘することができ非常にうまく機能します間違っている ?
+1しかし、私はより簡単で信頼性の高い方法がなければならないように感じる。多分、http://superuser.com/questions/802479/how-can-i-trigger-an-excel-macro-by-hovering-a-mouse-over-a-cellのコメントからのリンク - http: /optionexplicitvba.blogspot.com/2012/06/period-table-of-elements-in-excel.html – Slai
@Slai:私は自分の解決策を書く前にその記事を読んでいました。ハイパーリンク()機能とロールオーバー機能しかないトリック細胞の上にチャートや形のようなオブジェクトがないとき。あなたが形状の背後でクリック/オーバーしたセルを知る必要がある場合、それらのテクニックは機能しません。私はそれを行うための短い方法がないと確信しています。 btw、私のコードは、私がプロジェクトでハイライトセルとして使用したので、非常に信頼性が高いです。 – Sum