Vi ringrazio anticipatamente
Giovanni Mastellone
La tua UserForm sul file b.xls.
In un modulo standard dello stesso file,
il codice che apre la UserForm:
Public Sub mApriForm()
UserForm1.Show vbModeless
End Sub
(vedi tu se lasciare o meno vbModeless
capendo cosa fa sulla guida)
Questo il codice in un modulo del file
a.xls che lancia la macro contenuta nel
file b.xls:
Public Sub m()
Application.Run ("b.xls!mApriForm")
End Sub
Per nascondere la barra del titolo della UserForm.
Crea un modulo di classe nel progetto dove
hai la UserForm(Inserisci-->Modulo di classe)
e chiamalo, ad esempio,
clsForm.
Metti al suo interno questo codice:
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
Private Declare Function DrawMenuBar Lib "USER32" _
(ByVal hWnd As Long) As Long
Private Const GWL_STYLE As Long = (-16)
Private Const WS_CAPTION As Long = &HC00000
Public Property Set Form(oForm As Object)
Dim lStyle As Long
Dim hWndForm As Long
If Val(Application.Version) < 9 Then
hWndForm = FindWindow( _
"ThunderXFrame", oForm.Caption)
Else
hWndForm = FindWindow( _
"ThunderDFrame", oForm.Caption)
End If
lStyle = GetWindowLong(hWndForm, GWL_STYLE)
lStyle = lStyle And Not WS_CAPTION
SetWindowLong hWndForm, GWL_STYLE, lStyle
DrawMenuBar hWndForm
End Property
E metti questo codice nel modulo di codice
della UserForm alla quale vuoi nascondere
la barra del titolo:
Dim objForm As New clsForm
Private Sub UserForm_Initialize()
Set objForm.Form = UserForm1
With Me
.BorderStyle = fmBorderStyleSingle
End With
End Sub
Private Sub UserForm_Terminate()
Set objForm = Nothing
End Sub
Prevedi qualche modo per chiudere la UserForm.
Fai gentilmente sapere se hai risolto e se hai problemi
posta sempre in questo thread. Grazie.
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://blog.maurogsc.eu/
http://social.microsoft.com/Forums/it-IT/excelit/threads
Aggiungo: entrambi i files dell'esempio devono
essere aperti.
Carissimo Mauro
Ti ringrazio per aver risolto il mio problema , sei un grande
saluti
G.Mastellone
Bene.
Grazie a te per il riscontro.
Ciao caro Mauro
Spero di non chiederti troppo.
Riguarda sempre il quesito che tu gentilmente mi hai risolto
La mia domanda è , visto che ho un file principale a.xls e più di un
file secondari b.xls, c.xls ecc., dove ognuno è composto da una
userform, mi chiedo è possibile da commandbutton apro il file b.xls
più la userform, ed un commandbutton nella userform del file b che
chiude sia la stessa userform che il file b.xls. Ovviamente questo
vale anche per i file c.xls d.xls ecc…
Questo per gestire meglio l’applicazione che devo realizzare e per non
tenere tutti i file aperti in memoria.
Scusa per la mia poca conoscenza della materia, mi sto avvicinando
alla programmazione del Vba da poco tempo.
Certo di un tuo interessamento cordiali saluti
G.Mastellone
Capito poco(ma � normale...).
Questa macro nel file a.xls
apre il file b.xls e lancia la macro
sul file b.xls che apre la
UserForm1:
Public Sub m()
Workbooks.Open ("C:\b.xls")
Application.Run ("b.xls!mApriForm")
End Sub
Questo pulsante sulla UserForm1 del file
b.xls chiude la UserForm e il file b.xls:
Private Sub CommandButton1_Click()
Unload Me
ThisWorkbook.Close
End Sub
Pu� andare cos�?
Ciao carissimo, ti chiedo scusa se non mi sono fatto capire
sull’ultima richiesta che tu gentilmente però sei riuscito a
risolvermi lo stesso,
solo una cosa ti chiedo, per eliminare la barra del titolo dell'
userform ,ho eseguito le tue istruzioni, ma non succede niente, ti
chiedo se potresti ricontrollare il codice inviato , oppure sarò io
che non sono all'altezza (come sarà di sicuro)
codice:
lStyle = GetWindowLong(hWndForm, GWL_STYLE)
End Property
Private Sub UserForm_Initialize()
Set objForm.Form = UserForm1
End Sub
cordiali saluti
G. Mastellone
Forse non metti il codice al posto giusto.
<vecchio post>
lStyle = GetWindowLong(hWndForm, GWL_STYLE)
End Property
Private Sub UserForm_Initialize()
Set objForm.Form = UserForm1
End Sub
</vecchio post>
Leggi bene la prima parte e seguila passo passo.
Se hai pi� file in cui richiamare le UserForm,
devi fare quanto sopra in ogni file per
ogni UserForm.
Ciao carissimo mauro
Avevi ragione tù, per nascondere la barra del titolo dell’userform,
sbagliavo a incollare il codice .
Solo adesso mi trovo che il codice per chiudere il file e userform
del file B1 , funziona ma mi chiude anche la userform del file a
Questo pulsante sulla UserForm1 del file
b.xls chiude la UserForm e il file b.xls:
</vecchio post>
Private Sub CommandButton1_Click()
Unload Me
ThisWorkbook.Close
End Sub
Cosa devo fare?
Scusa ancora e grazie
G.Mastellone