Risultati da 1 a 30 di 30

Discussione: Evidenzia colore dopo stampa



  1. #1

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7166
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1305

    Evidenzia colore dopo stampa

    Salve a tutti,
    sto cominciando a scrivere qualche riga (ma giusto qualche riga!) di codice vba, sono un po' come alle elementari quando si impara a leggere e scrivere, quando si è ai primi giorni. :127:
    Vengo al problema.
    Nel Foglio2 ho un data base con diversi dati che tramite delle formule richiamo in un prospetto posizionato nel Foglio1 e che quindi stampo.
    Dopo aver fatto diverse stampe, dovrei però capire quali dati ho stampato e quali ho ancora da stampare e ho pensato ad un codice che:
    1) mi evidenzi di rosso la riga in cui c'è il dato nel Foglio2
    2) mi evidenzi di rosso anche il dato stampato nel prospetto Foglio1 in modo che se ricerco quel dato vedo già che è stampato (colorato) direttamente dal prospetto del Foglio1 senza cercare nel data base.

    Se avete altri suggerimenti al posto del colore della riga ben vengano, il mio obiettivo è solo di sapere i dati che ho stampato.
    Ovviamente, quale che sia la soluzione vorrei un aiuto nella scrittura del codice ... intanto che studio (alle elementari)!:127:
    Grazie anticipate.

    Per ulteriore chiarezza allego un file di esempio.

  2. #2
    L'avatar di Baloon_50
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Milano - Italy
    Età
    67
    Messaggi
    3347
    Versione Office
    2013 PC
    Likes ricevuti
    483
    Likes dati
    49
    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Salve a tutti,
    sto cominciando a scrivere qualche riga (ma giusto qualche riga!) di codice vba, sono un po' come alle elementari quando si impara a leggere e scrivere, quando si è ai primi giorni. :127:
    Vengo al problema.
    Nel Foglio2 ho un data base con diversi dati che tramite delle formule richiamo in un prospetto posizionato nel Foglio1 e che quindi stampo.
    Dopo aver fatto diverse stampe, dovrei però capire quali dati ho stampato e quali ho ancora da stampare e ho pensato ad un codice che:
    1) mi evidenzi di rosso la riga in cui c'è il dato nel Foglio2
    2) mi evidenzi di rosso anche il dato stampato nel prospetto Foglio1 in modo che se ricerco quel dato vedo già che è stampato (colorato) direttamente dal prospetto del Foglio1 senza cercare nel data base.

    Se avete altri suggerimenti al posto del colore della riga ben vengano, il mio obiettivo è solo di sapere i dati che ho stampato.
    Ovviamente, quale che sia la soluzione vorrei un aiuto nella scrittura del codice ... intanto che studio (alle elementari)!:127:
    Grazie anticipate.

    Per ulteriore chiarezza allego un file di esempio.
    Ges forse non è facile capire il tuo problema.
    nell'esempio che hai allegato in pratica nel foglio 1 fai il trasponi della riga del foglio 2 e se è così il punti 1) lo possiamo sistemare (naturalmente facendo il trasponi da VBA).
    Quello che non capisco a cosa ti serve evidenziare in rosso il foglio 1 se lo hai stampato tutto? cosa evidenzi?

    Aspetto lumi

    A volte basta usare parole inutili come “grazie” e “per favore” per rendere la vita più bella.
    (ELKonigsburg)
    Dice il saggio : "se vuoi essere aiutato devi metter l'allegato"
    (Nick Carter - Ten)

  3. #3

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7166
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1305
    Ciao Baloon,
    cerco di spiegarmi.
    Io oggi stampo pippo2, pippo7, pippo 10, bene! Vorrei che si evidenziano le righe corrispettive nel foglio 2 (mi serve per avere una veduta globale di quante ne sono stampate rispetto a quante ne mancano).
    Domani riprendo il lavoro, opero dal prospetto che ho nel foglio 1, se richiamo nella cella B4 dell'esempio che ho postato pippo2 o pippo7 o pippo10 (che ho stampato ieri) vorrei che il nome comparisse evidenziato in rosso così posso capire che quel nome l'ho già stampato.
    Ripeto è una mia idea per capire che l'ho già stampato, potrebbe andare bene che nel foglio 1 anche un messaggio (con msgbox) che quando premo il tasto stampa mi dice "Guarda che questo nome lo hai già stampato, lo vuoi ristampare?"
    Spero sia chiaro.

  4. #4

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1024
    Versione Office
    .
    Likes ricevuti
    367
    Likes dati
    0
    Citazione Originariamente Scritto da ges Visualizza Messaggio
    sto cominciando a scrivere qualche riga (ma giusto qualche riga!) di codice vba, sono un po' come alle elementari quando si impara a leggere e scrivere, quando si è ai primi giorni. :127:
    Ottimo!

    Allora, prima di scrivere i "Promessi Sposi" cerca di scrivere bene "come ti chiami" :70:

    Mi spiego: cerca di scrivere "per bene" la macro che hai scritto nel tuo file:
    Codice: 
    Sub Stampa()
      Range("A4:B13").Select
      Selection.PrintOut Copies:=1, Collate:=True
    End Sub
    ricordandoti che il metodo Select è quasi sempre inutile se non pericoloso.

    Poi, come secondo passo, inserisci in quella macro il codice necessario a marcare, nel Foglio2 colonna K, con una "X" la riga stampata, e magari evidenziandola in rosso.
    Come terzo passo puoi provare a marcare di rosso le celle B4:B13 se nella rispettiva cella K del Foglio2 c'è una "X".

    Edit: come terzo passo è meglio limitarsi a marcare di rosso solo la cella B4, magari con la formattazione condizionale.
    Ultima modifica fatta da:scossa; 16/09/15 alle 21:03
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  5. #5

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7166
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1305
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    ....

    Mi spiego: cerca di scrivere "per bene" la macro che hai scritto nel tuo file:
    Codice: 
    Sub Stampa()
      Range("A4:B13").Select
      Selection.PrintOut Copies:=1, Collate:=True
    End Sub
    ....
    Ho capito (credo)...
    Allora cambio il codice eliminando il Select dovrebbe andare bene lo stesso, così:
    Codice: 
    Sub Stampa()   
     Range("A4:B13").PrintOut Copies:=1, Collate:=True
    End Sub
    
    Per marcare il foglio 2 con una X sembra facile ...
    una soluzione sarebbe utilizzare l'If .. then ...credo
    mi viene da scrivere
    If
    PrintOut .... then.... :226:

  6. #6
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    3223
    Versione Office
    Excel2010
    Likes ricevuti
    628
    Likes dati
    155
    Ciao a tutti

    @ges
    se ho capito bene scossa suggerisce "prima" di End Sub nella tua macro inserisci:
    Codice: 
    range("K4:K13")="X"
    che se vuoi puoi anche colorare in rosso.

    Dai, non è difficile se segui scossa.
    Ciao,
    Mario

  7. #7

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1024
    Versione Office
    .
    Likes ricevuti
    367
    Likes dati
    0
    Citazione Originariamente Scritto da Marius44 Visualizza Messaggio
    se ho capito bene scossa suggerisce "prima" di End Sub nella tua macro inserisci:
    Codice: 
    range("K4:K13")="X"
    Eh no!
    non Range("K4:K13") ma solo Kn dove n è la riga da cui ha preso i dati per la stampa.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  8. #8

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1024
    Versione Office
    .
    Likes ricevuti
    367
    Likes dati
    0
    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Ho capito (credo)...
    Allora cambio il codice eliminando il Select dovrebbe andare bene lo stesso, così:
    Codice: 
    Sub Stampa()   
     Range("A4:B13").PrintOut Copies:=1, Collate:=True
    End Sub
    
    Ottimo.
    Però, visto che dobbiamo fare altre operazioni dopo aver stampato, devi pensare più in grande.
    Comincia ad esaminare il problema per vedere di quali variabili abbiamo bisogno.
    Io comincerei con:
    - una variabile che rappresenti il foglio in cui abbiamo i dati di origine (Foglio2)
    - una variabile che rappresenti il foglio in cui abbiamo i dati da stampare (Foglio1)
    - una variabile che rappresenti l'intervallo di celle del Foglio2 coi dati (A2:J20)
    - una variabile che rappresenti l'intervallo di celle da stampare (A4:B13) del Foglio1
    - una variabile che rappresenti la riga dell'intervallo di celle del Foglio2 coi dati (A2:J20) che è stata stampata (An:Jn)

    Bene, come prima cosa dichiara (istruzione Dim) queste variabili con il corretto tipo (Worksheet per i fogli, Range per gli intervalli di celle.
    Poi, cerca di assegnarle (istruzione Set visto che sono "oggetti") nel modo migliore.

    Al momento non preoccuparti di utilizzarle, limitati al Dim ed al Set.
    Ultima modifica fatta da:scossa; 16/09/15 alle 23:35
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  9. #9

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7166
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1305
    Ho cominciato a dichiarare alcune variabili (nomi stravaganti, ma è per imparare :188:)
    Starò andando bene?
    Codice: 
    Sub Stampa() 
       Dim topolino As Worksheet, paperino As Worksheet
       Dim minni As Range, paperina As range
     
      Set topolino = Worksheet(“Foglio1”)
      Set paperino = Worksheet(“Foglio2”)
      Set minni = (“Foglio2”).Range(A2:J20)
      Set paperina = (”Foglio1”).Range (A4:B13)
     
     Range("A4:B13").PrintOut Copies:=1, Collate:=True
     
    End Sub
    Mi sono bloccato nel dichiarare questa:

    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    ....
    - una variabile che rappresenti la riga dell'intervallo di celle del Foglio2 coi dati (A2:J20) che è stata stampata (An:Jn)
    ...
    Dopo averle dichiarate devo fargli fare qualcosa .... e questo comincia a essere più complicato per me :92:
    Mi sembra di avere in mano non "I promessi sposi" ma la traduzione in ebraico antico de "La Divina Commedia" :167:

  10. #10

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1024
    Versione Office
    .
    Likes ricevuti
    367
    Likes dati
    0
    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Ho cominciato a dichiarare alcune variabili (nomi stravaganti, ma è per imparare :188:)
    Sarebbe meglio cominciassi da subito ad usare dei nomi significativi per le variabili. creati una "convenzione" e cerca di seguirla sempre.
    Io, ad esempio, uso scrivere la prima lettera (o le prime due) in minuscolo e sarà in funzione del tipo di variabile: n per un numero, s per una stringa, d per una data, v per una variant, r per un range, wb per un Workbook, ws per un worksheet ....; seguiranno alcuni caratteri (di cui il primo maiuscolo) che dovranno essere "esplicativi", per esempio: dScad per una data di scadenza, wsFrom per il foglio da cui leggo i dati e wsTo per il foglio in cui devo scrivere i dati etcc...

    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Dopo averle dichiarate devo fargli fare qualcosa .... e questo comincia a essere più complicato per me :92:

    Hai scritto:
    Codice: 
    Range("A4:B13").PrintOut Copies:=1, Collate:=True
    ma prima avevi scritto Set paperina = (”Foglio1”).Range (A4:B13), quindi la tua istruzione diventa:
    Codice: 
    paperina.PrintOut Copies:=1, Collate:=True

    mi sono fermato su questa:
    una variabile che rappresenti la riga dell'intervallo di celle del Foglio2 coi dati (A2:J20) che è stata stampata (An:Jn)
    intanto dichiara con Dim una variabile di tipo Range poi, al momento giusto la si valorizza.
    Dai, riscrivi tutto con nomi di variabili esplicative poi vediamo di proseguire.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  11. #11

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7166
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1305
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Sarebbe meglio cominciassi da subito ad usare dei nomi significativi per le variabili. creati una "convenzione" e cerca di seguirla sempre.
    ...
    Prendo atto del suggerimento, meglio usare dei nomi più consoni da subito!

    Riscrivo il codice
    Codice: 
    
       Sub Stampa() 
       Dim vs1 As Worksheet, vs2 As Worksheet
       Dim rg1 As Range, rg2 As range
       Dim riga As Range
     
      Set vks1 = Worksheet(“Foglio1”)
      Set vks2 = Worksheet(“Foglio2”)
      Set rf2 = (“Foglio2”).Range(A2:J20)
      Set rf1 = (”Foglio1”).Range (A4:B13)
     
     Rf1.PrintOut Copies:=1, Collate:=True
     
    ????
     
    End Sub
    Adesso la mia testa di "excel formule" mi porta sempre a cercare una condizione.
    Cioè, se io devo ottenere il risultato SE la riga è stata stampata mi viene sempre da pensare ad una soluzione del tipo:
    Codice: 
    Riga = “X”
     For riga = 2 to 20
     If Cells(riga,2).Value = ??? (RIGA STAMPATA???!!!)
     Cells(riga,2).value = ????
     Exit for
     End If
     Next riga
    In pratica sono in alto mare!! :235:

  12. #12

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1024
    Versione Office
    .
    Likes ricevuti
    367
    Likes dati
    0
    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Riscrivo il codice
    Codice: 
    
       Sub Stampa() 
       Dim vs1 As Worksheet, vs2 As Worksheet
       Dim rg1 As Range, rg2 As range
       Dim riga As Range
     
      Set vks1 = Worksheet(“Foglio1”)
      Set vks2 = Worksheet(“Foglio2”)
      Set rf2 = (“Foglio2”).Range(A2:J20)
      Set rf1 = (”Foglio1”).Range (A4:B13)
    Scrivi in cima al modulo, come primissima istruzione
    Option Explicit
    e premi invio
    Poi dal menu Debug seleziona la voce "Compila VBAProject"

    Ti verrà segnalato un primo errore, poichè non hai dichiarato la variabile vks1.
    Infatti tu hai dichiarato delle variabili con un nome ma poi per le istruzioni Set hai usato dei nomi diversi: non si fa!!!

    Riscrivi il tutto, e non preoccuparti del codice dopo le istruzioni di stampa., lo vedremo dopo.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  13. #13

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7166
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1305
    Si, ero andato in confusione, credo ora vada meglio:

    Codice: 
       Sub Stampa() 
       Dim vks1 As Worksheet, vks2 As Worksheet
       Dim dati1 As Range, dati2 As range
       Dim riga As Range
     
      Set vks1 = Worksheet(“Foglio1”)
      Set vks2 = Worksheet(“Foglio2”)
      Set dati2 = (“Foglio2”).Range(A2:J20)
      Set dati1 = (”Foglio1”).Range (A4:B13)
      riga = 
    Grazie per la pazienza scossa.

  14. #14

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1024
    Versione Office
    .
    Likes ricevuti
    367
    Likes dati
    0
    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Si, ero andato in confusione, credo ora vada meglio:

    Codice: 
       Sub Stampa() 
       Dim vks1 As Worksheet, vks2 As Worksheet
       Dim dati1 As Range, dati2 As range
       Dim riga As Range
     
      Set vks1 = Worksheet(“Foglio1”)
      Set vks2 = Worksheet(“Foglio2”)
      Set dati2 = (“Foglio2”).Range(A2:J20)
      Set dati1 = (”Foglio1”).Range (A4:B13)
      riga = 
    Ho aperto un nuovo file, sono andato nell'editor del VBA ed ho inserito un modulo.
    Ho copiato il tuo codice:

    Codice: 
    Option Explicit
    
    
    Sub Stampa()
      Dim vks1 As Worksheet, vks2 As Worksheet
      Dim dati1 As Range, dati2 As Range
      Dim riga As Range
     
      Set vks1 = Worksheet("Foglio1")
      Set vks2 = Worksheet("Foglio2")
      Set dati2 = ("Foglio2").Range(A2:J20)
      Set dati1 = ("Foglio1").Range (A4:B13)
     End Sub
    e dal menu Debug ho cliccato Compila; questo il risultato:




    Ora chiediamoci perché l'istruzione
    Set vks1 = Worksheet("Foglio1")
    genera un errore.

    Se ti posizioni sulla parola Worksheet e premi F1, nell'help potrai leggere:
    L'oggetto Worksheet è un elemento dell'insieme Worksheets .....
    ciò significa che la parola chiave Worksheet rappresenta un'oggetto e non un'insieme di oggetti. Come dire che Worksheet è un elemento di un array e non l'array da cui estrarre un elemento. Quindi se tu vuoi assegnare a vks1 il Foglio1 quel foglio lo devi prendere dall'insieme Worksheets ....
    Sempre nell'help, tra gli esempi troverai la giusta sintassi.

    Riprova e correggi il codice sopra.

    P.S.: all'inizio sembra difficile, molto difficile; ma se ti impegni adesso poi il resto, se non in discesa, sarà in pianura.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  15. #15

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7166
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1305
    Cominciano ad aprirsi spazi di comprensibilità (almeno spero):

    Codice: 
    Sub Stampa()
      Dim vks1 As Worksheet, vks2 As Worksheet
      Dim dati1 As Range, dati2 As Range
      Dim riga As Range
     
      Set vks1 = Worksheets("Foglio1")
      Set vks2 = Worksheets("Foglio2")
      Set dati2 = vks2.Range("A2:J20")
      Set dati1 = vks1.Range("A4:B13")
      riga = vsk2.Range("k2:K20") ' intevallo in cui voglio inserire una X (oppure la dicitura "STAMPATO") dopo la stampa
      
      
      
      vks1.PrintOut Copies:=1, Collate:=True
      
     End Sub

  16. #16

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1024
    Versione Office
    .
    Likes ricevuti
    367
    Likes dati
    0
    Ma tu Option Explicit in test al modulo l'hai messo?

    Perché se provi a compilare il progetto otterrai una segnalazione di errore alla riga
    Codice: 
    riga = vsk2.Range("k2:K20")
    non solo per l'inversione delle lettere s e k, ma anche perché per istanziare una variabile oggetto devi usare l'istruzione Set.

    P.S.: inoltre Range("k2:K20") non rappresenta unna riga ma piuttosto una colonna, ma noi avevamo detto
    - una variabile che rappresenti la riga dell'intervallo di celle del Foglio2 coi dati (A2:J20) che è stata stampata (An:Jn)
    ma questa la vediamo dopo.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  17. #17

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7166
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1305
    Si, mi sono reso dopo che me lo hai fato notare di aver cambiato le lettere.
    Ma allora la riga può essere solo un numero che varia nell'intervallo del Foglio2(A2:J20) ... che direi 2, visto che la prima riga di detto intervallo è la seconda.
    Sbaglio ancora?
    Codice: 
    Sub Stampa()
      Dim vks1 As Worksheet, vks2 As Worksheet
      Dim dati1 As Range, dati2 As Range
      Dim riga As Range
     
      Set vks1 = Worksheets("Foglio1")
      Set vks2 = Worksheets("Foglio2")
      Set dati2 = vks2.Range("A2:J20")
      Set dati1 = vks1.Range("A4:B13")
      riga = 2
      
      
      
      vks1.PrintOut Copies:=1, Collate:=True
      
     End Sub

  18. #18

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1024
    Versione Office
    .
    Likes ricevuti
    367
    Likes dati
    0
    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Ma allora la riga può essere solo un numero che varia nell'intervallo del Foglio2(A2:J20) ... che direi 2, visto che la prima riga di detto intervallo è la seconda.
    Sbaglio ancora?
    Codice: 
    
      Dim riga As Range
     
      riga = 2
    Perché riga la dichiari come Range e poi, anziché un range (Set riga ....) le assegni un numero?

    Altra cosa: all'inizio tu volevi stampare l'intervallo A4:B13, ma con
    vks1.PrintOut Copies:=1, Collate:=True
    tu stampi tutte le celle del foglio. Quindi, visto che l'intervallo da stampare l'hai istanziato con:
    Set dati1 = vks1.Range("A4:B13")
    quale sarà l'istruzione corretta per stampare l'intervallo voluto?

    Per trovare l'intervallo di celle da assegnare a riga, pensa a come faresti, lato formule, ad individuare la riga relativa al valore scelto dall'elenco a discesa .....
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  19. #19

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7166
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1305
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    ....
    .... pensa a come faresti, lato formule, ad individuare la riga relativa al valore scelto dall'elenco a discesa .....
    Sarebbe semplice, una tra tante ... CONFRONTA(Valore;A2:B20;0)

    EDIT:
    Può essere così?
    Codice: 
    Codice: 
    nRow = Evaluate("MATCH(Foglio1!$B$4,Foglio2!$A$2:$A$20,0)

    Ultima modifica fatta da:ges; 21/09/15 alle 01:16

  20. #20

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1024
    Versione Office
    .
    Likes ricevuti
    367
    Likes dati
    0
    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Sarebbe semplice, una tra tante ... CONFRONTA(Valore;A2:B20;0)

    EDIT:
    Può essere così?
    Codice: 
    Codice: 
    nRow = Evaluate("MATCH(Foglio1!$B$4,Foglio2!$A$2:$A$20,0)

    Potrebbe andare, se la scrivessi correttamente (non vedo i doppi apici di chiusra stringa, né la parentesi di chiusura di Evaluate) .....
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  21. #21

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7166
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1305
    Mannaggia, c'è sempre qualcosa che mi sfugge.:292:
    Rimedio subito.
    Codice: 
    nRow = Evaluate("MATCH(Foglio1!$B$4,Foglio2!$A$2:$A$20,0)")

  22. #22

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1024
    Versione Office
    .
    Likes ricevuti
    367
    Likes dati
    0
    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Mannaggia, c'è sempre qualcosa che mi sfugge.:292:
    Rimedio subito.
    Codice: 
    nRow = Evaluate("MATCH(Foglio1!$B$4,Foglio2!$A$2:$A$20,0)")
    Perfetto, però non vedo come hai dichiarato nRow, quindi posta tutto il codice della Sub.

    P.S.: è buona abitudine, almeno per me, prima di End Sub, distruggere tutte le istanze delle variabili oggetto create. Quindi
    Set wks1 = Nothing
    Set wks2 = Nothing
    etc. etc.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  23. #23

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7166
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1305
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    ... però non vedo come hai dichiarato nRow, quindi posta tutto il codice della Sub.

    ...
    Posto di seguito la parte di codice scritto:

    Codice: 
    Sub Stampa()
      Dim vks1 As Worksheet, vks2 As Worksheet
      Dim dati1 As Range, dati2 As Range
      Dim nRow As Long
     
       Set vks1 = Worksheets("Foglio1")
       Set vks2 = Worksheets("Foglio2")
       Set dati2 = vks2.Range("A2:J20")
       Set dati1 = vks1.Range("A4:B13")
     
     
     
       nRow = Evaluate("MATCH(Foglio1!$B$4,Foglio2!$A$2:$A$20,0)")
     
       vks1.PrintOut Copies:=1, Collate:=True
       
     
        Set wks1 = Nothing 
        Set wks2 = Nothing
        Set dati2 = Nothing
        Set dati1 = Nothing
     
    End Sub

  24. #24

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1024
    Versione Office
    .
    Likes ricevuti
    367
    Likes dati
    0
    Citazione Originariamente Scritto da ges Visualizza Messaggio
    Posto di seguito la parte di codice scritto:

    Codice: 
    .... CUT
       vks1.PrintOut Copies:=1, Collate:=True
       
      .... CUT .....
    Come già detto sopra:
    Citazione Originariamente Scritto da scossa
    Altra cosa: all'inizio tu volevi stampare l'intervallo A4:B13, ma con
    vks1.PrintOut Copies:=1, Collate:=True
    tu stampi tutte le celle del foglio. Quindi, visto che l'intervallo da stampare l'hai istanziato con:
    Set dati1 = vks1.Range("A4:B13")
    quale sarà l'istruzione corretta per stampare l'intervallo voluto?
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  25. #25

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7166
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1305
    :292:
    Codice: 
    Sub Stampa()
      Dim vks1 As Worksheet, vks2 As Worksheet
      Dim dati1 As Range, dati2 As Range
      Dim nRow As Long
     
       Set vks1 = Worksheets("Foglio1")
       Set vks2 = Worksheets("Foglio2")
       Set dati2 = vks2.Range("A2:J20")
       Set dati1 = vks1.Range("A4:B13")
     
     
       nRow = Evaluate("MATCH(Foglio1!$B$4,Foglio2!$A$2:$A$20,0)")
     
       dati1.PrintOut Copies:=1, Collate:=True
       
            
     
        Set wks1 = Nothing
        Set wks2 = Nothing
        Set dati2 = Nothing
        Set dati1 = Nothing
     
    End Sub

  26. #26

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1024
    Versione Office
    .
    Likes ricevuti
    367
    Likes dati
    0
    Citazione Originariamente Scritto da ges Visualizza Messaggio
    :292:
    Codice: 
    Sub Stampa()
      Dim vks1 As Worksheet, vks2 As Worksheet
      Dim dati1 As Range, dati2 As Range
      Dim nRow As Long
     
       Set vks1 = Worksheets("Foglio1")
       Set vks2 = Worksheets("Foglio2")
       Set dati2 = vks2.Range("A2:J20")
       Set dati1 = vks1.Range("A4:B13")
     
     
       nRow = Evaluate("MATCH(Foglio1!$B$4,Foglio2!$A$2:$A$20,0)")
     
       dati1.PrintOut Copies:=1, Collate:=True
       
            
     
        Set wks1 = Nothing
        Set wks2 = Nothing
        Set dati2 = Nothing
        Set dati1 = Nothing
     
    End Sub
    Perfetto!

    Ora resta solo da colorare, nel Foglio2 la riga stampata ed aggiungere nella relativa colonna K una "X" in modo da poter usare la formattaizone condizionale nella cella Foglio1!B4 per evidenziarla in rosso se il valore è già stato stampato.
    Si potrebbe usare la formattazione condizionale anche per la riga del Foglio2, ma è più interesasnte farlo via codice.
    Sono solo due righe: una per il colore ed una per la "X"
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  27. #27

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7166
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1305
    Ho fatto diversi tentativi, così funziona:
    Codice: 
      Dim dati1 As Range, dati2 As Range
      Dim nRow As Long
     
       Set vks1 = Worksheets("Foglio1")
       Set vks2 = Worksheets("Foglio2")
       Set dati2 = vks2.Range("A2:J20")
       Set dati1 = vks1.Range("A4:B13")
     
    dati1.PrintOut Copies:=1, Collate:=True
    
    
    nRow = Evaluate("MATCH(Foglio1!$B$4,Foglio2!$A$2:$A$20,0)") + 1
    
    
    If dati1.PrintOut = True Then
    Sheets("Foglio2").Cells(nRow, 11) = "X"
    End If
     
     If dati1.PrintOut = True Then
     Range(Sheets("Foglio2").Cells(nRow, 1), Sheets("Foglio2").Cells(nRow, 10)).Interior.ColorIndex = 3
     End If
       
        Set wks1 = Nothing
        Set wks2 = Nothing
        Set dati2 = Nothing
        Set dati1 = Nothing
     
    End Sub
    Ma secondo i criteri che avevo impostato la parte con le condizioni (If ... End If) non dovrebbe dovrebbe funzionare così?
    Codice: 
    .. cut
    
    
    If dati1.PrintOut = True Then
    vks2.Cells(nRow, 11) = "X"
    End If
     
     If dati1.PrintOut = True Then
     Range(vks2.Cells(nRow, 1), vks2.Cells(nRow, 10)).Interior.ColorIndex = 3
     End If
       
       ...cut
     
    End Sub
    Invece , come sopra mi da errore.

    Altra cosa:
    qui ho dovuto mettere +1 altrimenti mi selezionala la riga superiore, perché?
    Codice: 
    nRow = Evaluate("MATCH(Foglio1!$B$4,Foglio2!$A$2:$A$20,0)") + 1

  28. #28

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7166
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1305
    Nel post sopra nel copia e incolla mi è saltato il primo pezzo, riscrivo tutto:
    Codice: 
    Sub Stampa()
      Dim vks1 As Worksheet, vks2 As Worksheet
      Dim dati1 As Range, dati2 As Range
      Dim nRow As Long
     
       Set vks1 = Worksheets("Foglio1")
       Set vks2 = Worksheets("Foglio2")
       Set dati2 = vks2.Range("A2:J20")
       Set dati1 = vks1.Range("A4:B13")
     dati1.PrintOut Copies:=1, Collate:=True
    
    nRow = Evaluate("MATCH(Foglio1!$B$4,Foglio2!$A$2:$A$20,0)") + 1
    
    
    If dati1.PrintOut = True Then
    Sheets("Foglio2").Cells(nRow, 11) = "X"
    End If
     
     If dati1.PrintOut = True Then
     Range(Sheets("Foglio2").Cells(nRow, 1), Sheets("Foglio2").Cells(nRow, 10)).Interior.ColorIndex = 3
     End If
       
        Set wks1 = Nothing
        Set wks2 = Nothing
        Set dati2 = Nothing
        Set dati1 = Nothing
     
    End Sub
    Segnalo due problemi per il codice sopra:
    1) che stampa 3 copie invece di una, eppure vedo bene che c'è inserito Copies:=1
    2)
    se adatto il codice ad un altra cartella alla riga:

    Codice: 
    nRow = Evaluate("MATCH(Foglio1!$B$4,Foglio2!$A$2:$A$20,0)") + 1
    mi viene fuori il seguente errore:
    "errore di rum-time "13" Tipo non corrispondente


  29. #29

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1024
    Versione Office
    .
    Likes ricevuti
    367
    Likes dati
    0
    Citazione Originariamente Scritto da ges Visualizza Messaggio
    .....

    Segnalo due problemi per il codice sopra:
    1) che stampa 3 copie invece di una, eppure vedo bene che c'è inserito Copies:=1
    Nell'codice postato vedo due volte l'istruzione PrintOut ......

    Poi l'istruzione
    Range(Sheets("Foglio2").Cells(nRow, 1), Sheets("Foglio2").Cells(nRow, 10)).Interior.ColorIndex = 3
    è sbagliata: nRow è la riga del range Foglio2!$A$2:$A$20 quindi a nRow pari a 1 corrisponde A2, a nRow pari a 5 corrisponde A6, etc....

    Bene, ti propongo il codice rivisto:
    Codice: 
    Sub Stampa()
      Dim vks1 As Worksheet
      Dim vks2 As Worksheet
      Dim dati1 As Range
      Dim dati2 As Range
      Dim nRow As Long
      
      Set vks1 = Worksheets("Foglio1")
      Set vks2 = Worksheets("Foglio2")
      Set dati2 = vks2.Range("A2:J20")
      Set dati1 = vks1.Range("A4:B13")
      
      
      nRow = Evaluate("MATCH(Foglio1!$B$4,Foglio2!$A$2:$A$20,0)")
      If dati1.PrintOut(Copies:=1, Collate:=True) Then
        dati2.Rows(nRow).Interior.ColorIndex = 3
        dati2.Cells(nRow, 11).Value = "X"
      End If
      Set wks1 = Nothing
      Set wks2 = Nothing
      Set dati2 = Nothing
      Set dati1 = Nothing
      
    End Sub
    Probabilmente sarebbe meglio che il colore delle righe stampate venisse applicato tramite formattazione condizionale, così ti basta cancellare la "X" per togliere il rosso.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  30. #30

    L'avatar di ges
    Clicca e Apri
    Data Registrazione
    Jun 2015
    Località
    Como
    Età
    53
    Messaggi
    7166
    Versione Office
    2011MAC 2016WIN
    Likes ricevuti
    2066
    Likes dati
    1305
    Bene, come si dice da qualche parte "ci mancava solo un tozzo così"! :127:

    Comunque da questo esercizio ho imparato tanto, ti ringrazio moltissimo scossa per la tua pazienza ma .... non credere di scappare avrò altre cose da chiedere! :167:
    Intanto nell'adattare l'esempio al file concreto ne approfitterò per fare una ripassata di questo :270:

Discussioni Simili

  1. [Risolto] Riempimento colore celle dopo la formattazione condizionale
    Di flavio227 nel forum Domande su Excel VBA e MACRO
    Risposte: 3
    Ultimo Messaggio: 09/03/17, 11:02
  2. [Risolto] Apertura Pdf dopo stampa
    Di Cristina1 nel forum Domande su Excel VBA e MACRO
    Risposte: 4
    Ultimo Messaggio: 03/03/17, 00:21
  3. [Risolto] evidenzia cella
    Di mariolino78 nel forum Domande su Excel in generale
    Risposte: 10
    Ultimo Messaggio: 08/02/17, 23:00
  4. Risposte: 2
    Ultimo Messaggio: 24/09/16, 04:15
  5. evidenzia i valori più alti della riga
    Di nanuccio nel forum Domande su Excel in generale
    Risposte: 3
    Ultimo Messaggio: 15/11/15, 21:59

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •