Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
La risposta è stata tradotta automaticamente. Di conseguenza, potrebbero esserci errori grammaticali o parole insolite.
Ciao Luca
Grazie per la tua risposta.
Ottima domanda! Il problema del tuo codice attuale è che, dopo aver corretto la fattura nel Foglio 1 e aver eseguito nuovamente la macro AggiungiAlRegistro, questa aggiunge una nuova riga nel registro invece di aggiornare quella esistente. Per risolvere, dobbiamo modificare la macro per cercare la fattura nel registro e aggiornare i dati esistenti invece di aggiungere una nuova riga. Ecco come fare:
Passo 1: Modifica della Macro "AggiungiAlRegistro"
Aggiorna la macro per:
- Cercare se la fattura esiste già nel registro (tramite il numero fattura).
- Sovrascrivere i dati se esiste, altrimenti aggiungere una nuova riga. Sub AggiungiAlRegistro() Dim wsFattura As Worksheet Dim wsRegistro As Worksheet Dim prossimaRiga As Long Dim numeroFattura As String Dim rigaTrovata As Range Set wsFattura = ThisWorkbook.Sheets("Foglio1") Set wsRegistro = ThisWorkbook.Sheets("Foglio2") ' Ottieni il numero della fattura dal Foglio 1 numeroFattura = wsFattura.Range("B2").Value ' Cerca la riga nel registro Set rigaTrovata = wsRegistro.Columns(1).Find(What:=numeroFattura, LookIn:=xlValues, LookAt:=xlWhole) If Not rigaTrovata Is Nothing Then ' Se la fattura esiste, sovrascrivi i dati rigaTrovata.Offset(0, 1).Value = wsFattura.Range("B3").Value ' Data rigaTrovata.Offset(0, 2).Value = wsFattura.Range("B5").Value ' Cliente rigaTrovata.Offset(0, 3).Value = wsFattura.Range("B10").Value ' Importo MsgBox "Fattura " & numeroFattura & " aggiornata nel registro!", vbInformation Else ' Se non esiste, aggiungi una nuova riga prossimaRiga = wsRegistro.Cells(wsRegistro.Rows.Count, "A").End(xlUp).Row + 1 wsRegistro.Cells(prossimaRiga, 1).Value = numeroFattura wsRegistro.Cells(prossimaRiga, 2).Value = wsFattura.Range("B3").Value wsRegistro.Cells(prossimaRiga, 3).Value = wsFattura.Range("B5").Value wsRegistro.Cells(prossimaRiga, 4).Value = wsFattura.Range("B10").Value MsgBox "Nuova fattura " & numeroFattura & " aggiunta al registro!", vbInformation End If ' Cancella i dati della fattura (opzionale) If MsgBox("Vuoi cancellare i dati della fattura corrente?", vbYesNo) = vbYes Then wsFattura.Range("B2, B3, B5, B10").ClearContents End If End Sub
Passo 2: Come Funziona Ora
- Usi RiprendiFattura per caricare una fattura esistente nel Foglio 1.
- Modifichi i dati nel Foglio 1 (es. correggi l'indirizzo o l'importo).
- Quando esegui AggiungiAlRegistro, la macro:
- Cerca il numero della fattura nel registro.
- Se trova una corrispondenza, aggiorna la riga esistente.
- Se non trova nulla, aggiunge una nuova riga (come prima).
Note Importanti
- Blocca la Modifica del Numero Fattura:
- Se cambi il numero della fattura nel Foglio 1, la macro la tratterà come una nuova fattura.
- Per evitare duplicati, potresti aggiungere un controllo per impedire la modifica del numero fattura:
- Gestione Errori:
- Aggiungi un controllo per evitare dati mancanti:
Esempio di Flusso di Lavoro
- Correzione di una Fattura:
- Esegui RiprendiFattura ➔ inserisci il numero fattura da correggere.
- I dati vengono caricati nel Foglio 1.
- Modifichi l'indirizzo (cella B5) e l'importo (cella B10).
- Esegui AggiungiAlRegistro: i dati nel registro vengono aggiornati, non duplicati.
- Creazione di una Nuova Fattura
>:
- Inserisci un nuovo numero fattura nel Foglio 1.
- Compili i dati ed esegui AggiungiAlRegistro: viene aggiunta una nuova riga nel registro.
Miglioramento della Macro "RiprendiFattura"
Ecco una versione migliorata con gestione degli errori:
Sub RiprendiFattura()
Dim wsFattura As Worksheet
Dim wsRegistro As Worksheet
Dim numeroFattura As String
Dim rigaTrovata As Range
Set wsFattura = Worksheets("Foglio1")
Set wsRegistro = Worksheets("Foglio2")
numeroFattura = InputBox("Inserisci il numero della fattura da correggere:")
If numeroFattura = "" Then Exit Sub
Set rigaTrovata = wsRegistro.Columns(1).Find(What:=numeroFattura, LookIn:=xlValues, LookAt:=xlWhole)
If Not rigaTrovata Is Nothing Then
' Carica i dati nel Foglio 1
wsFattura.Range("B2").Value = rigaTrovata.Value
wsFattura.Range("B3").Value = rigaTrovata.Offset(0, 1).Value
wsFattura.Range("B5").Value = rigaTrovata.Offset(0, 2).Value
wsFattura.Range("B10").Value = rigaTrovata.Offset(0, 3).Value
MsgBox "Fattura caricata per la modifica. Dopo le correzioni, esegui 'AggiungiAlRegistro'.", vbInformation
Else
MsgBox "Numero fattura non trovato.", vbExclamation
End If
End Sub
Suggerimenti Finali
- Backup del Registro: Prima di modificare macro complesse, salva una copia del file.
- Protezione Fogli: Proteggi il Foglio 2 (registro) per evitare modifiche accidentali.
- Pulsanti per le Macro: Assegna le macro a pulsanti nel Foglio 1 per un accesso rapido.
Con queste modifiche, il tuo sistema gestirà correttamente sia l'aggiunta che la modifica delle fatture!
Spero che questi suggerimenti ti siano stati utili!
Sentiti libero di farmi sapere se hai altre domande o hai bisogno di ulteriore aiuto.
Migliori saluti
Adrian.C-MSFT | Specialista del supporto della community Microsoft