
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
このQ&Aを見た人はこんなQ&Aも見ています
-
ExcelVBAでセルをクリックしてユーザーフォームを表示するには
Excel(エクセル)
-
セルにカーソルを合わせると文字を表示させるVBA
Excel(エクセル)
-
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
-
-
4
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
5
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
6
Excel UserForm の表示位置
Visual Basic(VBA)
-
7
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
8
UserForm
Visual Basic(VBA)
-
9
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
10
2画面表示でのVBAのボタン押下後のform表示の位置
Excel(エクセル)
-
11
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
12
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
-
13
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
14
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
15
エクセルのマクロで印刷プレビューを閉じる方法
Excel(エクセル)
-
16
エクセルでオブジェクトを常に表記する
Excel(エクセル)
-
17
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
18
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
19
特定のセルがアクティブになったときのイベント?
Excel(エクセル)
-
20
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vba テキストボックスとリフト...
-
エクセルで指定したセルのどれ...
-
貼り付けで複数セルに貼り付けたい
-
枠に収まらない文字を非表示に...
-
エクセル オートフィルタで絞...
-
(Excel)数字記入セルの数値の後...
-
Excelでのコメント表示位置
-
セルをクリック⇒そのセルに入力...
-
エクセルのセルの枠を超えて文...
-
対象セル内(複数)が埋まった...
-
excelの特定のセルの隣のセル指...
-
エクセルの一つのセルに複数の...
-
EXCELのセルの中の半角カンマの...
-
Excel 例A(1+9) のように番地の...
-
Excel2003 の『コメント』の編...
-
EXCEL VBA セルに既に入...
-
Excelで数式内の文字色を一部だ...
-
エクセルの書式設定の表示形式...
-
数式を残したまま、別のセルに...
-
エクセル セルの中に縦線が入っ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
スプレッドシートで複数のプル...
-
excelで日付関数の文字列変換の...
-
エクセルで指定したセルのどれ...
-
貼り付けで複数セルに貼り付けたい
-
枠に収まらない文字を非表示に...
-
セルをクリック⇒そのセルに入力...
-
エクセルの一つのセルに複数の...
-
数式を残したまま、別のセルに...
-
(Excel)数字記入セルの数値の後...
-
Excel 例A(1+9) のように番地の...
-
対象セル内(複数)が埋まった...
-
エクセルの書式設定の表示形式...
-
EXCEL VBA セルに既に入...
-
excelの特定のセルの隣のセル指...
-
エクセルのセルの枠を超えて文...
-
Excelでのコメント表示位置
-
エクセル オートフィルタで絞...
-
Excelで数式内の文字色を一部だ...
おすすめ情報