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-23T16:26:33+00:00

    Ciao Casanmaner,

    Ciao Norman,

    scusa.

    Mi sono, come spesso accade, "accavallato" alla tua risposta :)

    Due espressioni da noi vengono in mente:

    1. The more the merrier!
    2. Great minds think alike!

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-10-23T15:34:02+00:00

    Ciao Norman,

    scusa.

    Mi sono, come spesso accade, "accavallato" alla tua risposta :)

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-10-23T15:32:01+00:00

    In un modulo standard devi dichiarare una variabile pubblica ad es. in questo modo

    Public WsDestinazione As Worksheet

    Poi per i vari Command Button settare il riferimento al foglio dove vorrai che vengano inseriti i dati. Ad es.

    Private Sub CommandButton1_Click()

      Set WsDestinazione = ThisWorkbook.Worksheets("Prova1")

      '.... di seguito gli altri comandi

    End Sub

    Private Sub CommandButton2_Click()

      Set WsDestinazione = ThisWorkbook.Worksheets("Prova2")

      '.... di seguito gli altri comandi

    End Sub

    Poi nei comandi che effettuano l'inserimento dei dati presenti nella UserForm fai riferimento a WsDestinazione per individuare il foglio.

    Ad es. se i dati presenti in due TextBox dovessero essere inseriti in A1 e A2 dovresti scrivere qualcosa del genere

    With WsDestinazione

      .Range("A1").Value = TextBox1.Text

      .Range("A2").Value = TextBox2.Text

    End With

    Ecco che in base a quale CommandButton hai cliccato poiché è stato settato o il worksheet Prova1 o il worksheet Prova2 i dati saranno inserti in A1 e A2 del rispettivo foglio.

    Spero sia stata chiara la cosa.

    ciao

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-10-23T15:28:27+00:00

    Ciao Chiara ,

    o 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?

    Ho l'impressione che, come con un iceberg, la parte preponderante della tua domanda sia nascosta e si mostrerà solo in seguito! :-))

    Tuttavia, prendendo la tua domanda alla lettera, suggerirei di sostituire i controlli CommandButton (controlli activeX) con dei pulsanti dei controlli Modulo e sfruttare del codice del seguente genere:

    '=========>>

    Option Explicit

    Public destFoglio As Worksheet

    '--------->>

    Public Sub Tester()

        Dim sNome As String

        sNome = ActiveSheet.Buttons(Application.Caller).Caption

        Set destFoglio = ThisWorkbook.Sheets(sNome)

    End Sub

    '<<=========

    Per ciascuno dei pulsanti di interesse, fai clic con il pulsante destro del mouse sul pulsante e assegnarlo alla precedura Tester.

    In questo modo il foglio denominato con la didascalia del  selezionato pulsante diventerà il foglio do destinazione.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento