• ベストアンサー

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

e10goの回答

  • e10go
  • ベストアンサー率38% (47/122)
回答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 '-------標準モジュールのコード-------終わり

vba_minarai
質問者

補足

本当に、本当に有難う御座います。 単純にコピペするだけで、画面の表示の大きさが表示されました。 このマクロの中にも一杯まだ知らないことがありますので、自己研鑽に励みたいと思います。 特に、KenKen_SPさんのは、画面の有効範囲なのに対し、e10goさんのは、画面の大きさが表示されます。初心者にとってこのように微妙な違いを克服することは凄く困難なので、たとえ、時間的に前後があったとしても、ご指導願えたことは凄く、凄く助かります。よく、2つのご指導を比較して自分のものにして行きたいと思います。有難う御座いました。今後ともよろしくお願いいたします。

関連する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列目」という情報を取得したいのです。 ご存知の方、よろしくお願いします。