› Excel e gli applicativi Microsoft Office › Restituzione di più valori da un foglio all'altro vincolato ad una ricerca
-
AutoreArticoli
-
Ciao avete ragione. scusate, è vero i select con gli activeate sono rimaste come refuso del debugging....
Così come altri dettagli ma avevo fretta e avevo finito. Il tempo a mia disposizione.
Ecco spiegato anche il dim senza range (quindi come variant) e il cerca in cells anziché in un range specifico (lo.avevo settato ma male e poi. Non l'ho più sistemato...
Domani provvedo
Grazie
Ciao
Ciao A tutti,
Ecco la macro riveduta e corretta
Sub CercaeCompila() Dim MioDip As Range Dim MiaCellaDip As Range Dim MioRisultato As Range Dim Giorno As Range Dim Negozio As Range Dim AddressIni As String Application.ScreenUpdating = False Call pulisci_specchietto For Each MioDip In Worksheets("INFO").Range("F1:F9") Set MiaCellaDip = Worksheets("GEN.RAGAZZE (3)").Range("A2:R90").Find(MioDip.Value, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows) Set MioRisultato = Worksheets("GEN.RAGAZZE (4)").Range("D1:O52").Find(Trim(MiaCellaDip.Value), LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows) If Not MioRisultato Is Nothing Then AddressIni = MioRisultato.Address Do For Each Giorno In MiaCellaDip.Offset(1, -2).Resize(13, 2) If Giorno = MioRisultato.EntireRow.Cells(1, 1).Offset(-(MioRisultato.Row - 4) Mod 7, 0) Then If Giorno.Offset(0, 1) = "" Then Set Negozio = Giorno.Offset(0, 1) Else Set Negozio = Giorno.Offset(0, 1) Set Negozio = Negozio.Offset(1, 0) End If Negozio = MioRisultato.EntireColumn.Cells(1, 1).Offset(0, -2) Negozio.Offset(0, 1) = FormatDateTime(MioRisultato.Offset(0, -2).Value, vbShortTime) Negozio.Offset(0, 2) = FormatDateTime(MioRisultato.Offset(0, -1).Value, vbShortTime) Exit For End If Next Set MioRisultato = Worksheets("GEN.RAGAZZE (4)").Range("D1:O52").FindNext(MioRisultato) Loop While Not MioRisultato Is Nothing And AddressIni <> MioRisultato.Address End If Next Application.ScreenUpdating = True End SubGrande @luca73
Ora te ne dico un'altra e vedrai che avrà i suoi frutti
Worksheets("INFO")
Ma anche le altre istruzioni del genere, dopo essere entrato nell'editor di VBA, clicca sul foglio interessato e nella finestra delle proprietà rinomina il foglio come meglio credi.
Perché:
1) codice più leggibile e più facile da scrivere
2) nel caso in cui l'utente modificasse il nome del foglio, la tua istruzione andrebbe in errore perché fa riferimento ad un foglio inesistente. Invece facendo come ti ho detto andrebbe tutto liscio
Sub EsportaPdf() Dim datada As String Dim dataa As String datada = Cells(3, 2) dataa = Cells(4, 2) With ActiveSheet.PageSetup .Orientation = xlLandscape .PrintArea = "$A$1:$R$77" .Zoom = False .FitToPagesTall = False .FitToPagesWide = 1 End With ActiveSheet.ExportAsFixedFormat _ Type:=xlTypePDF, _ FileName:=("PERCORSO MIO" & datada & " - " & dataa), _ Quality:=xlQualityStandard, _ IncludeDocProprieties:=False, _ IgnorePrintAreas:=False, _ From:=1, _ To:=5, _ OpenAfterPublish:=True End Subragazzi dov'è che sbaglio qui?
Intanto io riallego la mia proposta, che ho completato prevedendo la possibilità di scegliere un dipendente dall'elenco in Q31 del foglio GEN.RAGAZZE (4) (cioè quello che contiene gli inserimenti giorno per giorno, dipendente per dipendente, nei vari negozi e orari). Quando si sceglie un dipendente dall'elenco viene compilato lo specchietto sottostante (solo per quel dipendente).
Ho dovuto spacchettare le varie funzioni per rendere pubbliche le due Collections di dati e quindi visibili sia ai pulsanti del riepilogo generale sia all'evento Change del foglio in questione. La soluzione delle due Collections permette di avere i dati già a disposizione per qualsiasi manipolazione (come fossero in un recordset), mentre l'approccio di Luca73 è più statico e lavora una tantum direttamente in loco (non è una critica, è solo un modo diverso di arrivare a una soluzione).
Allego il file, revisione 4.
Allegati:
You must be logged in to view attached files.ragazzi dov'è che sbaglio qui?
Molto probabilmente il parametro FileName.
@ LucaSR, non ho capito cosa vuoi dire spiega meglio...
Non saprei spiegarlo meglio di come ho fatto
Molto probabilmente il parametro FileName.
come potrei scrivere per salvare il file con cella (3,2) "-" cella(4,2) come nome del file?
Molto probabilmente il parametro FileName.
Oltre a quello (il nome del file è errato perchè conterrebbe delle date che in Windows sono costruite con lo slash e lui non accetta lo slash come parte del nome di file) ExportAsFixedFormat non è un membro dell'oggetto ActiveSheet, devi specificare proprio il foglio con Worksheets(...) oppure col suo codename come ha già detto LucaSR (nota per rispondere alla sua osservazione di prima: non è sempre facile per l'utente capire qual è il codename di un foglio).
come potrei scrivere per salvare il file con cella (3,2) "-" cella(4,2) come nome del file?
Puoi formattare la data con Format:
Format(datadal, "dd-mm-yyyy")e questo restituisce una cosa valida per Win come
13-12-2023nota per rispondere alla sua osservazione di prima: non è sempre facile per l'utente capire qual è il codename di un foglio
Posso capirlo ma non saprei come spiegarmi meglio, magari provaci tu @vecchio frac
Tipo cosi?
Sì. O anche così:
Sub EsportaPdf() Dim datada As String Dim dataa As String datada = Format(Cells(3, 2), "dd-mm-yyyy") dataa = Format(Cells(4, 2), "mm-dd-yyyy") With ActiveSheet With .PageSetup .Orientation = xlLandscape .PrintArea = "$A$1:$R$77" .Zoom = False .FitToPagesTall = False .FitToPagesWide = 1 End With .ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:="C:\USERS\....\PERCORSO MIO\" & datada & " - " & dataa & ".pdf", _ Quality:=xlQualityStandard, _ IncludeDocProprieties:=False, _ IgnorePrintAreas:=False, _ From:=1, _ To:=5, _ OpenAfterPublish:=True End With End SubOvviamente devi sistemare la parte mancante col tuo nome utente e verificare che PERCORSO MIO esista.
Nota: ho detto una caxxata poco. fa. Naturalmente il metodo ExportAsFixedFormat funziona con ActiveSheet perchè questo è un oggetto di tipo Worksheet. Scusate lo svarione. Ma voi fatele notare queste cose, non abbiate timore di farlo.
@ LucaSR, non ho capito cosa vuoi dire spiega meglio...
Ciao Luca73, quello che intende dire LucaSR è questo: non utilizzare i nomi dei fogli nel codice (quelli delle linguette assegnati dall'utente) perchè sono mutevoli e l'utente può modificarli, mandando potenzialmente in blocco il codice.
Meglio utilizzare il nome interno del foglio, il suo codename, perchè quello è assegnato da Excel e non è facile cambiarlo nemmeno in progettazione.Il codename si ricava dalla finestra progetti oppure in Immediata, per esempio con il comando "? activesheet.codename".

Ovviamente devi sistemare la parte mancante col tuo nome utente e verificare che PERCORSO MIO esista.
Mi da sempre questo errore.... il percorso per mac lo visualizza diverso
Allegati:
You must be logged in to view attached files.Allego file definitivo @vecchiofrac come mi hai chiesto ieri....
nel foglio TURNI ci sono due pusati, uno per stamparepdf il foglio turni celle A1:R77 e un pulsante per stamparepdf foglio TOTALE celleA1:T77..
che ovviamente nn funziona, ma il massimo lo hai già fatto
Allegati:
You must be logged in to view attached files.Ah già, si tratta sempre di Mac... non ho idea di come si individua un file su quel file system.
Mi documento un attimo. Vediamo anche se ExportAsFixedFile è disponibile sulla tua versione di Excel.che ovviamente nn funziona
Non funziona solo la stampa pdf o anche tutto il resto?
Non funziona solo la stampa pdf o anche tutto il resto?
no no... il resto funziona alla grande... ho messo anche formatt cond con colori per identificare subito il dipendente sulla compilazione... il resto alla grande... i due pulsanti erano solo per archiviazione mia degli orari.... NOTA BENE, se ci fosse soltanto un pulsante che mi stampa i due fogli in unico pdf forse anche meglio...
Nell'ultimo file allegato c'è un errore nella routine di esportazione perchè c'è un parametro scritto male:
IncludeDocProprieties:=False, _deve essere
IncludeDocProperties:=False, _il resto funziona alla grande
Comunque dai uno sguardo anche al mio ultimo file, revisione 4, che ha cambiato un po' le carte in tavola (intendo nella stesura del codice) e ti permette di selezionare un singolo dipendente dal menu a tendina in Q31, che era una delle richieste
(nel file che hai postato adesso invece non c'è bozza di questa funzionalità).NOTA BENE, se ci fosse soltanto un pulsante che mi stampa i due fogli in unico pdf forse anche meglio
Si può fare anche questo, basta selezionare i due fogli e applicare ExportAsFixedFormat alla Selezione.
Esempio, raggruppo i primi due fogli e li esporto:
workSheets(Array(worksheets(1).name, worksheets(2).name))selection.exportasfixedformat xltypepdf, "c:\users\.....\desktop\pippo.pdf"over the top funziona... ho cambiato solo questo
datada = Format(Cells(2, 2), "mmm-dd-ddd-yy") dataa = Format(Cells(3, 2), "mmm-dd-ddd-yy")cosi mi restituisce dic-11-lun-23 || dic-17-dom-23.pdf avevo fatto anche un errore sulle celle... erano le 2,2 e 3,2
Si può fare anche questo, basta selezionare i due fogli e applicare ExportAsFixedFormat alla Selezione.
ecco mi hai fatto risanguinare il naso..... io ad ora ho questo che funziona.... andrebbe aggiunto sempre nell'unico pdf chiamato con lo stesso nome, di agiungere prima la stampa pdf di A1:T54.....
Sub EsportaPdf() Dim datada As String Dim dataa As String datada = Format(Cells(2, 2), "mmm-dd-ddd-yy") dataa = Format(Cells(3, 2), "mmm-dd-ddd-yy") With ActiveSheet With .PageSetup .Orientation = xlLandscape .PrintArea = "$A$1:$R$77" .Zoom = False .FitToPagesTall = False .FitToPagesWide = 1 End With .ExportAsFixedFormat _ Type:=xlTypePDF, _ FileName:="/Users/XXXXXX/Documents/OrarioDipendenti/" & datada & " || " & dataa & ".pdf", _ Quality:=xlQualityStandard, _ IncludeDocProperties:=False, _ IgnorePrintAreas:=False, _ From:=1, _ To:=5, _ OpenAfterPublish:=False End With End Sub -
AutoreArticoli
