Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

excel2003:intercettare eliminazione/inserimento riga

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

excel2003:intercettare eliminazione/inserimento riga

Postdi karug64 » 10/03/12 10:53

Salve a tutti.
Vorrei sapere se e' possibile sapere se su tre determinati foglii (per esempio "Ordini","Riepilogo","Vendite") sono state aggiunte o eliminate righe. Non importa sapere quali (magari quante si .... ma non e' importantissimo), ma solo se e' stata fatta questa operazione ?

C'e' un modo ? (Sarebbe ottimo avere una funzione che restituisca vero o falo e il numero di righe.....)
Grazie
Office 2010
karug64
Utente Senior
 
Post: 580
Iscritto il: 20/11/11 21:22

Sponsor
 

Re: excel2003:intercettare eliminazione/inserimento riga

Postdi Flash30005 » 10/03/12 16:45

Potrebbero esserci diversi modi ma dipende...
uno di questi è creare un foglio che chiamerai "FoglioR" (che potrai nascondere)
e inserinel in ThisWorkbook questi codici
Codice: Seleziona tutto
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Set WsO = Worksheets("Ordini")
Set WsR = Worksheets("Riepilogo")
Set WsV = Worksheets("Vendite")
Set WsF = Worksheets("FoglioR")
URO = WsO.Range("A" & Rows.Count).End(xlUp).Row
URR = WsR.Range("A" & Rows.Count).End(xlUp).Row
URV = WsV.Range("A" & Rows.Count).End(xlUp).Row
WsF.Range("AA" & Rows.Count).End(xlUp).Offset(1, 0).Value = "U_Ord"
WsF.Range("AB" & Rows.Count).End(xlUp).Offset(1, 0).Value = Now()
WsF.Range("AC" & Rows.Count).End(xlUp).Offset(1, 0).Value = URO
WsF.Range("AD" & Rows.Count).End(xlUp).Offset(1, 0).Value = "U_Riep"
WsF.Range("AE" & Rows.Count).End(xlUp).Offset(1, 0).Value = Now()
WsF.Range("AF" & Rows.Count).End(xlUp).Offset(1, 0).Value = URR
WsF.Range("AG" & Rows.Count).End(xlUp).Offset(1, 0).Value = "U_Vend"
WsF.Range("AH" & Rows.Count).End(xlUp).Offset(1, 0).Value = Now()
WsF.Range("AI" & Rows.Count).End(xlUp).Offset(1, 0).Value = URV
End Sub

Private Sub Workbook_Open()
Set WsO = Worksheets("Ordini")
Set WsR = Worksheets("Riepilogo")
Set WsV = Worksheets("Vendite")
Set WsF = Worksheets("FoglioR")
URO = WsO.Range("A" & Rows.Count).End(xlUp).Row
URR = WsR.Range("A" & Rows.Count).End(xlUp).Row
URV = WsV.Range("A" & Rows.Count).End(xlUp).Row
WsF.Range("AA" & Rows.Count).End(xlUp).Offset(1, 0).Value = "A_Ord"
WsF.Range("AB" & Rows.Count).End(xlUp).Offset(1, 0).Value = Now()
WsF.Range("AC" & Rows.Count).End(xlUp).Offset(1, 0).Value = URO
WsF.Range("AD" & Rows.Count).End(xlUp).Offset(1, 0).Value = "A_Riep"
WsF.Range("AE" & Rows.Count).End(xlUp).Offset(1, 0).Value = Now()
WsF.Range("AF" & Rows.Count).End(xlUp).Offset(1, 0).Value = URR
WsF.Range("AG" & Rows.Count).End(xlUp).Offset(1, 0).Value = "A_Vend"
WsF.Range("AH" & Rows.Count).End(xlUp).Offset(1, 0).Value = Now()
WsF.Range("AI" & Rows.Count).End(xlUp).Offset(1, 0).Value = URV
End Sub

