Excel - stampa da elenco a discesa

Anonimo
2014-09-03T08:27:02+00:00

Buongiorno,

ho creato un form in excel con dati collegati a un elenco a discesa (convalida dati)

Vorrei stampare il form per ogni elemento dell'elenco a discesa, senza dovere ogni volta selezionare l'elemento e lanciare la stampa.

Ho provato a registrare la macro corrispondente ma sembra che all'interno della macro non ci sia alcun riferimento all'elemento selezionato nell'elenco a discesa.

Grazie per il supporto.

TT

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
2014-09-03T13:21:00+00:00

Ho sostituito al msgbox l'istruzione di stampa e mi stampa sempre il foglio relativo al primo valore della lista.

    For Each c In rng

       sh.Range("A1").Value = c.Value

       ' il resto del tuo codice

    Next

La risposta è stata utile?

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

6 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2014-09-03T13:14:52+00:00

    Ok.

    Quasi ci siamo.

    Nel msgbox il valore cambia, ma non cambia nella cella e quindi non cambiano i valori collegati nel foglio di lavoro.

    Ho sostituito al msgbox l'istruzione di stampa e mi stampa sempre il foglio relativo al primo valore della lista.

    TT

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2014-09-03T13:03:16+00:00

    Mi restituisce un MsgBox con indicato il valore dell'intervallo a cui fa riferimento il convalida dati (nel caso specifico $XES$46:$XES$129

    Se la convalida dati contiene un riferimento a celle (non lo avevi specificato):

    Public Sub m()

        Dim sh As Worksheet

     Dim rng As Range

    Dim c As Range

        Set sh = ThisWorkbook.Worksheets("Foglio1")

        Set rng = sh.Range(sh.Range("A1").Validation.Formula1)

        For Each c In rng

    MsgBox c.Value

    Next

        Set c = Nothing

        Set rng = Nothing

        Set sh = Nothing

     End Sub

    Nella MsgBox vedrai di volta in volta il valori della convalida. Sostituirai la MsgBox con il codice che dovrà essere eseguito.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2014-09-03T12:41:40+00:00

    Grazie Mauro come sempre per la rapidità.

    Ho semplicemente un foglio di lavoro con una cella il cui valore si basa su un convalida dati impostato secondo una lista di valori predefiniti.

    Vorrei "ciclare" all'interno della lista predefinita e, per ogni valore, stampare il foglio di lavoro i cui dati cambiano in base al valore selezionato. 

    Ho provato ad inserire la tua sub all'interno del file per veder cosa succede.

    Mi restituisce un MsgBox con indicato il valore dell'intervallo a cui fa riferimento il convalida dati (nel caso specifico $XES$46:$XES$129

    Il ciclo si interrompe Ing=1

    Grazie

    TT

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2014-09-03T08:54:21+00:00

    Ho provato a registrare la macro corrispondente ma sembra che all'interno della macro non ci sia alcun riferimento all'elemento selezionato nell'elenco a discesa.

    Non è chiaro, almeno per me, cosa hai fatto.

    Scrivi di stampare il form: intendi una UserForm? Se sì, cosa c'è nella UserForm che riceve i dati quando selezioni la convalida dati?

    Ad ogni modo, per *ciclare* la convalida dati (che nell'esempio qui sotto si trova nella cella A1 del Foglio1), un modo:

    Public Sub m()

        Dim sh As Worksheet

        Dim rng As Range

        Dim sLista() As String

    Dim lng As Long

        Set sh = ThisWorkbook.Worksheets("Foglio1")

        Set rng = sh.Range("A1")

        sLista = Split(rng.Validation.Formula1, ";")

        For lng = 0 To UBound(sLista)

    MsgBox sLista(lng)

    Next

        Set rng = Nothing

        Set sh = Nothing

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento