I figli d'arte sono all'altezza dei genitori? Vieni a parlarne su Award & Oscar.
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Macro per file fatture

Ultimo Aggiornamento: 22/11/2018 08:54
Post: 1
Registrato il: 17/11/2018
Utente Junior
2007
OFFLINE
17/11/2018 20:32

Ciao a tutti!

Sto lavorando a un file per compilare fatture (e ci ho messo una giornata perchè sono molto alle prime armi, quindi pietà per le eventuali castronerie); sono riuscita a creare ei riferimenti a prodotti e clienti dal menu a discesa e a inserire una macro perchè con il i dati della fattura si salvino in un altro foglio di lavoro, vorrei creare una seconda macro che salvi automaticamente il foglio in pdf in una cartella sul desktop con come nome il numero della fattura (in B16), un anderscore e il nome del destinatario della fattura (in E8), e faccia scattare il numero progressivo nel numero di fattura (in B16).

Il codice uscito dalle mie elucubrazioni è


Sub SalvaPdf()
'
' salvapdf Macro
'
' Scelta rapida da tastiera: CTRL+MAIUSC+Q

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Users\Giulia\Desktop\Fatture\" & Range("B16").Value & "_" & Range("E8").Value & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True

End With
Application.DisplayAlerts = True
Range("B16").Value = Range("B16").Value + 1

End Sub



ma non funziona e non riesco a risalire all'errore; potete aiutarmi? E in secondo luogo, secondo voi posso unire questa macro con quella già creata che salva i dati in un altro foglio di lavoro?

Grazie mille e buona serata
Post: 736
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
17/11/2018 23:30

A parte un 'End With' orfano non c'è niente di sbagliato nella riga di codice.
Forse il problema nasce dalla mancata correttezza/congruenza/validità dei dati contenute nelle celle che vanno a formare il nome del file ma senza un file esempio allegato non è possibile valutare oltre.

(Quasi) Tutte le macro si possono unire ma anche in questo caso il problema è che in mancanza di un file esempio ... ci vuole una sfera di cristallo.

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 1
Registrato il: 17/11/2018
Utente Junior
2007
OFFLINE
17/11/2018 23:46

Hai ragione, ho dimenticato di allegare il file...
(intanto ho momentaneamente eliminato la macro già funzionante perchè è disordinata da morire con il fatto che non riesco a copiare intervalli separati insieme e devo fare avanti e indietro tra le pagine ventordici volte)
[Modificato da Giulia Ravanelli 17/11/2018 23:48]
Post: 737
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
18/11/2018 00:17

Probabilmente nel VBA non hai attivato la visualizzazione della 'Finestra Proprietà' altrimenti ti saresti accorta che il foglio Fattura corrisponde al Foglio3 e non al 4 come riportato nella macro.
[Modificato da rollis13 18/11/2018 00:18]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 2
Registrato il: 17/11/2018
Utente Junior
2007
OFFLINE
18/11/2018 09:17

Credevo che inserendo ActiveSheet all'inizio pescasse in automatico il foglio giusto ☹
Comunque anche modificandolo in

Sub SalvaPdf()
'
' salvapdf Macro
'
' Scelta rapida da tastiera: CTRL+MAIUSC+Q

With ThisWorkbook
Sheets("Foglio3").Select.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Users\Giulia\Desktop\Fatture\" & Range("B16").Value & "_" & Range("E8").Value & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True

Application.DisplayAlerts = True
Range("B16").Value = Range("B16").Value + 1

End Sub


Mi dà il messaggio di errore "previsto End With", dove lo devo inserire?
Post: 4.005
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
18/11/2018 10:31

Ciao Giulia

Credo che tu possa eliminare il With ThisWorkbook ed anche Application.DisplayAlerts = True
[Modificato da alfrimpa 18/11/2018 10:33]

Alfredo
Post: 3
Registrato il: 17/11/2018
Utente Junior
2007
OFFLINE
18/11/2018 10:38

Ciao Alfredo,
ho provato, ma se li tolgo di dà errore di indice non compreso nell'intervallo; tenendoli invece "solo" di previsto End With.
Post: 4.006
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
18/11/2018 11:30

Ciao Giulia

