Visual Basic Wait Until

Anonimo
2020-08-05T14:50:41+00:00

Ciao a tutti,

Spero qualcuno riesca ad aiutarmi in questo problema che sto riscontrando in Visual Basic. Il problema riguarda il fatto che non conosco bene Visual Basic e dunque non so che strumento utilizzare in un certo contesto.

Sono all'interno di un For Loop, in cui devo copiare ed incollare dei valori da celle ad altre. Nel mezzo però, utilizzando un software dati esterno, tra una copia e l'altra Excel fa un refresh dei dati, cioè calcola i dati e li aggiorna per ogni singola iterazione del ciclo. Vorrei dunque sapere come far aspettare il ciclo for a copiare e incollare il dato solamente dopo averlo calcolato (in quanto se non aspetta mi incolla "#VALORE"). Qui di seguito vi copio il testo della programmazione:

For x = 1 To 30

        Cells(x, 1).Select

        Selection.Copy

        Range("F2").Select

        ActiveSheet.Paste

QUI IL CICLO DEVE ASPETTARE CHE EXCEL RICALCOLI I DATI

 Range("F3").Select

        Selection.Copy

        Cells(x, 2).Select

        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

            :=False, Transpose:=True

    Next

Spero riusciate ad aiutarmi, nell'attesa vi ringrazio della disponibilità.

Davide

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

11 risposte

Ordina per: Più utili
  1. Anonimo
    2020-08-05T16:45:12+00:00

    Prova ad usare questo codice dopo il punto in cui hai scritto che devi aspettare il ricalcolo dei dati.

    x = Range("F3").Value
    If IsNumeric(x) And x <> "" Then
    
     Range("F3").Select
            Selection.Copy
            Cells(x, 2).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=True
    
    Next
    
    End If
    

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2020-08-05T15:55:31+00:00

    Il tempo di attesa non è molto variabile, anzi spesso è sia simile che veloce. Il problema è che sembra che il Application.Wait blocchi tutto, anche il refresh.

    Nel caso del "If" tu come lo imposteresti? Avevo pensato "Se in F3 ottieni un numero allora copia" (e continua il ciclo) oppure "Aspetta fino a che in F3 non ottieni qualcosa che non sia #VALORE!". Insomma mandare avanti il ciclo solamente se in F3 si ottiene qualcosa diverso da #VALORE! e cioè un numero. Il problema è che non ho mai utilizzato Visual Basic, ora mi serve come il pane e non so come fare.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2020-08-05T15:44:38+00:00

    Il tempo di attesa è molto variabile? Se non è molto variabile potresti provare ad usare la soluzione indicata prima. Oppure potresti provare ad inserire un IF prima della copia della cella F3 se questa assume un valore <> #VALORE!

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2020-08-05T15:30:27+00:00

    Ciao Donata,

    Ti ringrazio innanzitutto per la risposta. 

    Ho provato questa opzione ma senza successo, è vero che il ciclo deve aspettare prima di continuare però non deve aspettare determinati secondi bensì "fino a che non calcola", fino a che non effettua il refresh dei dati.

    Ti allego uno screen per capire: una volta preso una cella della colonna A e incollata nella cella F2, la cella F3 si aggiorna in seguito a tutta la tabella sotto, la quale a sua volta si aggiorna una volta terminato il "Retrieving...". 

    Grazie nuovamente

    Davide

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2020-08-05T14:55:46+00:00

    Ciao Davide,

    sono Donata, una consulente indipendente. Potresti provare ad aggiungere questa funzione per attendere, ad esempio, 5 secondi.

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

    Puoi modificare il tempo a tuo piacimento. Per maggiori informazioni vedi questo articolo: https://docs.microsoft.com/en-us/office/vba/api...

    La risposta è stata utile?

    0 commenti Nessun commento