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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
Excel UserForm の表示位置
Visual Basic(VBA)
-
【VBAユーザーフォームで閉じるボタンを表示したくない】
Visual Basic(VBA)
-
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
-
4
UserForm
Visual Basic(VBA)
-
5
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
6
エクセルシート上のマウスポインタ座標の取得
Excel(エクセル)
-
7
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
8
Excel VBA:フォーム←→セルのアクティブ切り替え
Excel(エクセル)
-
9
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
10
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
11
コンボボックス内の文字サイズ変更
Excel(エクセル)
-
12
Excel VBAで、ユーザーフォームをモードレス表示している間、処理を止めるには?
Visual Basic(VBA)
-
13
GetAttrが原因?
Visual Basic(VBA)
-
14
セルにカーソルを合わせると文字を表示させるVBA
Excel(エクセル)
-
15
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
16
エクセル vba クリック~離した位置へ直線の挿入
Visual Basic(VBA)
-
17
グラフのX,Y座標を取得したい
Excel(エクセル)
-
18
VBAのリストボックスをマウスでスクロール
PowerPoint(パワーポイント)
-
19
'ユーザーフォーム右上隅の[×]ボタンを表示しない
Visual Basic(VBA)
-
20
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル 足して割る
-
対象セル内(複数)が埋まった...
-
エクセルで指定したセルのどれ...
-
【エクセル】IF関数 Aまたは...
-
貼り付けで複数セルに貼り付けたい
-
エクセルvba (ByVal Targ...
-
EXCEL VBA セルに既に入...
-
セルの高さ(行高)を求めるには?
-
(EXCEL)一行おきのCOUNTA
-
セルをクリック⇒そのセルに入力...
-
excelのCOUNTIF関数で、『範囲=...
-
VBAで特定の文字が入力されたセ...
-
月毎に参照するセルを変更したい。
-
【Excel】 セルの色での判断は...
-
エクセルで太字だけの合計を出...
-
エクセル オートフィルタで絞...
-
セルに特定の色が付いていたら...
-
エクセルのセルの枠を超えて文...
-
エクセルで第2、第4土曜日を抽...
-
Excel VBAで、行の高さを、上下...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで指定したセルのどれ...
-
【エクセル】IF関数 Aまたは...
-
貼り付けで複数セルに貼り付けたい
-
対象セル内(複数)が埋まった...
-
Excelで数式内の文字色を一部だ...
-
セルをクリック⇒そのセルに入力...
-
Excelでのコメント表示位置
-
エクセル 足して割る
-
excelのCOUNTIF関数で、『範囲=...
-
EXCEL VBA セルに既に入...
-
エクセル オートフィルタで絞...
-
エクセルのセルの枠を超えて文...
-
(Excel)数字記入セルの数値の後...
-
エクセルの一つのセルに複数の...
-
【Excel】 セルの色での判断は...
-
Excel2003 の『コメント』の編...
-
エクセル “13ヶ月”を“1年1ヶ月...
-
複数のセルのいずれかに数字が...
-
枠に収まらない文字を非表示に...
-
excelの特定のセルの隣のセル指...
おすすめ情報