+ 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
    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
    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
    @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
    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
    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
    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
    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
    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
    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
    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