MENU  □ MANUAL  □ 新着記事  □ 新規トピック追加  □ トピック一覧  □ SEARCH  □ 過去ログ
ログ内検索
・ キーワードを複数指定する場合は 半角スペース で区切ってください。
・ 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
・ 過去ログから探す場合は過去ログをチェック。
・ 過去ログは番号が大きいほど新しいログです。

キーワード/
検索条件/ (AND) (OR)
検索範囲(現在のログ)
(過去ログ1) (過去ログ2) (過去ログ3) (過去ログ4) (過去ログ5)
(過去ログ6) (過去ログ7) (過去ログ8) (過去ログ9) (過去ログ10)
(過去ログ11) (過去ログ12) (過去ログ13) (過去ログ14) (過去ログ15)
(過去ログ16) (過去ログ17) (過去ログ18) (過去ログ19) (過去ログ20)
(過去ログ21) (過去ログ22) (過去ログ23) (過去ログ24) (過去ログ25)
(過去ログ26) (過去ログ27) (過去ログ28) (過去ログ29) (過去ログ30)
(過去ログ31) (過去ログ32) (過去ログ33) (過去ログ34) (過去ログ35)

過去ログ12 を検索

HIT数 / 7件
NO.98419  分割さらた画面でのUserFormの位置指定
■投稿者/ Rocker
■投稿日/ 2007/06/15(Fri) 04:46:28
□URL/


お世話になります。過去何度かUserFormを指定セル位置に表示する方法について質問
させていただきました。
おかげさまで、以前、藤代千尋にいただいたコードを利用させていただき画面分割され
てない状態では正確にUserFormをActiveCell上に表示できるようになりました。
ありがとうござました。

<以前の問い合わせ>
http://excelfactory.net/excelboard/excelvba/cfs.cgi?word=96234&andor=and&logs=50.txt

ところが、当初より聞いてはいたのですが、画面分割状態ではうまく機能しません。
下記がいただいたコードをちょこっと変更してActiveCellにUserFormを
表示するコードです。

ActiveWindow_PointToScreenPixelX(また..Y)ルーチンのPoint座標をPixcel座標
に変換する部分の"With ActiveWindow" の部分を分割Windowの番号、Windows(1)とか
Windows(2)とかに変更することによってうまくできるのか・・とトライしてみましたが
うまく行きません。(そもそもこのロジックを正確に理解できていない・・トホホ)
なのですが・・・ 藤原さんには以前もよーく解説していただいたのですが・・・

●質問

1.Point→Pixcel座標変換は分割画面ではどうあがいても出来ない宿命なのでしょうか。

2.もし方法があるならば、アドバイスいただけないでしょうか。(できれば
下記のコードに手直しをしていただければ幸いです。)







Option Explicit

Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Private Const LOGPIXELSX = 88
Private Const LOGPIXELSY = 90
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long

'' テスト用プロシージャのための宣言。
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Sub Set_UserForm()

With UserForm1
.StartUpPosition = 0
.Left = ActiveWindow_PointToScreenPixelX(ActiveCell.Left)
.Top = ActiveWindow_PointToScreenPixelY(ActiveCell.Top)
.Show
End With

End Sub

Private Function Screen_DPIX() As Long
Dim hWnd As Long
Dim hdc As Long

hWnd = GetDesktopWindow()
hdc = GetDC(hWnd)
Screen_DPIX = GetDeviceCaps(hdc, LOGPIXELSX)
End Function

Private Function Screen_DPIY() As Long
Dim hWnd As Long
Dim hdc As Long

hWnd = GetDesktopWindow()
hdc = GetDC(hWnd)
Screen_DPIY = GetDeviceCaps(hdc, LOGPIXELSY)
End Function

Public Function ActiveWindow_PointToScreenPixelX(ByVal XPoint As Single) As Single
With ActiveWindow
ActiveWindow_PointToScreenPixelX = (.PointsToScreenPixelsX(0) + XPoint * (Screen_DPIX / 72) * (.Zoom / 100)) * 72 / Screen_DPIX ' * (1440 / Screen_DPIX)
End With
End Function

Public Function ActiveWindow_PointToScreenPixelY(ByVal YPoint As Single) As Single
With ActiveWindow
ActiveWindow_PointToScreenPixelY = (.PointsToScreenPixelsY(0) + YPoint * (Screen_DPIY / 72) * (.Zoom / 100)) * 72 / Screen_DPIY ' * (1440 / Screen_DPIY)
End With
End Function


この記事にはVBAのコードが含まれています。

緑の太文字→注釈
茶色の太文字→条件分岐
赤の太文字→ループ
青の太文字→その他



++++++++++++++++++++
OS      ⇒Windows 2000
Version⇒Excel 2000
++++++++++++++++++++
親記事
削除チェック/

NO.98423  Re[1]: 分割さらた画面でのUserFormの位置指定
■投稿者/ 藤代千尋
■投稿日/ 2007/06/15(Fri) 10:44:32
□URL/

> 1.Point→Pixcel座標変換は分割画面ではどうあがいても出来ない宿命なのでしょうか。

そうなります。(v_v)

あと、まだ勘違いされているようなので説明しますが、セルの位置と、ユーザーフォームの位置は、どらちも単位はポイントです。

座標の原点が違うだけです。

セル:A1 の左上
ユーザーフォーム:スクリーンの左上

まあ、単位変換が無くても、座標原点の変換は必要になる訳です。

で、それを実行してくれるのが PointsToScreenPixelsX/Y なのですが、この親は Window です。分解画面では、各分割が、Window.Panes(?) になります。

もし、各分割画面で座標原点の変換をしようと思ったら、Pane.PointsToScreenPixelsX/Y と出来る必要がありますが、これが出来ません。

よって、「出来ない」となります。

