[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAのフォームに関して困っている点があります。』(あみ)
プログラミング初心者です。
質問が2点ありますので分かる方いましたら解説をよろしくお願いいたします。
1.フォームのサイズ変更がドラックでできない
直接プロパティから値を変更すればできるのですが、通常のブラウザやエクスプローラーのようにドラックして変更したいです。
2.AUserForm_Active(Deactivate)が動作しない
起動時に1回処理が通りますが、それ以降動作しません
イメージ的にはフォームをクリックしたらActiveが動作し、フォーカスが外れたらDeactivateが動作すると考えています。
調べてみるとExcelのバージョンによってイベントの扱いが違うということは分かったのですが、Office365で動作させたい時にどのようにすればいいのかまではわかりませんでした。
文章力が無く、プログラミングの知識的にも不足していますので伝わりにくいかと思いますが確認をよろしくお願いいたします。
< 使用 Excel:Office365、使用 OS:Windows10 >
>1.フォームのサイズ変更がドラックでできない
普通はできないです。 APIと言う難しいものを使います。
>AUserForm_Active(Deactivate)が動作しない。
イベント動作の確認取ってないけど、その前に スペル違うし、○○UserForm_Activate() って、勝手に名前を変えてないですかね (BJ) 2019/11/20(水) 11:39
申し訳ありませんでした。
単純にスペル間違いです。
UserForm_Activate()でやってもできませんでした
(あみ) 2019/11/20(水) 15:09
2007でも最初だけでした。(実験1) フォームとシートを交互に選択しても無反応。
実験1 Sub aaaa() UserForm1.Show 0 End Sub
Private Sub UserForm_Activate() MsgBox Me.Caption End Sub
実験2 UserForm1とUserForm2を用意してUserForm1にボタン一つ UserForm1とUserForm2の交互選択では、動きました。
Sub bbbb() UserForm1.Show 0 End Sub
UserForm1モジュール
Private Sub CommandButton1_Click() UserForm2.Show 0 End Sub
UserForm2モジュール
Private Sub UserForm_Activate() MsgBox Me.Caption End Sub
と、言うことは? シートや他との連携には対応してない??? (BJ) 2019/11/20(水) 15:32
あ、実験2のUserForm1モジュールのコードが抜けてた。
Private Sub UserForm_Activate() MsgBox Me.Caption End Sub
場合によって、シートを選択して両フォームを非選択状態にしてから、 どちらかのフォームを選択すると動く時と動かない時あり。 何が原因なのかきっかけが、良く解りませんでした。 すみません。 (BJ) 2019/11/20(水) 16:02
Excel VBAは、フォームのリサイズに対応するプロシジャが用意されているくせに、リサイズ可能にするプロパティが存在しないという、中途半端な仕様になっているのが謎です。
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _ (ByVal hWnd As Long, ByVal nIndex 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_STYLE = (-16&) Const WS_THICKFRAME = &H40000 Const WS_MAXIMIZEBOX = &H10000
Private Sub UserForm_Initialize() Dim hWnd As Long hWnd = FindWindow("ThunderDFrame", Me.Caption) SetWindowLong hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) Or WS_THICKFRAME Or WS_MAXIMIZEBOX End Sub (???) 2019/11/21(木) 11:51
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.