L'istruzione With non serve ad evitare l'errore (se questo c'è) ma per altro.

L'errore di run-time 9 indice non incluso nell'intervallo vuol dire che il VBA non trova qualcosa che ci dovrebbe essere (nella maggior parte dei casi un foglio che non esiste).

Qual è l'istruzione che ti viene evidenziata in giallo dal debug?

Alfredo
Post: 4
Registrato il: 17/11/2018
Utente Junior
2007
OFFLINE
18/11/2018 11:50

Ciao Alfredo,

L'errore è sulla prima riga (il che mi perplime un po'), allego lo screen.
Post: 4.007
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
18/11/2018 12:02

Ciao Giulia

Sembra strano anche a me comunque l'End With mettilo prima de Range("B16").Value ma non penso che ti risolva l'errore di run-time 9.

Perchè hai messo On Error Resume Next?

Alfredo
Post: 5
Registrato il: 17/11/2018
Utente Junior
2007
OFFLINE
18/11/2018 12:23

Ciao Alfredo,
End With inserito ma come previsto non cambia niente; On Error Resume Next l'ho inserito perchè cercano esempi l'ho visto usare in altri codici dicendo che aiutava a non far impallare la macro (mi è sembrato strano ma sono talmente novellina che mi sono fidata).
Post: 4.008
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
18/11/2018 13:49

Giulia l'errore è causato dal fatto che nel file (almeno quello che hai allegato) non c'è nessun Foglio3

Per quanto riguarda l'istruzione On Error Resume Next va detto che va utilizzata con estrema cautela.

Come potrai capire questa fa si che se si verifica un errore (di qualsiasi natura) la macro passa all'istruzione successiva.

Ma questo non va bene perchè non si può mai esser sicuri delle conseguenze che un errore causa.

