Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Macro Sovrascrivere risultati

  1. #1
    ghost69 non  in linea Scolaretto
    Post
    297
    Like Inviati  
    0
    Like Ricevuti  
    0
    Buonasera,
    ho questa macro che, ogni giorno pigiando un bottone a cui associata, mi copia dei risultati nella prima o
    nelle prime du righe bianche disponibili del foglio "Cassa" (Range A),
    dipende se la cella E7 del foglio "Oggi Cassa" = 0 o <> da 0.
    Se, per errore, la macro dovesse essere lanciata 2 volte nella stessa giornata,
    mi duplicherebbe i dati nella/e riga o 2 righe successiva/e bianche disponibili.
    Vorrei aggiungere, se lancio per errore 2 o diverse volte la macro nella stessa giornata, la possibilit
    di "sovrascrvere" i risultati gi copiati. Dico sovrascrivere e non evitare di duplicare i risultati,
    perch succede che i risultati non sono ancora definitivi quando si lancia erroneamente la macro.
    Grazie mille.
    Aiuto non riesco ad allegare il file esempio!Mi da errore!
    Sub INSERISCI()
    Dim Riga As Long
    Sheets("Oggi Cassa").Select
    Application.ScreenUpdating = False
    If Sheets("Oggi Cassa").Range("E7") = 0 Then
        Riga = Range("Cassa!A" & Rows.Count).End(xlUp).Row + 1
            Range("A6:D6").Copy
            Sheets("Cassa").Select
                Range("A" & Riga).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
                Application.CutCopyMode = False
        Range("A" & Riga).Value = Riga - 9
        Riga = Riga + 1
    Application.ScreenUpdating = True
        
        
    Else
    Application.ScreenUpdating = False
    Riga = Range("Cassa!A" & Rows.Count).End(xlUp).Row + 1
            Range("A6:D7").Copy
            Sheets("Cassa").Select
                Range("A" & Riga).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
                Application.CutCopyMode = False
        Range("A" & Riga).Value = Riga - 9
        Riga = Riga + 1
        Range("A" & Riga).Value = Riga - 9
    Application.ScreenUpdating = True
        Range("A" & Riga + 1).Select
    
    ActiveWorkbook.Save
    
    End If
    
    End Sub
    
    Ultima modifica di ghost69; 22-01-2021 20:25  Motivo: allegato

  2. #2
    Sgrubak non  in linea Scribacchino
    Post
    607
    Like Inviati  
    12
    Like Ricevuti  
    14
    Io farei cos:

    1) riservo una cella al salvataggio di una data.
    2)la macro prima di ogni altra cosa verifica se la data salvata nella cella riservata oggi.
    3)se si, esce. Altrimenti copia le righe ed aggiorna la data.

    Bada che il codice che hai scritto va un po' a casaccio. Le uniche cose che andrebbero nell'If sono il range da copiare e il salvataggio. Tutto il resto andrebbe fuori visto che identico. Inoltre la chiamata del metodo Select ai vari fogli, non serve a nulla. Sfrutta direttamente la chiamata a
    Sheets("nome foglio").Range("celle")
    

  3. #3
    L'avatar di AntonioG
    AntonioG non  in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Post
    17,505
    Blogs
    5
    Like Inviati  
    6
    Like Ricevuti  
    35
    @ghost69... qui non si allega il file necessariamente. Si pongono le domande e si ottengono suggerimenti, che dovrebbero bastarti a darti l'idea per scrivere il codice corretto.
    ℹ️ Leggi di pi su AntonioG ...

  4. #4
    ghost69 non  in linea Scolaretto
    Post
    297
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    Io farei cos:

    1) riservo una cella al salvataggio di una data.
    2)la macro prima di ogni altra cosa verifica se la data salvata nella cella riservata oggi.
    3)se si, esce. Altrimenti copia le righe ed aggiorna la data.

    Bada che il codice che hai scritto va un po' a casaccio. Le uniche cose che andrebbero nell'If sono il range da copiare e il salvataggio. Tutto il resto andrebbe fuori visto che identico. Inoltre la chiamata del metodo Select ai vari fogli, non serve a nulla. Sfrutta direttamente la chiamata a
    Sheets("nome foglio").Range("celle")
    
    1) riservo una cella al salvataggio di una data. (Non ho capito)
    2) La data viene salvata nella colonna B del foglio "Cassa" a partire da B3.

    Per verificare la data:

    Dim Ladata As Variant
        Ladata = Sheets("Cassa").Range("B3:B100").Value "verifica se presente nel range"
        If IsDate(A1) Then         "A1  la cella di riferimento in cui  inserita la data da verificare" 
            If Ladata = Date Then   "se la data  uguale"
               "deve sovrascrivere"
            End If
        End If
    End Sub
    
    giusta la strada che percorro o ci sono errori? Sono principiante

  5. #5
    L'avatar di AntonioG
    AntonioG non  in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Post
    17,505
    Blogs
    5
    Like Inviati  
    6
    Like Ricevuti  
    35
    Quote Originariamente inviato da ghost69 Visualizza il messaggio
    Sono principiante
    Posti su questo forum per problemi di Excel dal 2008-2009... dopo 12 anni non ti dovresti definire pi principiante...
    ℹ️ Leggi di pi su AntonioG ...

  6. #6
    Sgrubak non  in linea Scribacchino
    Post
    607
    Like Inviati  
    12
    Like Ricevuti  
    14
    Quote Originariamente inviato da ghost69 Visualizza il messaggio
    Non ho capito
    Tieni una cella (mettila nel foglio che ti pare, basta che poi il codice punti sempre a quella) in cui scrivi la data dell'ultima copia... Se in quella cella, la data uguale ad oggi (perch hai gi fatto un inserimento) allora sovrascrivi, altrimenti aggiungi... Va da se che, se nel foglio in cui ricopi i dati hai gi un campo destinato alla data, sfrutti quello senza stare ad andare a sprecare un'altra cella.

    Quote Originariamente inviato da ghost69 Visualizza il messaggio
    giusta la strada che percorro o ci sono errori?
    Direi la strada giusta, ma ci sono errori...
    1) La chiamata a [Sheets("Cassa").Range("B3:B100").Value] ti restituisce 93 valori... Forse il caso di restringere un po'... Avessi dichiarato [Dim Ladata as Date], te ne accorgevi subito.

    2) [IsDate(A1)]: Option Explicit ti conviene usarlo. Per il compilatore quell' "A1" una variabile non dichiarata, che adatta lui a Variant. Con un po' di debug ti saresti accorto che in quell'If non ci entravi mai perch restituiva sempre False. Tu li hai bisogno del valore della cella A1 quindi andr corretto in
    IsDate(Range("A1").Value)
    

  7. #7
    ghost69 non  in linea Scolaretto
    Post
    297
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da AntonioG Visualizza il messaggio
    Posti su questo forum per problemi di Excel dal 2008-2009... dopo 12 anni non ti dovresti definire pi principiante...
    Con le formule excel me la cavo meglio, il VBA non lo conosco, mi sono avvicinato un bel p di tempo fa ma mai approfondito.
    Mi aiuto leggendo in rete e con i vostri consigli.

  8. #8
    ghost69 non  in linea Scolaretto
    Post
    297
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    Tieni una cella (mettila nel foglio che ti pare, basta che poi il codice punti sempre a quella) in cui scrivi la data dell'ultima copia... Se in quella cella, la data uguale ad oggi (perch hai gi fatto un inserimento) allora sovrascrivi, altrimenti aggiungi... Va da se che, se nel foglio in cui ricopi i dati hai gi un campo destinato alla data, sfrutti quello senza stare ad andare a sprecare un'altra cella.


    Direi la strada giusta, ma ci sono errori...
    1) La chiamata a [Sheets("Cassa").Range("B3:B100").Value] ti restituisce 93 valori... Forse il caso di restringere un po'... Avessi dichiarato [Dim Ladata as Date], te ne accorgevi subito.

    2) [IsDate(A1)]: Option Explicit ti conviene usarlo. Per il compilatore quell' "A1" una variabile non dichiarata, che adatta lui a Variant. Con un po' di debug ti saresti accorto che in quell'If non ci entravi mai perch restituiva sempre False. Tu li hai bisogno del valore della cella A1 quindi andr corretto in
    IsDate(Range("A1").Value)
    
    1) La chiamata a [Sheets("Cassa").Range("B3:B100").Value] ti restituisce 93 valori... Forse il caso di restringere un po'... Avessi dichiarato [Dim Ladata as Date], te ne accorgevi subito.
    Era indicativo il B:100
    Dovrebbe essere B3:B64 perch la macro potrebbe scrivere 2 celle ogni volta, quindi 31x2=62

  9. #9
    Sgrubak non  in linea Scribacchino
    Post
    607
    Like Inviati  
    12
    Like Ricevuti  
    14
    Si ma tu non vai in ordine cronologico? Ti basta l'ultima riga. O le ultime due al massimo, dipende da come gestisci la situazione.

  10. #10
    ghost69 non  in linea Scolaretto
    Post
    297
    Like Inviati  
    0
    Like Ricevuti  
    0
    Niente da fare, non riesco mi da errore su
    If Ladata = Date Then
    
    Sub Macro1()
    Dim Ladata As Variant
        Ladata = Sheets("Cassa").Range("B3:B64").Value
        IsDate (Range("B1").Value)
            If Ladata = Date Then
                Range(B1:C4").Copy
    Cells(rig, 2).PasteSpecial Paste:=xlValues
    Application.CutCopyMode = False
            End If
    End Sub
    

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Macro non aggiorna risultati automaticamente
    Da Yuzzo nel forum Microsoft Excel
    Risposte: 5
    Ultimo Post: 30-09-2016, 11:02
  2. Sovrascrivere una classe
    Da cldparisi nel forum Visual Basic .Net
    Risposte: 0
    Ultimo Post: 06-12-2006, 16:30
  3. [xml]Sovrascrivere file xml
    Da LUCAB nel forum HTML, CSS e JavaScript
    Risposte: 0
    Ultimo Post: 06-01-2006, 00:48
  4. Sovrascrivere files
    Da Dcpv100 nel forum Visual Basic 6
    Risposte: 1
    Ultimo Post: 24-10-2005, 13:21
  5. Sovrascrivere un carattere in una stringa
    Da dragonfly nel forum Microsoft Word
    Risposte: 2
    Ultimo Post: 05-04-2005, 18:17