![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
現在、パソコンで2画面表示で仕事をしています。フォームの表示位置を記憶させて前回、表示されていた場所と同じ位置に表示させるようにしています。通常は問題ないのですが、別のパソコンでエクセルのブックを使う場合に画面の枠外にフォームが表示されます。範囲を超える場合に表示位置を修正させたいのですが、画面の大きさを取得する方法が解りません。どなたか?詳しい方がいらっしゃいましたら教えて頂けないでしょうか?2画面のプライマリー、セカンダリなどの情報と、左右などの情報も取得できるのでしょうか?(もしかして?APIが関係しますか?)
あわせて、強制的に画面の範囲内で一番近い位置に表示させるような命令があるのでしょうか?
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
こんにちは。
KenKen_SP です。こういうことですか?
'標準モジュール
Declare Function SystemParametersInfo Lib "user32" _
Alias "SystemParametersInfoA" ( _
ByVal uAction As Long, _
ByVal uParam As Long, _
ByRef lpvParam As Any, _
ByVal fuWinIni As Long) As Long
'RECT構造体
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
'モニターの有効なスクリーンサイズを取得
Public Const SPI_GETWORKAREA = 48
Sub Sample()
Dim typRect As RECT
Call SystemParametersInfo(SPI_GETWORKAREA, 0, typRect, 0)
MsgBox "Screen Width :=" & typRect.Right & vbCrLf & _
"Screen Height:=" & typRect.Bottom
End Sub
この回答への補足
いつも、いつも本当に有難う御座います。
ご指導頂いた内容を完全に理解することは、もう少し時間がかかりそうですが、今作成中のマクロには即使えていつもながら感服いたします。私は、まだまだ、自動記録の拡張の域を脱していませんので、単にコピペをしたら動くようなマクロを組むことは出来ません。本当に、感激の限りです。
特に、私の質問の不備を汲んで、有効範囲の取得を教えて頂いたことなど、感謝の限りです。間違いなく、次の質問で、スタートバー?の幅を取得する方法を聞くことになっていたでしょう?本当に有難う御座います。今回の2つのご指導を踏まえがんばります。
今後ともよろしくお願いいたします。
有難う御座いました。
No.3
- 回答日時:
No.1のe10goです。
ディスプレイのウインドウサイズ取得方法がやっと解かったので、答えようと思ったら、もう他の人が答えてる^^;。
他にも方法があると言うことで、とりあえず解答します(笑)。
'-------標準モジュールのコード-------始まり
Option Explicit
Public Declare Function GetDesktopWindow Lib "USER32" () As Long
Public Declare Function GetWindowRect Lib "USER32" (ByVal hWnd As Long, lpRect As RECT) As Long
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Sub sub_WindouSize()
Dim Ret As Long
Dim nRect As RECT
Ret = GetDesktopWindow
Call GetWindowRect(Ret, nRect)
MsgBox "左上のx座標は" & nRect.Left & vbCrLf & _
"左上のy座標は" & nRect.Top & vbCrLf & _
"右下のx座標は" & nRect.Right & vbCrLf & _
"右下のy座標は" & nRect.Bottom
End Sub
'-------標準モジュールのコード-------終わり
この回答への補足
本当に、本当に有難う御座います。
単純にコピペするだけで、画面の表示の大きさが表示されました。
このマクロの中にも一杯まだ知らないことがありますので、自己研鑽に励みたいと思います。
特に、KenKen_SPさんのは、画面の有効範囲なのに対し、e10goさんのは、画面の大きさが表示されます。初心者にとってこのように微妙な違いを克服することは凄く困難なので、たとえ、時間的に前後があったとしても、ご指導願えたことは凄く、凄く助かります。よく、2つのご指導を比較して自分のものにして行きたいと思います。有難う御座いました。今後ともよろしくお願いいたします。
No.1
- 回答日時:
フォームとは、VBAにある「UserForm?」のことですよね。
それであれば、フォームのプロパティにある「SpecialUpPosition」で設定できると思います。
選べる値に、下の4つがありますが、
「0 - 手動」、「1 - オーナーフォームの中央」、「2 - 画面の中央」、「3 - Windows の既定値」
「1 - オーナーフォームの中央」は、Excelウインドウの中央、「2 - 画面の中央」は、文字通り画面の中央です。
「0 - 手動」は、プロパティ「Top」、「Left」に入れた数字の位置です。
「Top」に「100」、「Left」に「200」と入れると、画面の上から「100」、左(Top)から「200」の位置にフォームの左上が表示されます。
(注)ここに数字を入れると、微調整のため、自動的に数字が変ることがあります。
ここの数字は、恐らく画面のピクセル単位と思います。
「3 - Windows の既定値」は、詳しくは判りません。
この回答への補足
早速のご指導有難う御座います。
ご指導頂いたように、TopとLeftの値を保存読み出しして前回と同じ位置にフォームを再表示させています。再表示させるときに現在、ブックが開こうとしている環境で画面の範囲からはみ出す位置なのかどうかを判断し、はみ出すならば位置の補正をかけたいと考えています。その補正のためには、画面のサイズを取得する必要があるのでは?と思い質問致しました。
説明が悪くてすみません。
重ね重ねご指導願えないでしょうか?
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
VBAで任意のウインドウのサイズを変更する方法
Visual Basic(VBA)
-
モニタのサイズをVBAで取得することは可能ですか?
その他(Microsoft Office)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
複数モニタ使用時のフォームの表示位置してい
C言語・C++・C#
-
5
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
6
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
7
Excel VBA:フォーム←→セルのアクティブ切り替え
Excel(エクセル)
-
8
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
9
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
10
UserForm
Visual Basic(VBA)
-
11
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
12
エクセルVBAのフォームを最前面にする方法を教えてください。
Visual Basic(VBA)
-
13
VBAでのExecuteExcel4Macroの値取得でエラー
Excel(エクセル)
-
14
マルチディスプレイを使用していますがexcelマクロが使えない
Visual Basic(VBA)
-
15
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
16
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
17
テキストボックスの番号を使ったFor~Next文について
Visual Basic(VBA)
-
18
ExcelのVBAでフォームが表示されない
Excel(エクセル)
-
19
Excel VBAでマウスの左クリックのイベントを検知するには
Visual Basic(VBA)
-
20
エクセルのVBAでクリップボードにコピーした画像をpng(or jpg or bmp)保存したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessの画面更新を一時的に停...
-
エクセルVBAで画面の大きさを取...
-
VBAで特定のテキストボックスを...
-
Media Player のスクリーンショ...
-
英語に翻訳「画面を閉じたとこ...
-
HTTPリクエストヘッダーの設定...
-
aspxをhtmlに変換する方法について
-
VBAで一時中断したプログラムの...
-
SPREADでカーソルの位置を1行目...
-
VBのこのコードの意味を教えて...
-
コネクション・セッション・ト...
-
ページングが大量発生する原因...
-
同じソリューション内の別のプ...
-
getParameterで値が取得できず...
-
Webページ上のボタン等の位置を...
-
Request Header の追加
-
DVDの中身が表示されません。
-
NumericUpDownコントロールでの...
-
ASPで画面間のパラメタ受け渡し
-
Javascriptでページ内容全体を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessの画面更新を一時的に停...
-
エクセルVBAで画面の大きさを取...
-
VBAで特定のテキストボックスを...
-
Media Player のスクリーンショ...
-
システム開発の工数と費用について
-
VBAでこれってどういう意味でし...
-
コマンドプロンプトの×ボタン押...
-
Safariの画面が削除出来ず動か...
-
楽天市場の商品検索画面の表示...
-
お礼の仕方について
-
PDFのウィンドウが二重に開いて...
-
プレビュー画面にツールバーを...
-
dos画面が一瞬立ち上がる
-
設計書の書き方がうまくなるには
-
jquery
-
さっきからパソコンが1時間近く...
-
複数画面にまたがるWebページを...
-
英語に翻訳「画面を閉じたとこ...
-
ドメインのアクセス先の設定
-
ログイン機能など個人情報を入...
おすすめ情報