
Worksheet_BeforeDoubleClick内でダブルクリックされたセルのすぐ近くに(例えば右側)ユーザーフォームを表示したいのですが、なかなかうまく行きません。
ネット上の情報を参考に、以下のようなコードを書いたのですが、画面右下に行くほど誤差が出てしまいます...座標系の考え方が間違っている?
どのような解像度のスクリーン環境でも、どのようなエクセルの画面サイズでも(全画面でも任意サイズでも)とにかくダブルクリックしたセルのすぐ近くに表示したいです。
よろしくお願いします。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim l_baseLeft As Long
Dim l_baseTop As Long
Dim l_selectLeft As Long
Dim l_selectTop As Long
Const DPI As Long = 96
Const PPI As Long = 72
l_baseLeft = ActiveWindow.PointsToScreenPixelsX(0)
l_baseTop = ActiveWindow.PointsToScreenPixelsY(0)
l_selectLeft = ((Selection.Left * DPI / PPI) * (ActiveWindow.Zoom / 100)) + l_baseLeft
l_selectTop = ((Selection.Top * DPI / PPI) * (ActiveWindow.Zoom / 100)) + l_baseTop
With UserForm1
.StartUpPosition = 0
.Top = l_selectTop
.Left = l_selectLeft
.Show
End With
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
ぁ。
正確なセル位置に拘らず、マウスカーソル位置基準で構わないなら、winAPI GetCursorPos関数を使って、比較的素直なアプローチができます。
'Sheet Module
Option Explicit
Private Declare Function GetDC Lib "user32.dll" ( _
ByVal hwnd As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32.dll" ( _
ByVal hdc As Long, _
ByVal nIndex As Long) As Long
Private Declare Function ReleaseDC Lib "user32.dll" ( _
ByVal hwnd As Long, _
ByVal hdc As Long) As Long
Private Declare Function GetCursorPos Lib "user32.dll" ( _
ByRef lpPoint As POINTAPI) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Const LOGPIXELSX As Long = 88
Const LOGPIXELSY As Long = 90
Const mgn As Long = 10
Const ppi As Long = 72
Dim MoP As POINTAPI
Dim hdc As Long
Dim px As Long
Dim py As Long
On Error GoTo ErrHandler
Cancel = True
hdc = GetDC(0&)
px = GetDeviceCaps(hdc, LOGPIXELSX)
py = GetDeviceCaps(hdc, LOGPIXELSY)
ReleaseDC 0&, hdc
hdc = 0
Call GetCursorPos(MoP)
With UserForm1
.StartUpPosition = 0
.Left = MoP.x * ppi / px + mgn
.Top = MoP.y * ppi / py + mgn
.Show
End With
Exit Sub
ErrHandler:
If hdc <> 0 Then ReleaseDC 0&, hdc
MsgBox Err().Number & ":" & Err().Description
End Sub
No.2
- 回答日時:
http://excelfactory.net/excelboard/excelvba/cfs. …
PointsToScreenPixelsX/YとZoomを使って変換する方式は意外とややこしいです。
Zoomにはどうも誤差があるようだし、FreezePanesプロパティの状態も考慮しなければなりません。
http://hp.vector.co.jp/authors/VA016119/index.html
└Excel 関係の仕事 ⇒
└Personal.xls
└CellScreenPos
ここに CellScreenPos というFunctionが公開されてますから、参考にさせてもらうと良いですよ。
No.1
- 回答日時:
こちらのやり取りが参考になると思います
基本的にはセルの座標を取得してという感じです。
ユーザーフォーム表示位置について
http://hpcgi1.nifty.com/kenzo30/b_cbbs/cbbs.cgi? …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
セルにカーソルを合わせると文字を表示させるVBA
Excel(エクセル)
-
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
-
4
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
5
Excel UserForm の表示位置
Visual Basic(VBA)
-
6
2画面表示でのVBAのボタン押下後のform表示の位置
Excel(エクセル)
-
7
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
8
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
9
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
-
10
エクセルのマクロで印刷プレビューを閉じる方法
Excel(エクセル)
-
11
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
-
12
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
13
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
14
特定のセルがアクティブになったときのイベント?
Excel(エクセル)
-
15
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
16
【エクセル】シート内の表をUserFormに画像として表示させる方法
Excel(エクセル)
-
17
UserForm
Visual Basic(VBA)
-
18
ユーザーフォームのテキストボックスに前回入力した値を表示する Excel
Visual Basic(VBA)
-
19
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
20
Openイベントを開始させないでエクセルを開く方法を教えて下さい
Windows 10
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel 例A(1+9) のように番地の...
-
EXCEL VBA セルに既に入...
-
セルをクリック⇒そのセルに入力...
-
エクセルで指定したセルのどれ...
-
vba テキストボックスとリフト...
-
【エクセル】IF関数 Aまたは...
-
エクセル オートフィルタで絞...
-
貼り付けで複数セルに貼り付けたい
-
枠に収まらない文字を非表示に...
-
エクセルのセルの枠を超えて文...
-
Excel for Mac使用中ポインタが...
-
excelの特定のセルの隣のセル指...
-
数式を残したまま、別のセルに...
-
Excelで住所を2つ(町名迄と番...
-
ハイパーリンクの参照セルのズ...
-
【Excel】 セルの色での判断は...
-
(Excel)数字記入セルの数値の後...
-
エクセルでオブジェクトを常に...
-
エクセルで住所と建物名を分け...
-
エクセル 足して割る
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vba テキストボックスとリフト...
-
貼り付けで複数セルに貼り付けたい
-
エクセルで指定したセルのどれ...
-
枠に収まらない文字を非表示に...
-
セルをクリック⇒そのセルに入力...
-
エクセル
-
数式を残したまま、別のセルに...
-
(Excel)数字記入セルの数値の後...
-
エクセル オートフィルタで絞...
-
エクセルの書式設定の表示形式...
-
Excel 例A(1+9) のように番地の...
-
エクセルの一つのセルに複数の...
-
excelの特定のセルの隣のセル指...
-
EXCEL VBA セルに既に入...
-
Excelでのコメント表示位置
-
エクセルのセルの枠を超えて文...
-
【エクセル】IF関数 Aまたは...
-
対象セル内(複数)が埋まった...
-
Excelで数式内の文字色を一部だ...
-
【Excel】 セルの色での判断は...
おすすめ情報