Creazione Userform su file excel già esistente e strutturato con diverse macro

Anonimo
2015-05-07T14:45:59+00:00

Buongiorno a tutti.

Sono praticamente inesperto sulla creazione di userform.

Chiedo gentilmente una mano per creare sul mio file excel già strutturato con diverse macro una userform ad hoc.

Se mi spiegate come fare allego volentieri sia il file excel e sia un esempio della struttura della userform che mi servirebbe.

Ultima cosa: la userform dovrebbe partira all'apertura del file excel.

Grazie mille in anticipo a tutti.

Massimo

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
2015-05-14T18:03:15+00:00

Ciao Massimo,

Sostituisci

 Private Sub UserForm_Initialize()

Dim rng As Excel.Range

con:

Private Sub UserForm_Initialize()

    Dim rng As Excel.Range

    Call deleteCaption(Me)

Se non riesci ancora di integrare il mio codice, carica un file di esempio che include la userform - i dati hanno poca importanza e possono essere cancellati - e posta un link al file qui.

===

Regards,

Norman

La risposta è stata utile?

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2015-05-12T20:43:23+00:00

Ciao Massimo,

no, il metodo Quit non prevede argomenti. Te ne puoi accorgere da solo se, quando digiti l'istruzione, arrivato a scrivere Application.Quit<spazio> non compaiono argomenti. Invece quando scrivi ThisWorkbook.Close<spazio> appare il suggerimento: Close([SaveChanges], [Filename], [RouteWorkbook]) a indicare che gli argomenti possibili di quel metodo sono tre e tutti facoltativi (perché racchiusi in parentesi quadra).

Quindi potresti scrivere:

Private Sub cmdClose_Click()

    ThisWorkbook.Close SaveChanges:=True

    Application.Quit

End Sub

In questo modo chiudi, salvando, la Cartella di lavoro nel cui Progetto VBA sta lo UserForm in cui viene eseguito quel codice e esci da Excel; così se ci sono altre Cartelle di lavoro aperte e non salvate ti viene proposto il solito messaggio: [Salva] [Non salvare] [Annulla].

Però, però... Non va mica bene fare così. È come se allo UserForm gli togliessimo la sedia mentre sta per sedersi.

Meglio fare così:

  • Aggiungi la variabile booleana a livello di modulo mblnQuitOnClose. Ovvero la scrivi subito dopo la lista delle costanti a livello di modulo:

Private Const mcstrColDat As String = "H"

Private mblnQuitOnClose   As Boolean

  • Nella routine-evento del pulsante cmdQuit scrivi:

Private Sub cmdQuit_Click()

    mblnQuitOnClose = True

    Unload Me

End Sub

  • E, per finire, la routine-evento che viene eseguita per ultima allo scaricamento dello UserForm:

Private Sub UserForm_Terminate()

    If mblnQuitOnClose Then

      With ThisWorkbook

        If Not .Saved Then .Save

        .Application.Quit

      End With

    End If

End Sub

La risposta è stata utile?

0 commenti Nessun commento

60 risposte aggiuntive

Ordina per: Meno recente
  1. Anonimo
    2015-05-11T06:54:32+00:00

    Buongiorno a tutti!

    Nessuno riesce a darmi una mano?

    Grazie!!!

    Massimo

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-05-11T07:19:46+00:00

    Ciao Massimo,

    scusa, m'ero distratto un attimo. Vediamo subito di combinare.

    Come premessa direi di assicurarsi che sia spuntata l'opzione in:

    • Strumenti

    Opzioni...

    Dichiarazione di variabili obbligatoria

    Poi:

    • Inserisci

    UserForm

    e a questo punto si possono trascinare dalla Casella degli strumenti i Controlli necessari: Etichetta, Casella di testo, Pulsante di comando. Per cominciare.

    Se la Casella degli strumenti non è visibile:

    • Visualizza

    Casella degli strumenti

    Quindi è opportuno assegnare ai Controlli sullo UserForm dei nomi significativi. Si può usare la finestra delle Proprietà (F4, se non è visibile) e dalla casella a discesa in alto in tale finestra si selezionano uno alla volta i Controlli e si modifica la proprietà (Name) di ciascuno. L'uso comune è premettere al nome un identificatore dell'oggetto, di modo che diventino:

    1. Label1 -> lblNome
    2. TextBox1 -> txtNome
    3. CommandButton1 -> cmdInserisci

    e alla proprietà Caption delle Label e dei CommandButton un testo significativo. Per esempio:

    • Label1 -> Nome:
    • CommandButton1 -> Inserisci

    Per ora mi fermo qui così puoi dire se sto scrivendo cose per te già note, da saltare, o se proprio queste sono quelle che intendi approfondire. A dopo.

    EDIT:

    Non sono riuscito a scaricare nessuno dei tuoi file.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-05-11T10:27:28+00:00

    Sono riuscito a creare la seguente userform2 (Inserimento Obbligatorio):

    Con i seguenti nomi per le TEXTBOX, COMBOBOX e COMMANDBUTTON:

    txtST (Solari Time di riferimento)

    txtoggetto (Titolo/Oggetto della segnalazione)

    txtRFR (RFR/RFC di riferimento)

    cboowner (Ownerdella segnalazione)

    cboapplicativo (Applicativo impattato)

    cboambiente (Ambiente di installazione per test)

    cbodata (Installazione in Produzione in data)

    cmdInserisci (INSERISCI)

    cmdChiudi (CHIUDI) 

    nelle TEXTBOX l'inserimento deve essere libero;

    nelle COMBOBOX vorrei che prendesse una lista fissa dal foglio1:

    cboowner --> range da X83:X90

    cboapplicativo --> range da AA83:AA86

    cboambiente --> range da AB83:AB85

    cbodata --> range da Z83:Z90

    il tasto INSERISCI deve fare in modo di aggiornare il foglio1 di excel con queste regole:

    deve aggiornare le celle dalla prima riga libera a partire dalla riga 5

    celle da aggiornare:

    txtST aggiorna cella A (sempre a partire dalla 5/prima libera)

    txtoggetto aggiorna cella B (sempre a partire dalla 5/prima libera)

    txtRFR aggiorna cella C (sempre a partire dalla 5/prima libera)

    cboowner aggiorna cella D (sempre a partire dalla 5/prima libera)

    cboapplicativo aggiorna cella E (sempre a partire dalla 5/prima libera)

    cboambiente aggiorna cella G (sempre a partire dalla 5/prima libera)

    cbodata aggiorna cella H (sempre a partire dalla 5/prima libera)

    il tasto CHIUDI mi deve chiudere la USERFORM senza salvare o aggiornare nulla.

    Quindi mi servirebbe il codice da bbinare alla userform che rispetti quano sopra specificato. 

    Spero di essere stato abbastanza preciso e nel caso sono qui.

    Grazie in anticipo.

    Massimo

    La risposta è stata utile?

    0 commenti Nessun commento