Condividi tramite

Excel Duplicare userform

Anonimo
2023-06-04T20:15:25+00:00

Salve.

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.

Grazie a chi vorrà aiutarmi.

Giuseppe

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2023-06-04T22:47:10+00:00

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

Immagine

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

12 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2023-06-05T07:30:01+00:00

    Ciao Giuseppe,

    Grazie Norman.

    Ho usato il tuo e funziona: ho creato in un attimo 15 userform con i relativi codici e ora posso fare le modifiche in ciascuna di esse.

    Mi fa piacere che tu abbia risolto e ti ringrazio per il cortese riscontro.

    Alla prossima.

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2023-06-05T06:16:28+00:00

    Grazie Eleuterio della tua attenzione.

    Forse non ero riuscito a spiegare bene quale era il mio problema. La soluzione proposta da Norman me lo ha risolto.

    Ti auguro una buona giornata.

    Giuseppe

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2023-06-05T06:13:58+00:00

    Grazie Norman.

    Ho usato il tuo e funziona: ho creato in un attimo 15 userform con i relativi codici e ora posso fare le modifiche in ciascuna di esse.

    Un caro salto.

    Giuseppe

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Eleuterio Tedeschi 18,590 Punti di reputazione Moderatore volontario
    2023-06-04T20:41:08+00:00

    Salve.

    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.

    Grazie a chi vorrà aiutarmi.

    Giuseppe

    Non conviene, non conosco le variazioni di cui parli, ma meglio renderla dinamica agendo sui controlli.

    Puoi renderli visibili o meno o personalizzarli con VBA, senza per questo replicarla n volte.

    Un esempio banale:

    a dispetto di quanto vedi, ci sono una combobox sovrapposta ad una textbox.

    Attivandola puoi vedere questo:

    ma se la carichi così:

        Load UserForm1 
    
        With UserForm1 
    
            .ComboBox1.Visible = False 
    
            .TextBox1.Visible = True 
    
            .Show 
    
        End With 
    

    ottieni questo:

    Devi adattarti, ma non sei costretto ad impazzire con 15 UF praticamente uguali, spero sia chiaro,

    ciao.

    La risposta è stata utile?

    0 commenti Nessun commento