Ronaldo, obrigado pelo retorno.
Lhe agradeci mais cedo, mas somente agora pude lhe responder, mais valeu a pena. Consegui resolver o problema.
No modelo em anexo, eu criei dois UserForms.
No Userform1, criei um evento ao inicializar, para que o UserForm2 também fosse aberto:
Private Sub UserForm_Initialize()
UserForm2.Show vbModeless
End Sub
Já no UserForm2, adicionei o código do link acima, mas fiz algumas modificações, de forma que ficou resumida:
Private Declare Function SetParent Lib "user32" ( _
ByVal hWndChild As Long, _
ByVal hWndNewParent As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Sub UserForm_Initialize()
Const C_VBA6_USERFORM_CLASSNAME = "ThunderDFrame"
Dim MeHWnd As Long
Dim OrHWnd As Long
Dim Res As Long
' get the window handle of the userform
MeHWnd = FindWindow(C_VBA6_USERFORM_CLASSNAME, Me.Caption)
OrHWnd = FindWindow(C_VBA6_USERFORM_CLASSNAME, UserForm1.Caption)
If (MeHWnd > 0) And (OrHWnd > 0) Then
' make the userform a child window of the ActiveWindow
Res = SetParent(MeHWnd, OrHWnd)
If Res = 0 Then
''''''''''''''''''''
' an error occurred.
''''''''''''''''''''
MsgBox "The call to SetParent failed."
End If
End If
End Sub
Como pode ser observado, foi mantida as declarações das API´s, FindWindow e SetParent.
Pelo que percebi, a FindWindow captura um identificador para os formulários, aplicativos e janelas, em geral.
Também mantive as variáveis C_VBA6_USERFORM_CLASSNAME,MeHWnd e Res, além de adicionar a variável OrHWnd.
No caso, a variável C_VBA6_USERFORM_CLASSNAME vai identificar que o tipo de aplicativo que será lido pelo FindWindow. Neste caso, ele informa que é um UserForm do VBA6.
As variáveis MeHWnd e OrHWnd, irão capturar as identificações (valores) dos formulários, através da API FindWindow, conforme abaixo:
MeHWnd = FindWindow(C_VBA6_USERFORM_CLASSNAME, Me.Caption) 'Valor do UserForm2.
OrHWnd = FindWindow(C_VBA6_USERFORM_CLASSNAME, UserForm1.Caption) 'Valor do UserForm1.
Após estas duas variáveis serem preenchidas, a variável Res irá receber o valor do comando SetParent, que é gerado a partir das variáveis MeHWnd e OrHWnd. Como resultado, o UserForm2 é aberto dentro do UserForm1, conforme pode ser visto do anexo.
Não sei se a explicação ficou muito clara, mas espero que este tópico possa ajudar quem se interessar pelo assunto.
Obrigado Ronaldo e a todos do fórum.
Esclareceu suas dúvidas? Acrescente ao título do tópico a expressão: [RESOLVIDO].
Mikel Silveira Fraga
E-mail: [email protected]
Skype: mikelsf
Postado : 19/02/2014 9:47 am