Avrai in AA l'operazione e foglio (A_Ord = Apertura file)
In AB giorno e ora
in AC numero righe del foglio Ordini (apertura file)
a seguire AD, AE, AF (Foglio Riepilogo) e AG, AH, AI (Foglio Vendite)
quando sarà salvato il file
nelle righe successive avrai U_Ord e rispettive righe, etc etc
così potrai avere per ogni accesso (anche tramite formula la differenza tra le righe Apertura e Uscita (salvataggio)

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: excel2003:intercettare eliminazione/inserimento riga

Postdi karug64 » 10/03/12 18:40

Ciao. Grazie per la soluzione porposta.
La mia esigenza, pero', e' quella di confrontare i fogli "durante la stessa sessione di lavoro".

Specifico meglio:
Eseguo delle elaborazioni. A seguito di queste, provvedo a trasporre su un file nuovo (vedi altro post -pari data- di aiuto...) le risultanze.
Quello che devo fare e' avere una funzione che prima di lanciare la routine di copiare, controlli se ci sono state modifiche manuali (che sono prevedibili in ogni caso per alcuni casi estremamente particolari difficilmente gestibili da codice) da parte dell'ioperatore sui fogli da trasporre. In questo caso faro' in modo da mostrare un pop-up con richiesta di conferma.

Grazie.
Office 2010
karug64
Utente Senior
 
Post: 580
Iscritto il: 20/11/11 21:22

Re: excel2003:intercettare eliminazione/inserimento riga

Postdi karug64 » 10/03/12 21:56

Cercando attentamente sul forum ho trovato questa soluzione postata da Flash30005 in un post del 14/10/09:

http://www.pc-facile.com/forum/viewtopic.php?f=26&t=82607

perfettamente idonea per il mio problema.

Ma se, oltre a questo controllo, volessi sapere se -pur non essendo state aggiunte o eliminate righe- siano stati modificati dati nelle colonne C e D del foglio Ordini come potrei fare ?

Grazie
Office 2010
karug64
Utente Senior
 
Post: 580
Iscritto il: 20/11/11 21:22

Re: excel2003:intercettare eliminazione/inserimento riga

Postdi karug64 » 11/03/12 19:53

karug64 ha scritto:Cercando attentamente sul forum ho trovato questa soluzione postata da Flash30005 in un post del 14/10/09:

http://www.pc-facile.com/forum/viewtopic.php?f=26&t=82607

perfettamente idonea per il mio problema (utilizzo questo codice:)
Codice: Seleziona tutto
    Sub Confronta()
    ' Foglio1 Vecchio Catalogo
    ' Foglio2 Nuovo Catalogo
    ' Foglio3 Prodotti che non sono più nel nuovo catalogo
    ' Foglio4 Nuovi prodotti (non erano nel vecchio catalogo)
    Call CopiaF
    URS = Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row   '<<<< alias Foglio3
    URA = Worksheets("Foglio2").Range("A" & Rows.Count).End(xlUp).Row  '<<< alias Foglio4
    For RS = 2 To URS
        For RA = URA To 2 Step -1
            If Worksheets("Foglio1").Cells(RS, 1).Value = Worksheets("Foglio4").Cells(RA, 1).Value Then Worksheets("Foglio4").Rows(RA & ":" & RA).Delete
        Next RA
    Next RS
    For RA = 2 To URA
        For RS = URS To 2 Step -1
            If Worksheets("Foglio2").Cells(RA, 1).Value = Worksheets("Foglio3").Cells(RS, 1).Value Then Worksheets("Foglio3").Rows(RS & ":" & RS).Delete
        Next RS
    Next RA
    End Sub
    Sub CopiaF()
        Sheets("Foglio3").Select
        Cells.Select
        Selection.Clear
        Range("D10").Select
        Sheets("Foglio4").Select
        Cells.Select
        Selection.Clear
        Range("A1").Select
        Sheets("Foglio1").Select
        Cells.Select
        Selection.Copy
        Sheets("Foglio3").Select
        Cells.Select
        ActiveSheet.Paste
        Range("A1").Select
        Sheets("Foglio2").Select
        Cells.Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Foglio4").Select
        Range("A1").Select
        ActiveSheet.Paste
        Range("A1").Select
        Sheets("Foglio3").Select
    End Sub


Ma se, oltre a questo controllo, volessi sapere se -pur non essendo state aggiunte o eliminate righe- siano stati modificati dati nelle colonne C e D del foglio Ordini come potrei fare ?

Grazie
Office 2010
karug64
Utente Senior
 
Post: 580
Iscritto il: 20/11/11 21:22


Torna a Applicazioni Office Windows


Topic correlati a "excel2003:intercettare eliminazione/inserimento riga":


Chi c’è in linea

Visitano il forum: alfrimpa e 8 ospiti