Contare userform ed aprirle
Hai un problema con Excel? 
Contare userform ed aprirle
di Rita (utente non iscritto) data: 31/10/2014 12:51:12
Ciao a tutti
dovrei da un pulsante sul foglio aprire in sequenza tutte le userform che ho nel file
qualcuno sa come poter conoscere il numero di userform nel file e poterle aprire in sequenza
ho provato con l'istruzione qui sotto partendo dal presupposto che siano 4 ma non le vede
for i= 1 to 4
userform(i).show
next i
|
di Zer0Kelvin data: 31/10/2014 13:30:20
Ciao.
L'istruzione
userform(i).show
e sbagliata; dovrebbe essere
UserForms(i).show
L'insieme UserForms contiene, però, tutte le UserForms CARICATE nel'applicazione.
Se le userforms non sono state prima caricate, l'insieme sarà vuoto...
PS: impara ad usare la dichiarazione obbligatoria delle variabili. e a dichiarare le variabili naturalmente!
di Rita (utente non iscritto) data: 31/10/2014 13:53:30
Grazie della risposta
non avresti un esempio come poter individuare il numero delle userform e poterle aprire in sequenza richiamandole dal foglio di lavoro
io non so da dove partire
di Zer0Kelvin data: 31/10/2014 14:20:28
Sarebbe meglio se spiegassi quello che devi fare.
Comunque, per aprire tutte le userform devi usare un codice analogo a quello che riporto sotto.
Bisogna prima caricare con
Load NomeDellaUserForm
le userform che si vogliono aprire e solo dopo si può utilizzare un ciclo per aprirle tutte.
Le userform vanno aperte in modalità non a scelta obbligata (vbModeless) altrimenti il ciclo non và avanti se non viene chiusa la userform aperta.
Tutto sommato è un metodo molto poco pratico.
Un'alternativa, notevolmente più complicata, consiste nell'accedere al VBAProject e determinare quante userform contiene per poi aprirle tutte.
Sub LoadForms()
Load UserForm1
Load UserForm2
'...
End Sub
Sub ApriForms()
Dim I As Long
For I = 0 To UserForms.Count - 1
UserForms(I).Show vbModeless
Next I
End Sub
|
di Rita (utente non iscritto) data: 31/10/2014 14:42:15
<<<>>>
esatto e' proprio quello che ti chiedevo, determinare quante sono ed aprilrle in sequenza
di Rita (utente non iscritto) data: 31/10/2014 14:44:17
scusa ma mi sono espressa male
volevo dire, tutto e' contenuto nell'ultima tua frase (Un'alternativa, notevolmente più complicata, consiste nell'accedere al VBAProject e determinare quante userform contiene per poi aprirle tutte.)
ossia dovrei determinare quante sono le userform ed aprirle in automatico
di Zer0Kelvin data: 31/10/2014 15:21:20
Prima di procedere in quel senso bisogna essere certi che vi sia un motivo valido per intraprendere quella strada.
Cosa ti impedisce di scrivere semplicemente
Userform1.Show vbModeless
Userform2.Show vbModeless
Userform3.Show vbModeless
'eccetera... |
di Rita (utente non iscritto) data: 02/11/2014 18:39:28
Perché mi serve applicarla su diversi file all'interno dei quali non so quante form contengono
di isy (utente non iscritto) data: 02/11/2014 21:39:33
Ciao
Ho allegato il ciclo per mostrare tutti i form presenti nel foglio
'In un modulo
Option Explicit
Sub Show_Form()
Dim l As Variant
Dim FormName As String
For l = 1 To ActiveWorkbook.VBProject.VBComponents.Count
With ActiveWorkbook.VBProject.VBComponents(l)
If .Type = 3 Then
Dim oUserForm As Object
On Error GoTo err
FormName = .Name
Set oUserForm = UserForms.Add(FormName)
oUserForm.Show
End If
End With
Next
Exit Sub
err:
Select Case err.Number
Case 424:
MsgBox "The Userform with the name " & FormName & " was not found.", vbExclamation, "Load userforn by name"
Case Else:
MsgBox err.Number & ": " & err.Description, vbCritical, "Load userforn by name"
End Select
End Sub
|
di lepat (utente non iscritto) data: 02/11/2014 22:21:09
stringendo un po'
Sub ShowForm()
Dim comp As Object
For Each comp In ActiveWorkbook.VBProject.VBComponents
If comp.Type = 3 Then
UserForms.Add(comp.Name).Show vbModeless
End If
Next
End Sub |
di Rita (utente non iscritto) data: 03/11/2014 08:49:49
Inizialmente ringrazio tutti per gli aiuti
infatti le ultime due ricalcano quello che proprio stavo cercando
Un ultimo aiuto
nell'istruzione postata qui sotto che ho modificato in un foglio rileva quali sono le userform le apre in sequenza
e gli ho aggiuntio la stampa
il problemino sorge nel momento in cui ho l'istruzione in cui si apre la userform
la stampo ma vorrei che sparisse per poi partire con l'istruzione successiva
ho inserito
""UserForms.Add(comp.Name).Hide"" ma la userform rimane aperta
come posso ovviare
Sub ShowForm()
Dim comp As Object
For Each comp In ActiveWorkbook.VBProject.VBComponents
If comp.Type = 3 Then
UserForms.Add(comp.Name).Show vbModeless
UserForms.Add(comp.Name).PRINTFORM
UserForms.Add(comp.Name).Hide
End If
Next
End Sub
|
di lepat (utente non iscritto) data: 03/11/2014 09:39:23
prova così
Sub ShowForm()
Dim comp As Object
For Each comp In ActiveWorkbook.VBProject.VBComponents
If comp.Type = 3 Then
UserForms.Add(comp.Name).Show
UserForms.Add(comp.Name).PRINTFORM
End If
Next |
di Rita (utente non iscritto) data: 03/11/2014 09:47:14
ciao lepat
le userform cosi' rimangono sempre aperte ossia
le apre e le stampa in sequenza solo che vorrei che poi sequenzialmente sparissero (per quello che avevo inserito l'istruzione hide) ma non funziona
di Zer0Kelvin data: 03/11/2014 12:00:51
Se hai necessità di effettuare la procedura su più files, ti conviene usare una Sub che accetti una cartella come parametro:
Sub PrintForms(Wkb As Workbook)
Dim comp As Object
For Each comp In Wkb.VBProject.VBComponents
If comp.Type = 3 Then
With UserForms.Add(comp.Name)
.Show vbModeless
.PRINTFORM
.Hide
End With
End If
Next
End Sub
Sub test()
PrintForms ThisWorkbook
End Sub
|
di Zer0Kelvin data: 03/11/2014 12:04:32
per aprire e stampare le forms di una cartella:
Sub test2()
Dim NewWK As Workbook
Set NewWK = Workbooks.Open("XYZ.xls")
PrintForms NewWK
NewWK.Close False
Set NewWK = Nothing
End Sub
|
di Zer0Kelvin data: 03/11/2014 12:07:48
PS: se non usi
.Show vbModeless
l'esecuzione non prosegue finchè non chiudi la userform manualmente.
di Rita (utente non iscritto) data: 03/11/2014 12:31:27
ok e' proprio quello che mi serve
grazie
di Zer0Kelvin data: 03/11/2014 12:36:09
PPS:
Sembra che ci siano problemi ad usare UserForms.Add su files differenti.
La procedura non riesce a caricare le userform contenute nell'altro file, non riconosce il nome.
Vediamo...
di Zer0Kelvin data: 03/11/2014 20:23:22
Risolto (credo).
Ho creato una procedura che scrive la sub all'interno del file che contiene le userform da stampare, stampa le form e chiude il file senza salvare.
E' sufficiente passare il nome del file con le form da salvare; es
PrintForms "Pippo.xls"
Sub PrintForms(FileName As String)
Dim VBC As VBComponent
Dim NewWK As Workbook
Set NewWK = Workbooks.Open(FileName)
NewWK.VBProject.VBComponents.Add(vbext_ct_StdModule).Name = "TmpMod"
With NewWK.VBProject.VBComponents("TmpMod").CodeModule
.InsertLines 3, _
"Public Sub PrintFormsA(): Dim Comp As Object" & Chr(13) & _
"For Each Comp In ThisWorkbook.VBProject.VBComponents" & Chr(13) & _
"If Comp.Type = 3 Then" & Chr(13) & _
"With UserForms.Add(Comp.Name): .Show vbModeless: .PRINTFORM: .Hide: End With" & Chr(13) & _
"End If: Next: ThisWorkbook.Close False: End Sub" & Chr(13)
End With
Application.Run NewWK.Name & "!PrintFormsA"
Set VBC = Nothing
Set NewWK = Nothing
End Sub
|
Vuoi Approfondire?