いつもお世話になります
今、Userform1からSendKeyを使って簡単な図面を描いています
同じ小さな図面を繰り返し描きたいのですがUserFormのコントロールが思ったように出来ませんので教えてください
ウェブの記事を参考にしながら下記のように作りましたが
最後のShow.Meで前面に出てきません
Private Declare Function GetForegroundWindow Lib "user32" () 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 Const HWND_TOPMOST As Long = -1
Private Const SWP_NOSIZE As Long = &H1&
Private Const SWP_NOMOVE As Long = &H2&
Private Sub UserForm_Activate()
Call SetWindowPos(GetForegroundWindow, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
Me.StartUpPosition = 1
(処理)
Me.Hide
'...Excelを最小化
Application.WindowState = xlMinimized
(処理)
Me.Show
以上、よろしくお願いいたします
No.2ベストアンサー
- 回答日時:
> WP_NOMOVE が変数が定義されていなというエラーになりました
写し間違えでした。 SWP_NOMOVE です。すみません。
>常に前面ではなく、一度”Me,Hide”してCadの処理が終わったら再び前面に表示したいのですが
Hide しないのでしたら、TOPMOST は関係しますが、Hideするのでしたら、隠れてしまうのだから、その場にはUserFormのZオーダーの位置関係は影響はありません。その部分でのコードを特に変える必要はないと思います。
Private Sub CommandButton1_Click()
Me.Hide
End Sub
' ↓
'Excel側から、
Sub ボタン2_Click()
UserForm1.Show 'ここではMeは使えません。
End Sub
とする場合です。状況によっては変わるかもしれません。
ありがとうございます
いろいろお手数をお掛けしました
なかなか思ったような動きになりません
難しいですね
また、いろいろ試してみます
No.1
- 回答日時:
こんにちは。
私自身、ちょっと変えて試してみました。
「UserFormを前面に出力してから処理後にももう一度前面に出したい」
タイトルのリクエストとは違い、これは、常に最前面に出ています。コード自体は、そのような要求になっている「ような」気がしました。ただし、質問では、GetForegroundWindow が生きていませんから、はっきりしません。
'----'標準モジュール------
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
''Public Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Public Declare Function SetWindowPos Lib "user32.dll" (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
Public Const HWND_TOPMOST As Long = -1
Public Const SWP_NOSIZE As Long = &H1&
Public Const SWP_NOMOVE As Long = &H2&
Sub ボタン1_Click()
'...Excelを最小化
Application.WindowState = xlMinimized
UserForm1.Show 0
End Sub
''-----UserForm モジュール --------
Private Sub UserForm_Activate()
Call settingForeGround
End Sub
Private Sub UserForm_Initialize()
Call settingForeGround
End Sub
Sub settingForeGround()
Dim hWnd As Long
Dim Ret As Long
hWnd = FindWindow("ThunderDFrame", vbNullString)
Ret = SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, WP_NOMOVE Or SWP_NOSIZE)
Me.StartUpPosition = 1
End Sub
いつもお世話になります
早速ご回答ありがとうございます
試してみました
すみません、常に前面ではなく、一度”Me,Hide”してCadの処理が終わったら再び前面に表示したいのですが
また、Sub settingForeGround()で
WP_NOMOVE が変数が定義されていなというエラーになりました
Optionを外してテストしましたが、定義する場合のタイプは何になるのですか? もしかしたらSWP_NOSIZE もそうかも知れませんね
すみません、ご教授頂いているのに申し訳ございません
よろしくお願いいたします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) excel vba 参照渡しと値渡し 2 2022/04/27 10:45
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) vba Sleep関数について教えてください 1 2023/01/18 10:18
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
Vba Userformを前面に出すについて
Access(アクセス)
-
エクセルVBAのフォームを最前面にする方法を教えてください。
Visual Basic(VBA)
-
[VBA] UserForm を Excel の Window の前面に表示させない方法
その他(プログラミング・Web制作)
-
-
4
ExcelVBAでフォーム内でブックを開くとフォームが隠れてしまう
Visual Basic(VBA)
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
7
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
8
Excel VBA:フォーム←→セルのアクティブ切り替え
Excel(エクセル)
-
9
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
10
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
11
WIN10で常にフォームを手前に
Visual Basic(VBA)
-
12
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
13
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
14
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
15
VBA ユーザーフォームのChangeイベントを停止したい
Access(アクセス)
-
16
指定のWORKBOOKを前面表示する方法(エクセル:VBA)
Excel(エクセル)
-
17
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
18
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
19
モーダルフォームとモードレスフォーム
Visual Basic(VBA)
-
20
ラベル内の文字(Caption)を縦表示にする方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スタティックテキストが表示さ...
-
VBA、UserFormを前面に出力して...
-
ACCESS側からEXCELの書式を設定...
-
【C#】 あるイベントから別イ...
-
VBSで応答不要のメッセージボッ...
-
InvalidateRectがうまくいかない
-
マウスのクリックを無視したい
-
メッセージボックスのボタン名変更
-
VBA kernel32 の意味
-
起動後直に実行するコードはど...
-
Excel VBA 自動的に閉じるMsgBox
-
WEB上にボタンが押せない
-
DirectX環境下での方向キー同時...
-
VB.NET開発(イベントプロシー...
-
スケジューリング方式
-
VBSの処理中一旦処理を止めて再...
-
MFCのView終了時の終了確認
-
VCでウエイトをミリ秒でかけ...
-
VBA メッセージボックスを自動...
-
Application.ScreenUpdating=Fa...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メッセージボックスのボタン名変更
-
VBSの処理中一旦処理を止めて再...
-
VBSで応答不要のメッセージボッ...
-
ACCESS側からEXCELの書式を設定...
-
VBA メッセージボックスを自動...
-
Application.ScreenUpdating=Fa...
-
VBA kernel32 の意味
-
エクセルVBAでクリップボード内...
-
Excelのワークシートに行を挿入...
-
Excel VBA で処理中断(DoEvents...
-
【C#】 あるイベントから別イ...
-
手動かプログラムでの起動かの判断
-
ASP.NETでのメッセージ画面を出...
-
Excel VBA 自動的に閉じるMsgBox
-
シャットダウン時のExcel強制終...
-
VBA、UserFormを前面に出力して...
-
<input type="file">タグで「キ...
-
Excel VBA 実行中に一瞬フリー...
-
「キャンセル」ボタン付きの処...
-
EXCEL VBA「Application.Displa...
おすすめ情報