なんとか出来ないかと考えると、左上ペインから、各ペインまでの距離が分かればいい訳ですが、Pane オブジェクトは幅も高さも持ちません(表示されているセルの大まかな領域しか取れない)。さらに、ペインの間にある隙間の部分がどうやっても情報が取れません。

ということで、少なくても私には解決する方法が思いつきません。(^^;)
記事NO.98419 のレス /
削除チェック/

NO.98427  Re[2]: 分割さらた画面でのUserFormの位置指定
■投稿者/ Ned
■投稿日/ 2007/06/15(Fri) 11:30:30
□URL/

こんにちは。
2回もリンク貼って紹介しているのに、なぜに見て頂けないのでしょうか?
http://hp.vector.co.jp/authors/VA016119/index.html
(芳坂氏のホームページ > Excel 関係の仕事 ⇒ My Personal.xls > CellScreenPos)
http://hp.vector.co.jp/authors/VA016119/excel/cellpos.txt
(3回目なので直接リンク貼らせて頂きます。ごめんなさい)
↑ここでコメントアウトされてる Sub Test_CellScreenPos_2()。
サンプルコードはあるわけですから、あとはステップ実行とローカルウィンドウでの変数確認で
自分で理解していかないと。


あと、小言みたいなもんなので気を悪くしないで読んでほしいのですが
>藤代千尋にいただいた
>藤原さん
焦らず、もうちょっと注意深くなさったほうがよろしいかと。
印象を悪くしますよ?


この記事にはVBAのコードが含まれています。

緑の太文字→注釈
茶色の太文字→条件分岐
赤の太文字→ループ
青の太文字→その他
記事NO.98419 のレス /
削除チェック/

NO.98431  Re[3]: 分割さらた画面でのUserFormの位置指定
■投稿者/ Rocker
■投稿日/ 2007/06/15(Fri) 12:35:23
□URL/

藤代千尋さん、Nedさん、いつもいつもお手数をおけします。まったく理解が悪くてすみません。

藤代千尋さん、
>セルの位置と、ユーザーフォームの位置は、どらちも単位はポイントです。
>座標の原点が違うだけです。

まず、この点をちゃんと理解できていませんでした。Pixel座標ではない、という認識は
あったのですが、Pixelに加工したPointとは別の何か・・・と思っていました。
お名前を書き間違えた件、申し訳ありませんでした。

Nedさん、
何度も重要なご回答、アドバイスをいただきならば、十分わたくしが咀嚼できなくて、
同じことを何度も聞いているようですね・・・トホホの気分です。すみません。
実は Ahttp://hp.vector.co.jp/authors/VA016119/excel/cellpos.txt は見たので
すが、何をやろうとしているのか正直よくわからないんです。

コードも動かしてみましたが、範囲を指定して色づけが行われるのは理解できるのですが
その過程で一体何をしているのか、指定範囲を色づけするのになぜこのような
処理が必要なのか、まったく理解できていません。わたしがやろうとしていることが、
わたしの現在の知識レベルより数段上のことなんだ、ということよく自覚しました。
それでも、なんとか理解したいと思います。
できれば少しこのサンプルについて解説いただければありがいのですが・・

重ねて失礼をお詫び申し上げます。




記事NO.98419 のレス /
削除チェック/

NO.98433  Re[4]: 分割さらた画面でのUserFormの位置指定
■投稿者/ Rocker
■投稿日/ 2007/06/15(Fri) 12:57:23
□URL/

Nedさん、

まったくお恥ずかしい限りです。 前からいただいていてあのサンプルがそのままの回答なんですね・・やっと理解できました。
わたしは、色づけパネルを表示したとの色づけをする位置を制御するコードだとばかり
思っていましたが、色づけのパネルがわたしの質問でいうところのUserFormだというこ
となんですね。 確かに分割画面でもActiveCellのとこにピッタリ表示されるし、
ズームをしてもOKです。 完璧ですね。感動しました。

確かに何度もこのサンプルのリンクをいただいていていたのに理解できないばかりに
皆様に貴重な時間をとらせてしまいました。すみませんでした。

Nedさん、藤代千尋さん、ありがとうございました。
Pixcelとか、Pointとか全く理解していませんでしたが、すこしEXCEL VBAでの
領域が広がった気がします。





記事NO.98419 のレス / END
削除チェック/

NO.98432  Re[4]: 分割さらた画面でのUserFormの位置指定
■投稿者/ Ned
■投稿日/ 2007/06/15(Fri) 12:54:31
□URL/

ですので
>↑ここでコメントアウトされてる Sub Test_CellScreenPos_2()。
これを非コメントして、UserForm1があるBookで実行してみてください。
ActiveCellの右下コーナーにUserForm1を表示する、そのものずばりのコードです。
しかもZoom及び画面分割にも対応されています。

内容確認の時はステップ実行してください。
(例によって、VBEを全画面にしておくとPointToScreenPixelX/Yが機能しないですから
Excel側から[Alt]+[F8]で[ステップイン]実行がよろしいかと)

また、VBEで[Alt]キー → [v]キー → [s]キー 順押しで開く[ローカルウィンドウ]を表示させると、
変数の中味を確認しながらできるので、試してみてください。


この記事にはVBAのコードが含まれています。

緑の太文字→注釈
茶色の太文字→条件分岐
赤の太文字→ループ
青の太文字→その他
記事NO.98419 のレス /
削除チェック/

NO.98443  Re[5]: 分割さらた画面でのUserFormの位置指定
■投稿者/ 藤代千尋
■投稿日/ 2007/06/15(Fri) 14:17:52
□URL/

分割位置のプロパティがあったんですね。失礼しました。(^^;)
記事NO.98419 のレス /
削除チェック/


パスワード/

- Child SEARCH -