Gli errori vanno gestiti non evitati (ma questa è un'altra storia [SM=g27828] )

Se il tuo scopo è salvare il PDF della fattura più tardi provo a proporre una macro.

Alfredo
Post: 4.009
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
18/11/2018 14:14

Giulia prova questa macro che dovrai inserire in un modulo standard (non nel modulo del foglio come la precedente)

vb
Sub stampa_pdf()
Dim sNome As String
With ThisWorkbook.Worksheets("fattura")
   sNome = .Range("B16").Value & " - " & .Range("E8").Value
   .Range("A1:J65").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\Giulia\Desktop\Fatture\" & sNome & ".pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
End With
Range("B16").Value = Range("B16").Value + 1
End Sub


dovrebbe andare.

Fai sapere.
[Modificato da alfrimpa 18/11/2018 14:15]

Alfredo
Post: 6
Registrato il: 17/11/2018
Utente Junior
2007
OFFLINE
18/11/2018 14:49

Ciao Alfredo,

grazie per il codice; ho eliminato tutte le macro presenti e inserito la tua in un modulo esterno al foglio, ma mi dà errore di run-time 5, dove sto sbagliando?
Post: 4.010
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
18/11/2018 15:29

Ciao Giulia

Prima di postare la macro l’ho provata e a me ha funzionato.

Se non alleghi il file che ti dà l’errore è impossibile dire dove stai sbagliando.
[Modificato da alfrimpa 18/11/2018 15:54]

Alfredo
Post: 7
Registrato il: 17/11/2018
Utente Junior
2007
OFFLINE
18/11/2018 16:10

Ciao Alfredo,
riallego una copia del file "ripulito" con solo la macro in un modulo esterno.

(grazie per la pazienza)
Post: 4.011
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
18/11/2018 17:23

Mah Giulia anche con il tuo file a me la macro funziona.

vb
Sub stampa_pdf()
Dim sNome As String
With ThisWorkbook.Worksheets("fattura")
   sNome = .Range("B16").Value & " - " & .Range("E8").Value
   .Range("A1:J65").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Excel\" & sNome & ".pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
End With
Range("B16").Value = Range("B16").Value + 1
End Sub


Ovviamente devi sostituire il percorso che ho usato io ("C:\Excel") con il tuo ("C:\Users\Giulia\Desktop\Fatture\")

Sei sicura che tutte le directory di questo esistano e che si chiamino così?

Eventualmente creati una directory C:\Excel\ e riprova con la mia macro.

Ti allego il file.

Fai sapere.

Alfredo
Post: 8
Registrato il: 17/11/2018
Utente Junior
2007
OFFLINE
19/11/2018 15:39

Ciao Alfredo,
usando la macro inserita nel file che hai allegato funziona perfettamente, grazie!
Approfitto del topic per un'ultima domanda: se volessi accodare un'altra macro che copia dei valori della fattura in una tabella in un'altro foglio (funzionante e testata, anche se inelegante perchè non posso fare selezioni di intervalli multipli e quindi ci sono molto passaggi singoli di celle tra i fogli) per avere tutte le operazioni su un solo pulsante basta incollarla in fondo a questa (prima dell'end sub e con un altro end with) o se ci sono troppe direttive la macro finale diventa poco funzionale/lenta?

Grazie ancora,
Giulia
Post: 4.013
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
19/11/2018 15:44

Ciao Giulia

Per fare quello che chiedi non ci sono problemi (una macro può avere anche centinaia di righe).

Allega però, come al solito, un file di esempio dove mi fai vedere quello che vuoi fare.

Resto in attesa.

Alfredo
Post: 9
Registrato il: 17/11/2018
Utente Junior
2007
OFFLINE
19/11/2018 20:33

Ciao Alfredo,
sempre sullo stesso file, ho registrato (non ero sicura di come scriverla senza farla) una macro che copi numero di fattura, data, intestatario e importo in una tabella nel foglio accanto a quello della fattura.
Il codice è



Sub RegistraFatture()
'
' RegistraFatture Macro
'

'
Range("B18").Select
Selection.Copy
Sheets("REGISTRO").Select
Range("E3").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.NumberFormat = "[$-410]d-mmm-yy;@"
Sheets("Fattura").Select
Range("B16").Select
Selection.Copy
Sheets("REGISTRO").Select
Range("E4").Select
ActiveSheet.Paste
Sheets("Fattura").Select
Range("E8").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("REGISTRO").Select
Range("E5").Select
ActiveSheet.Paste
Sheets("Fattura").Select
Range("E34").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("REGISTRO").Select
Range("E6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("E3:E6").Select
Application.CutCopyMode = False
Selection.Copy
Range("E6").Select
Selection.End(xlDown).Select
Selection.End(xlToLeft).Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Range("E3:E6").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Sheets("Fattura").Select
Range("B16").Select
End Sub



Post: 4.019
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
19/11/2018 22:36

Ciao Giulia

Hai scritto un romanzo [SM=g27828]

Questa macro fa quello che hai chiesto; ogni volta che la eseguirai i dati verranno inseriti sul foglio "Registro" nella prima riga vuota disponibile.

vb
Sub CopiaSuRegistro()
Dim ur As Long
ur = Sheets("Registro").Cells(Rows.Count, 1).End(xlUp).Row
Sheets("Registro").Cells(ur + 1, 1).Value = Sheets("Fattura").Range("B18").Value
Sheets("Registro").Cells(ur + 1, 2).Value = Sheets("Fattura").Range("B16").Value
Sheets("Registro").Cells(ur + 1, 3).Value = Sheets("Fattura").Range("E8").Value
Sheets("Registro").Cells(ur + 1, 4).Value = Sheets("Fattura").Range("E34").Value
End Sub


Poi tornando alla macro precedente (salvataggio della fattura in PDF) mi spieghi per mia curiosità perchè hai questo tipo di necessità?

Avresti un numero abnorme di file PDF (uno per fattura) quando costruendo una tabella apposita denominata Ordini in cui ci vai a mettere tutti di dati necessari avendo un unico modulo di fattura potremmo ricavare la fattura di qualsivoglia cliente ed in ogni momento senza dover stare andare a ricercare nei meandri dell'hard disk il PDF di questo o quel cliente.
[Modificato da alfrimpa 19/11/2018 22:54]

Alfredo
Post: 10
Registrato il: 17/11/2018
Utente Junior
2007
OFFLINE
19/11/2018 23:22

Ciao Alfredo,
Lo so, è gigantesco [SM=g27828] ma non sapevo come scriverlo senza registrarmi mentre lo facevo. Quindi per inserirla in coda all'altra basta metterla tra un nuovo end with e l'end sub?

Mi piace la tua idea, potrei implementare ulteriormente macro e tabella che già ho (anche se non sono certa di come "dire" al codice di trascrivere anche le righe i prodotti), ma mi risulta comodo anche salvarle già in pdf per poterle stampare per il commercialista e inviare ai clienti a fine giornata, senza dover fare il lavoro due volte (nulla mi vieta di cancellarle poi altrettanto in blocco quando non mi servono più o archiviarle in un hard disk esterno)
[Modificato da Giulia Ravanelli 19/11/2018 23:24]
Post: 4.020
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
19/11/2018 23:41

Domani provo a farti un esempio di quello che intendo.

Però dall’1 gennaio 2019 che io sappia sarà obbligatoria per tutti la fatturazione elettronica per cui non so se si potrà continuare ad usare Excel per l’emissione di fatture.

P.S. Il codice dell’ultima macro lo hai capito? Perchè è questa la cosa più importante.
[Modificato da alfrimpa 20/11/2018 09:16]

Alfredo
Post: 11
Registrato il: 17/11/2018
Utente Junior
2007
OFFLINE
20/11/2018 13:29

Non ho ancora avuto modo di provarla e studiarmela bene ma a prima lettura mi sembra di capirla (anche se mi sconvolge quanto sia più breve della mia 😂)
Io comunque sono forfettaria, quindi la fattura elettronica non mi tange.
Post: 4.021
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
20/11/2018 14:01

Re:
Giulia Ravanelli, 20/11/2018 13.29:


Io comunque sono forfettaria, quindi la fattura elettronica non mi tange.



E questa, per te, è una buona notizia [SM=g27828]

Comunque nella ultima macro forse l'istruzione un po' "criptica" è questa

vb
ur = Sheets("Registro").Cells(Rows.Count, 1).End(xlUp).Row


con la quale non facciamo altro che memorizzare nella variabile ur il numero di riga dell'ultima cella piena in colonna A.

Sulle altre credo che ci puoi arrivare tranquillamente da sola [SM=g27828]

Sto provando a "riealborare" un po' il tuo file; appena pronto te ne offro un assaggio [SM=g27828]

Alfredo
Post: 4
Registrato il: 12/11/2018
Città: NAPOLI
Età: 31
Utente Junior
Excel 2010
OFFLINE
21/11/2018 23:22

Ragazzi, scusatemi se mi intrometto... Ma lo sapete che ora questo tipo di programma non andrà più bene? Ora l esportazione deve avvenire secondo dei campi predefiniti, colonne ben precise formato ben preciso quale. Xml........
Non è per fare nessuna critica, siamo chiari ( non è neanche il caso a... Stiamo qui per imparare e conoscere nuove cose ed è bello e da apprezzare quello che stai facendo) ma credo che sia opportuno avvisarti che se sei novellina e questo programmino ti serve per la tua azienda o per il tuo titolare così come lo stai facendo non va bene.... Una volta lo feci pure io, ma lo tengo buttato
nel hard disk perché dal primo gennaio va in vigore la fattura elettronica
Post: 739
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
21/11/2018 23:37

Scusa Danilo(93), ma qual è il tuo dubbio ?
La Fatturazione Elettronica (che è già in vigore, tra l'altro, per alcune categorie) altro non è che una trasmissione telematica di un documento 'contabile' che può benissimo essere fatta con quanto mette gratuitamente a disposizione l'Agenzia delle Entrate nel suo sito, basta riportare il necessario.
A monte "qualcuno" dovrà pure creare questo documento con tutti i dettagli: numerazione, mittente, destinatario, articoli, quantità, prezzi, sconti, aliquote, ecc. e per questo ci vorrà sempre un "qualcosa" che la crea; non penserai che nella Fatturazione Elettronica siano a disposizione anche i database/archivi con tutti i tuoi dettagli.
Che poi successivamente sia anche necessario un XLM per la parte digitale PEC o PIN, trasmissione, conservazione questo è tutt'altra cosa.
[Modificato da rollis13 21/11/2018 23:41]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 12
Registrato il: 17/11/2018
Utente Junior
2007
OFFLINE
22/11/2018 08:54

Danilo, grazie per la preoccupazione, ma il mio regime fiscale è (almeno fino alle ultime disposizioni) esente da obbligo fattura elettronica; fino a quando o se non cambieranno le cose sono ancora tenuta alla fattura cartacea [SM=g27823]
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 07:28. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com