• ベストアンサー

エクセルVBAで画面の大きさを取得する方法!

e10goの回答

  • e10go
  • ベストアンサー率38% (47/122)
回答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 の既定値」は、詳しくは判りません。

vba_minarai
質問者

補足

早速のご指導有難う御座います。 ご指導頂いたように、TopとLeftの値を保存読み出しして前回と同じ位置にフォームを再表示させています。再表示させるときに現在、ブックが開こうとしている環境で画面の範囲からはみ出す位置なのかどうかを判断し、はみ出すならば位置の補正をかけたいと考えています。その補正のためには、画面のサイズを取得する必要があるのでは?と思い質問致しました。 説明が悪くてすみません。 重ね重ねご指導願えないでしょうか? よろしくお願い致します。

関連するQ&A

  • 画面プロパティの表示位置変更について

    マルチモニターを使用しています。 Excelやインターネット画面等は、プライマリーモニター、セカンダリーモニターに関らず移動した位置に変更できますが、画面プロパティ等コンパネの各項目やエラー表示は、プライマリーモニターに移動しても再表示するとセカンダリーモニターに戻ってしまいます。 設定方法があればどなたか教えて下さい。 よろしくお願い致します。

  • CreateProcess API でセカンダリモニタに初期表示するには?

    CreateProcess API でプログラムを実行する時に、引数STARTUPINFO構造体の中で、初期表示位置としてセカンダリモニタ上の座標を指定しても、プライマリモニタ上に表示されてしまいます。 どのようにすればセカンダリモニタに初期表示することができるのでしょうか?

  • EXCEL Form モードレスで開いて

    BookがそれぞれAとBとあります。Book BにBook AとBのデータを絞り込むデータ入力フォームを開くようにしています。 Bを起動するとAのsheetを開き、絞り込みフォームが開きます。 画面上は最背面にB、次にA、最前面にフォームとなります。この状態でAを絞り込む場合には、このままでいいのですが、Bを絞り込んだり、結果を表示すると、「B-フォーム-A」の順序になり、また絞り込むとき、Book Aを選択しなくてはなりません。 フォームを最前面に常に表示するにはどうすれば良いでしょうか? 他の質問で、WindowsのAPIを屈指してでないとだめですか? APIも試してみましたが、うまく行きません。 参考になる回答でもありましたら、お教えください。

  • VB6 自分自身のフォームが移動したことを知る方法

    お世話になります。 VB6でメインフォーム(*.exeで起動されるフォーム)がデスクトップ内で移動したことをそのフォーム自身が知るためにはどのようにすればよいでしょうか。 目的は、移動後のフォームの位置情報の取得です。 フォームのサイズを変更した時は"Resize"イベントが発行されるので、それをきっかけにLeft,Top情報を取得できます。 同じようにフォームが移動した時にLeft,Top情報を取得する方法を知りたいです。 API等の利用で可能になるのであればそれでもかまいません。 よろしくお願いします。

  • エクセルVBAのユーザーフォーム

    こんばんは、エクセルVBAでユーザーフォームを作成しました。 そこに入力したものがブックに反映するわけですが、フォームに0(ゼロ)を入力した場合、ブック上のセルを選択すると0と入っているのですが、表示されません。なぜでしょう???? これができないとせっかく時間をかけて作ったのに、使えません。どなたかご存知の方よろしくお願いします!!!!

  • TextBoxのhWndプロパティVBAでも使えませんか?

    環境 OS:Win2000ProSP4 Excel2000および2002 Excel2000で、テキストボックスのあるフォームを作成しました。 選択したファイルを読み込んでテキストボックスに表示する機能があり それに加えて、テキストボックス中をマウスでクリックした時、その場 所のカーソルの位置(そこの行数と行内で何カラム目か、の2つ)を取得し て同じフォーム上に表示させる機能をつけました(矢印ボタンでカーソ ルが移動しても、位置情報を更新するようにしています)。ただし、 ネットで調べたカーソル位置取得方法はVBAでなくてVBのものなので、 API(SendMessage)に渡すテキストボックスのhWndプロパティはなく、 困ってしまいました。窮余の一策として、普通のテキストボックスの 代わりに、リッチテキストコントロールを使用して、その中にある hWndプロパティを渡して、上の機能を実現していました。ところが、 Excelを2002にアップグレードしたら、リッチテキストコントロール が使えないことが判明しました(MSのサイトによると、セキュリティの ため、とのこと)。 Excel2002で、2000時代につくったフォームを開くと、リッチテキスト コントロールがすっぽり抜け落ちている状態です。こうなれば、普通の テキストボックスのhWndプロパティをAPIで取得できないか、というこ とを調べているところで困っています。あるいは、2002でも使える同じ ようなコントロールがあれば助かります。 長くなりましたが、ご存知の方、アドバイスをお願いします。

  • PC情報の取得について

    VBのプログラムからパソコンのメーカー名、型式、製造番号等の情報を取得する方法ってあるのでしょうか?いろいろなAPI等も調べてみましたが見つける事が出来ませんでした、、何か情報をご存知でしたら是非ご教授下さい。 資産管理等のソフトを実行するとこのような情報を画面表示してくれるので何か方法があると思うのですが行き詰ってしまいました、、どうかよろしくお願いします。 ※VBは6を使用しています。

  • ACCESS VBA ウィンドウを閉じる

    ACCESS VBA の初心者です。 前に進まず困っておりまして申し訳ありませんが教えてください。 フォーム1にボタンをつけそのボタンを押すとフォーム2に画面遷移するように、作っています。 フォーム2に画面遷移した場合、フォーム1は不要になるので、画面遷移と同時にフォーム1を閉じたいのですが、うまく行きません。 docmd.close と言う命令を使うとフォーム1のボタンを押すと画面遷移先のフォーム2の方が一瞬表示されてすぐに閉じてしまいます。 どうしたら、フォーム2が表示されてフォーム1が同時に閉じる事ができるでしょうか?

  • VBAでステータスバーの情報取得(APIで)

    VBA(Excel2003の)でステータスバーに表示されている情報(文字)を APIで取得したいのですが、SendMessageでSB_GETTEXTを使って取得する ことまではわかりましたが・・・ どうにわからず、最終的に↓のアドレスのソースを使ってみましたが、 空白しか取得できませんでした。 (パートの数はあっていそうなのですが、文字列がとれていません。) http://homepage2.nifty.com/nonnon/SoftSample/SampleEnumWindows.html 取得したい対象は、IEとかワードパッドとか秀丸とか、一般的な アプリケーション全般のステータスバーの情報ですのでAPIを使いたいと 思っています。 ご教授いただければ幸いです。

  • EXCEL VBA RANGEオブジェクトの位置情報取得について。

    EXCEL VBA RANGEオブジェクトの位置情報取得について。 下記INPUTBOXでユーザーに任意のセル範囲を選択させます。   Set MyRange = Application.InputBox(prompt:=MyMsg, Type:=8) このMyRangeのセル範囲の位置と行数、列数を取得したいのです。 行数、列数は下記マクロでいいかと思います。   n = MyRange.Rows.Count   m = MyRange.Columns.Count あとは、このMyRangeがどこから始まっているかを取得したいのです。 たとえばMyRangeがB3:D6だとすると、n=4、m=3、左上の位置は3行目、2列目となります。 この「3行目、2列目」という情報を取得したいのです。 ご存知の方、よろしくお願いします。