Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Giuseppe,
Ho creato una userform della quale ho necessità di averne 15 con piccole variazioni tra loro.
É possibile duplicarla per poi apportare in ognuna le variazioni che voglio?
Ho seguito le indicazioni su vari forum (esporta-cambia nome-importa) ma non funziona.
Oltre all'approccio eminentemente percorribile suggerito da Eleuterio, volendo sfruttare VBA per duplicare più volte automaticamente una Userform base si potrebbe provare qualcosa del genere:
'========>>
Option Explicit
'-------->>
Public Sub Tester()
Dim i As Long
Const sUserform\_Name As String = "Userform1" **'<<=== Modifica**
Const sNewName As String = "MyUserform" **'<<=== Modifica**
Const iNumero\_di\_Nuove\_Userform As Long = 15 **'<<=== Modifica**
For i = 1 To iNumero\_di\_Nuove\_Userform
Call Duplica\_UserForm(sUserform\_Name, sNewName & i)
Next i
End Sub
'-------->>
Public Function Duplica_UserForm(ByVal sUsrFrmName As String, _
ByVal sNewUsrFrmName As String, \_
Optional bActivateNewUserFrm As Boolean = True) As Boolean
On Error GoTo Error\_Handler
Dim sNewUsrFrmFileName As String
sNewUsrFrmFileName = Environ("Temp") & "\" & sNewUsrFrmName & ".frm"
With ThisWorkbook.VBProject
.VBComponents(sUsrFrmName).Name = sNewUsrFrmName
.VBComponents(sNewUsrFrmName).Export sNewUsrFrmFileName
.VBComponents(sNewUsrFrmName).Name = sUsrFrmName
.VBComponents.Import sNewUsrFrmFileName
End With
If Len(Dir(sNewUsrFrmFileName)) > 0 Then Kill Replace(sNewUsrFrmFileName, ".frm", ".\*")
If bActivateNewUserFrm = True Then ThisWorkbook.VBProject.VBComponents(sNewUsrFrmName).Activate
DuplicateUserForm = True
Error_Handler_Exit:
On Error Resume Next
Exit Function
Error_Handler:
MsgBox "Si è verificato il seguente errore" & vbCrLf & vbCrLf & _
"# Errore: " & Err.Number & vbCrLf & \_
"Sorgente Errore: DuplicateUserForm" & vbCrLf & \_
"Description errore: " & Err.Description & \_
Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) \_
, vbOKOnly + vbCritical, "Si è verificato un errore!"
Resume Error\_Handler\_Exit
End Function
'<<========
In sostanza, la funzione di cui sopra:
- Rinomina la Userform originale
- Esporta la Userform appena rinominata
- Ripristina il nome originale della Userform originale
- Importa la nuova Userform.
- Questo esercizio viene ripetuto per ciascuno delle nuove Userform clone.
Ad ogni ciclo, ossia per ogni nuova Userform, questa operazione crea un nuovo file temporaneo e, dopo l'importazione della Userform clone, il file temporaneo viene cancellato.
Va notato che i principi alla base di questo codice non sono nuovi e si basano sulla creazione (e successiva cancellazione) di un file temporaneo. Questo semplice trucco ha numerose applicazioni al di là dello sfruttamento di cui sopra.
===
Regards,
Norman