Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9382 / 13646 ツリー ←次へ | 前へ→

【27670】ユーザーフォームを常に手前表示 kazu 05/8/15(月) 15:18 質問[未読]
【27691】Re:ユーザーフォームを常に手前表示 Kein 05/8/16(火) 13:27 回答[未読]
【27692】Re:ユーザーフォームを常に手前表示 m2m10 05/8/16(火) 14:01 お礼[未読]
【27706】Re:ユーザーフォームを常に手前表示 kazu 05/8/16(火) 20:56 お礼[未読]
【27708】Re:ユーザーフォームを常に手前表示 [名前なし] 05/8/16(火) 21:15 発言[未読]
【27711】Re:ユーザーフォームを常に手前表示 kazu 05/8/16(火) 21:42 発言[未読]
【27713】Re:ユーザーフォームを常に手前表示 [名前なし] 05/8/16(火) 22:03 発言[未読]
【27715】Re:ユーザーフォームを常に手前表示 kazu 05/8/16(火) 22:28 お礼[未読]

【27670】ユーザーフォームを常に手前表示
質問  kazu  - 05/8/15(月) 15:18 -

引用なし
パスワード
   自分の作ったユーザーフォームを表示の際に常に手前にしたい。
ブックを最小化してもデスクトップの画面上でも常に表示できるようにしたい。

フォームで入力して、シートの貼り付けるようにする時、入力をするために別のファイルを開いて(PDFファイルなど)見ながら入力が出来るようにしたい。

【27691】Re:ユーザーフォームを常に手前表示
回答  Kein  - 05/8/16(火) 13:27 -

引用なし
パスワード
   フォームモジュールの先頭から

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowPos Lib "USER32" _
(ByVal Hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, _
ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, _
ByVal wFlags As Long) As Long

Private Sub UserForm_Activate()
  Dim Hwnd As Long, Ret As Long
 
  Hwnd = FindWindow("ThunderDFrame", vbNullString)   
  Ret = SetWindowPos(Hwnd, -1, 0, 0, 0, 0, &H40 Or &H1 Or &H2)
End Sub

'↓コマンドボタンに、この設定を解除するコードを割り当てる場合

Private Sub CommandButton1_Click()
  Dim HWnd As Long, Ret As Long
 
  Hwnd = FindWindow("ThunderDFrame", vbNullString)
  Ret = SetWindowPos(HWnd, -2, 0, 0, 0,0, &H40 Or &H1 Or &H2)
End Sub

というコードを入れて下さい。これで UserForm1.Show 0 と、モードレスで
ユーザーフォームを立ち上げれば、その効果が理解できるはずです。

【27692】Re:ユーザーフォームを常に手前表示
お礼  m2m10  - 05/8/16(火) 14:01 -

引用なし
パスワード
    Kein さん こんちは、EXCELのホームでは無理と思ってました。

 追加で、ユウザーホームのみの表示をします。

 Keinさんのレスの後ろの

 ユウザーホームに↓を入れてください。

Private Sub UserForm_Initialize()
  Application.Visible = False
End Sub

Private Sub UserForm_Terminate()
  Application.Visible = True
End Sub


【27706】Re:ユーザーフォームを常に手前表示
お礼  kazu  - 05/8/16(火) 20:56 -

引用なし
パスワード
   とりあえずありがとうございました。
私には難しく理解が出来ませんでした。

また、うまく機能しませんでした。

私のやり方がいけないのだと思います。
もう少し勉強します。

【27708】Re:ユーザーフォームを常に手前表示
発言  [名前なし]  - 05/8/16(火) 21:15 -

引用なし
パスワード
   これではどうでしょうか。
まるっきり新規のフォームに以下のコードを貼り付けて、うまくいったら
実際に使用するフォームに組み込んでみてください。

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowPos Lib "user32" _
(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, _
ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, _
ByVal wFlags As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Const GWL_HWNDPARENT = -8&

Private Sub UserForm_Initialize()
  Dim hwnd As Long, Ret As Long
  
  hwnd = FindWindow(vbNullString, Me.Caption)
  Ret = SetWindowPos(hwnd, -1, 0, 0, 0, 0, &H40 Or &H1 Or &H2)
  Ret = SetWindowLong(hwnd, GWL_HWNDPARENT, 0)
End Sub

【27711】Re:ユーザーフォームを常に手前表示
発言  kazu  - 05/8/16(火) 21:42 -

引用なし
パスワード
   ありがとうございます。
先程より理解できましたが、エクセル自体の最小化といった
作業が出来なくなるみたいなのですが、違うファイル(PDFファイルなど)を
見ながらしても、常に手前表示になるようにしたいのですが、出来ないみたいなんですが、やはり私のやり方がよくないのでしょうか?


▼[名前なし] さん:
>Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
>(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
>Private Declare Function SetWindowPos Lib "user32" _
>(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, _
>ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, _
>ByVal wFlags As Long) As Long
>Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
>(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
>Const GWL_HWNDPARENT = -8&
>
>Private Sub UserForm_Initialize()
>  Dim hwnd As Long, Ret As Long
>  
>  hwnd = FindWindow(vbNullString, Me.Caption)
>  Ret = SetWindowPos(hwnd, -1, 0, 0, 0, 0, &H40 Or &H1 Or &H2)
>  Ret = SetWindowLong(hwnd, GWL_HWNDPARENT, 0)
>End Sub

【27713】Re:ユーザーフォームを常に手前表示
発言  [名前なし]  - 05/8/16(火) 22:03 -

引用なし
パスワード
   ▼kazu さん:
>エクセル自体の最小化といった作業が出来なくなるみたいなのですが、
フォームをモーダル表示していませんか?

Sub Macro1()
  UserForm1.Show vbModeless
End Sub
と言うコードを標準モジュールに書いて、このマクロを実行してみてください。

ちなみに、Excel97ではフォームのモードレス表示は出来ませんので、
あきらめてください。

【27715】Re:ユーザーフォームを常に手前表示
お礼  kazu  - 05/8/16(火) 22:28 -

引用なし
パスワード
   有難うございました。
成功しました。

9382 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free