|
こんばんわ。
>ユーザーインターフェイスはごく自然なかたちにしたいのです。
あんまり凝らんでもええと思うねんけど・・・
VBEのユーティリティなんて使うのはそこそこスキルのある人やろうから
あらかじめ説明しておけば済むような気ぃすんねんけどな。
ま、どーしてもってことやったら、こんなんかな?
'(標準モジュール)
Private CB As New Class1
Public Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Public Declare Function SetParent Lib "user32" _
(ByVal hWndChild As Long, _
ByVal hWndNewParent As Long) As Long
Sub TestMacro()
Load UserForm1
UserForm1.Show
Unload UserForm1
End Sub
Sub CreateCommandbar()
On Error Resume Next
With Application.VBE
.CommandBars("TEST").Delete
With .CommandBars.Add(Name:="TEST", Temporary:=True)
With .Controls.Add
.Style = msoButtonCaption
.Caption = "マクロ起動ボタン"
End With
.Visible = True
End With
Set CB.CBE = .Events.CommandBarEvents(.CommandBars("TEST").Controls(1))
End With
End Sub
'(クラスモジュール−Class1)
Public WithEvents CBE As CommandBarEvents
Private Sub CBE_Click(ByVal CommandBarControl As Object, handled As Boolean, CancelDefault As Boolean)
TestMacro
End Sub
'(フォームモジュール−UserForm1)
Private Sub UserForm_Initialize()
Dim hWndFrm As Long
Dim hWndVBE As Long
Dim Ret As Long
hWndFrm = FindWindow("ThunderDFrame", vbNullString)
hWndVBE = FindWindow("wndclass_desked_gsk", vbNullString)
Ret = SetParent(hWndFrm, hWndVBE)
End Sub
フォームが1個しかないんやったら、API宣言はフォームモジュールに
移動させてPrivate宣言してもかまいまへん。
CreateCommandbar()を実行するとVBEにコマンドバーが追加されるので、
そこのボタンを押すとフォームが表示されます。
VBかOfficeDeveloperでCOMアドイン(DLL)作るのが本筋とも思うけど・・・
ま、お暇やったら試してみてな。
ほな。
|
|