Collegare una macro a diversi fogli excel in VBA

Anonimo
2017-10-23T14:24:50+00:00

Ciao,

Io ho inserito nel foglio 1 più Command button che devono rimandare alla stessa macro (con userform ecc..) e voglio che in base alla command button selezionata mi registri i dati inseriti nella userform in fogli diversi.

Esempio:

Se schiaccio sopra il Command Button "Prova1" voglio che i dati siano registrati nel foglio con nome Prova1

Se schiaccio sopra il Command Button "Prova2" voglio che i dati siano registrati nel foglio con nome Prova2

Come posso fare?

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
2017-10-24T11:40:09+00:00

File scaricato e rilevato i seguenti errori :-)

Non avevi creato un modulo standard dove inserire la dichiarazione pubblica

Public WsDestinazione As Worksheet

Nelle due macro "click" delle CommandButton non avevi anteposto l'istruzione Set

Quando si assegna ad una variabile che rappresenta un oggetto (ad es. cartella di lavoro, foglio di lavoro, cella o intervallo di celle) occorre anteporre sempre l'istruzione Set.

Quindi:

Private Sub PinotBianco_Click()

  Set WsDestinazione = ThisWorkbook.Worksheets("PinotBianco")

  UserForm1.Show

End Sub

Private Sub PinotGrigio_Click()

  Set WsDestinazione = ThisWorkbook.Worksheets("PinotGrigio")

  UserForm1.Show

End Sub

Nella tua funzione "riga" avevi messo il punto prima di Range ma non avevi inserito il riferimento al foglio di lavoro impostato tramite WsDestinazione.

Quindi andava scritta così:

Function riga()

Dim i, n As Integer

  With WsDestinazione

    For i = 4 To 100000

      If .Range("A" & i) = "" Then

        n = i

        Exit For

      Else

      End If

    Next i

    riga = n

  End With

End Function

Qui trovi il tuo file modificato con le correzioni: File

Un consiglio è quello di scrivere il codice "a scalare". Personalmente lo trovo più leggibile rispetto ad un codice scritto "piatto". Ma sono scelte personali :)

La risposta è stata utile?

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

19 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2017-10-24T08:01:45+00:00

    Manca il punto :)

    With WsDestinazione

    Call riga

    .Range("B" & riga) = UserForm1.ComboBox1

    .Range("C" & riga) = UserForm1.TextBox2

    .Range("D" & riga) = UserForm1.TextBox1

    .Range("E" & riga) = UserForm1.ComboBox2

    .

    .

    .

    end with

    Tieni presente che l'istruzioni With sta a significare "con riferimento a" e perché si ottenga il riferimento all'oggetto indicato con With, in questo caso il foglio di lavoro impostato, occorre che via sia un collegamento dei suoi "sub oggetti", in questo caso le celle del foglio di lavoro, tramite l'anteposizione del punto.

    Come avevi scritto il codice tu il riferimento era alla cella del foglio attivo :)

    Inoltre, ma non è che sia fondamentale, "Call riga" lo inserirei prima di With WsDestinazione.

    ciao

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-10-24T07:48:40+00:00

    Codice iniziale che richiama la prima userform:

    Public WsDestinazione As Worksheet

    Private Sub PinotBianco_Click()

    Set WsDestinazione = ThisWorkbook.Worksheets("PinotBianco")

    UserForm1.Show

    End Sub

    Private Sub PinotGrigio_Click()

    Set WsDestinazione = ThisWorkbook.Worksheets("PinotGrigio")

    UserForm1.Show

    End Sub

    Codice inserimento nel file Excel :

    Private Sub CommandButton1_Click()

    With WsDestinazione

    Call riga

    Range("B" & riga) = UserForm1.ComboBox1

    Range("C" & riga) = UserForm1.TextBox2

    Range("D" & riga) = UserForm1.TextBox1

    Range("E" & riga) = UserForm1.ComboBox2

    .

    .

    .

    end with

    Ecco qui il codice

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-10-24T07:32:46+00:00

    In teoria no se sono stati assegnati i diversi nomi e se nelle routine dove viene effettuato l'inserimento viene fatto riferimento alla variabile pubblica.

    Dovresti far vedere il file o quanto meno il codice vba dei pulsanti e delle macro che effettuano l'inserimento.

    ciao

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-10-24T07:05:11+00:00

    Ciao, 

    intanto grazie mille.

    L'unica cosa è che mi trascrive i dati nel Foglio in cui ho tutti i comand button è possibile?

    La risposta è stata utile?

    0 commenti Nessun commento