Condividi:        

macro copia dati tra 2 fogli

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

Re: macro copia dati tra 2 fogli

Postdi apocrimata75 » 23/05/12 17:25

A parte che ancora non sono riuscito ad automatizzare il tutto, non capisco perchè nel foglio "prono" incolla valori errati. Mi spiego meglio, la macro fà il refresh, evidenzia le celle da copiare nel foglio prono (2), ma incolla valori diversi nel foglio "prono".
Pensavo fosse un problema di velocità ed ho aggiunto

Application.Wait (Now + TimeValue("0:00:10"))

tra il copia e l'incolla, ma niente.
Windows 7 - Office 2010
apocrimata75
Utente Senior
 
Post: 189
Iscritto il: 28/05/11 13:22

Sponsor
 

Re: macro copia dati tra 2 fogli

Postdi Anthony47 » 23/05/12 18:14

Preferisco evitare soluzioni chiavi in mano, anche se questo spesso e' piu' oneroso che fare direttamente.
Ora tu dici
"vorrei che la macro aggioauto partisse al mio comando (avvia) ed
automaticamente ogni tot tempo (che decido io impostando il valore nelle
celle g2, h2 e i2, rispettivamente ore, minuti e secondi) svolgesse il suo
compito fino a quando, con altra macro (ferma) blocchi tutto"

La macro precedente e' gia' idonea, anche se sono necessarie piccole variazioni:
-si mantiene l' approccio di fermare la rischedulazione della macro quando una cella che usi come flag viene compilata con un valore noto, es 9999
-la stessa cella flag viene incrementata per dare una indicazione visiva di macro in esecuzione.
-usi la macro Ferma per compilare la cella Flag a questo valore e contemporaneamente deschedulare l' esecuzione di aggioauto

Questo corrisponde al seguente codice:
Codice: Seleziona tutto
Public mTempo As Date, CellaFlag As String  'Deve stare in testa al Modulo

Sub avvia()
' avvia Macro
CellaFlag = "A1"     '<<< *1
Sheets("prono").Range(CellaFlag) = 0
aggioauto
End Sub

Sub aggioauto()
' aggiornamento Macro
'
'CellaFlag = "A1"
'
ThisWorkbook.RefreshAll     '<< Mod
'Application.Wait (Now + TimeValue("0:00:20"))   '<< Del
'wait 20 seconds    '<< Aggiunte Do /Loop
myTim = Timer
Do
DoEvents: If Timer > myTim + 10 Or Timer < myTim Then Exit Do   '<< *2
Loop
'
Dim UR As Integer
UR = ThisWorkbook.Sheets("Prono").Range("C" & Rows.Count).End(xlUp).Row + 1   
If UR < 3 Then
UR = 3
End If
If CellaFlag <> "" Then   'Non rischedulare se gia' attivo
With ThisWorkbook.Sheets("Prono")
    ThisWorkbook.Sheets("Prono (2)").Range("c4:m4").Copy
    .Range("C" & UR).PasteSpecial Paste:=xlPasteValues
        Application.CutCopyMode = False
    .Range(CellaFlag) = .Range(CellaFlag) + 1
    If .Range(CellaFlag) < 9999 Then
        If (.Range("G2") * 3600 + .Range("H2") * 60 + .Range("I2") < 10) Then .Range("I2") = 10   '<< *3
        mTempo = Now + TimeSerial(.Range("G2"), .Range("H2"), .Range("I2"))
        Application.OnTime mTempo, "aggioauto"
    End If
End With
End If
End Sub

Sub ferma()
' ferma Macro
'
On Error Resume Next
If CellaFlag <> "" Then
    ThisWorkbook.Sheets("Prono").Range(CellaFlag) = 9999
    Application.OnTime mTempo, "aggioauto", , False
    MsgBox "Fine Elaborazione"
    CellaFlag = ""
    On Error GoTo 0
End If
End Sub

Rispetto al precedente ho inserito la possibilita' di variare la "Cella Flag" (prima era fissa ad A1), la possibilita' di scrivere in G2, H2 e I2 il periodo di rischedulazione (con un minimo pero' di 10 secondi), la modifica del valore di conta a 9999 per interrompere la schedulazione, la macro Ferma.

Uso:
-da excel, Alt-F11 per aprire l' editor delle macro
-Menu /Inserisci /Modulo
-copia il codice, da Public in avanti, e incollalo sul frame vuoto di dx
Se hai inserito versioni precedenti delle stesse macro in un altro Modulo allora cancellale.
Modifica le istruzioni marcate *1 (l' indirizzo della "cella Flag"), *2 (l' attesa dopo RefreshAll) e *3 (il minimo ritardo di rischedulazione, in secondi).

Sarebbe anche opportuno inserire questo codice in ThisWorkbook:
Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call ferma
End Sub
Questo ferma la schedulazione quando si chiude il file.

Prova ad applicare al tuo file e fai sapere dove arrivi.

In quanto all' ultimo tuo messaggio:
-di Wait ti ho gia' detto cosa ne penso
-prova a spiegare che tipo di dati devi rinfrescare e vedremo se esiste la possibilita' di evitare l' aggiornamento in background in modo da avere un facile sincronismo tra la disponibiita' dei dati e la copy

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro copia dati tra 2 fogli

Postdi apocrimata75 » 23/05/12 19:06

Funzionaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Windows 7 - Office 2010
apocrimata75
Utente Senior
 
Post: 189
Iscritto il: 28/05/11 13:22

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "macro copia dati tra 2 fogli":


Chi c’è in linea

Visitano il forum: Nessuno e 47 ospiti