Time routine

di il
11 risposte

Time routine

Ciao ragazzi, mi ricordate per favore (se esiste) in che modo è possibile impostare un intervallo di tempo tra un comando e l'altro su una routine VBA?
Ho un comando con do while not .... EOF/Loop che genera circa 700 report in PDF. Non capisco perchè su 700 report generati circa 20/30 escano con caratteristiche mancanti: in particolare un grafico in prima pagina. Tutto il resto è corretto.

Sembrerebbe quasi non facesse in tempo a "caricarlo". Perchè se lancio solo quel report singolo, il grafico c'è (come c'è in tutti gli altri 680 casi).
grazie mille!!

11 Risposte

  • Re: Time routine

    Prova ad aggiungere un

    DoEvents

    nel ciclo
  • Re: Time routine

    oregon ha scritto:


    Prova ad aggiungere un

    DoEvents

    nel ciclo
    Dove? Ho i seguenti STEP:

    1) openrecordset
    2) Do While Not rsGroup.EOF
    3) If X Then
    3.1) OPEN REPORT
    3.2) OUTPUT REPORT
    3.3) CLOSE PREVIEW
    4) elseif ...then
    4.1) OPEN REPORT
    4.2) OUTPUT REPORT
    4.3) CLOSE PREVIEW
    5) elseif... then
    5.1) OPEN REPORT
    5.2) OUTPUT REPORT
    5.3) CLOSE PREVIEW
    End If

    rsGroup.MoveNext
    Loop
    End Sub
  • Re: Time routine

    Come ti ho scritto prima "nel ciclo".

    Fai qualche prova ...
  • Re: Time routine

    L'ho messo prima dell'end if. Ma non mi cambia nulla... non vedo nessuna differenza. Cosa dovrei vedere di diverso?
  • Re: Time routine

    Perche prima di END IF....? Che senso ha...?
    Eventualmente lo metti prima di LOOP.

    In ogni caso se posti codice posta codice non quella pseudo versione non utile... mi verrebbe da chiederti perché hai 3 blocchi uguali che fanno le stesse cose... ma sorvolo.

    P.s. temo tuttavia possa essere necessario uno sleep perché se crei PDF il processo potrebbe richiederlo...
  • Re: Time routine

    @Alex ha scritto:


    Perche prima di END IF....? Che senso ha...?
    Eventualmente lo metti prima di LOOP.

    In ogni caso se posti codice posta codice non quella pseudo versione non utile... mi verrebbe da chiederti perché hai 3 blocchi uguali che fanno le stesse cose... ma sorvolo.
    diciamo che apre un report diverso a seconda della condizione che si verifica. era per dire che fa una verifica di questo tipo.
    lo metto prima del LOOP. Ma dovrei vedere un numero come output?
  • Re: Time routine

    Ma cosa dici....?
    Apri la guida e leggi cosa fa così evitiamo di dire cose strane.
  • Re: Time routine

    Dim rsGroup As DAO.Recordset
    Dim ColumnName As String, AbttName As String, DRName As String, myPath As String
    myPath = "……………"
    Set rsGroup = CurrentDb.OpenRecordset("SELECT DISTINCT Abtt, Ciid, Fill, DT, AT, AT, CS FROM Tab_produzione_report_PDF", _
    dbOpenDynaset)

    Do While Not rsGroup.EOF

    ColumnName = rsGroup!Ciid
    AbttName = rsGroup!Abtt
    FillName = rsGroup!Filliale
    DTName = rsGroup!DT
    ATName = rsGroup!AT
    AT = rsGroup!AT
    CS = rsGroup!CS

    If rsGroup!AT = -1 And rsGroup!CS = -1 Then
    DoCmd.OpenReport "Master_operativita_new_DEF_1", acViewPreview, , "[CodiceCiid]='" & ColumnName & "' And [CodiceAbtt]='" & AbttName & "'"

    DoCmd.OutputTo acOutputReport, "Master_operativita_new_DEF_1", acFormatPDF, _
    myPath & AbttName & "_" & ColumnName & "_" & DTName & "_" & ATName & "_Report_AT-CS" & ".pdf", False
    DoCmd.Close acReport, "Master_operativita_new_DEF_1"

    ElseIf rsGroup!AT = 0 And rsGroup!CS = -1 Then

    DoCmd.OpenReport "Master_operativita_new_DEF_1_CS", acViewPreview, , "[CodiceCiid]='" & ColumnName & "' And [CodiceAbtt]='" & AbttName & "'"
    DoCmd.OutputTo acOutputReport, "Master_operativita_new_DEF_1_CS", acFormatPDF, _
    myPath & AbttName & "_" & ColumnName & "_" & DTName & "_" & ATName & "_Report_AT-CS" & ".pdf", False

    DoCmd.Close acReport, "Master_operativita_new_DEF_1_CS"

    ElseIf rsGroup!AT = -1 And rsGroup!CS = 0 Then

    DoCmd.OpenReport "Master_operativita_new_DEF_1_AT", acViewPreview, , "[CodiceCiid]='" & ColumnName & "' And [CodiceAbtt]='" & AbttName & "'"

    DoCmd.OutputTo acOutputReport, "Master_operativita_new_DEF_1_AT", acFormatPDF, _
    myPath & AbttName & "_" & ColumnName & "_" & DTName & "_" & ATName & "_Report_AT-CS" & ".pdf", False
    DoCmd.Close acReport, "Master_operativita_new_DEF_1_AT"

    End If
    rsGroup.MoveNext
    Loop
    End Sub
  • Re: Time routine

    I tag CODE e l'indentazione del codice, dai.
    Quello che hai all'interno di ogni condizione valutata dentro la IF in che cosa si differenzia? Solo dal nome del report.
    Scrivi praticamente la stessa cosa 3 volte, quando è sufficiente 1 volta usando una variabile per il nome del report.
    Dim strNomeReport as String
    If ... Then
        strNomeReport = "Master_operativita_new_DEF_1"
    ElseIf .... Then
        strNomeReport = "Master_operativita_new_DEF_1_CS"
    Else
        strNomeReport = "Master_operativita_new_DEF_1_AT"
    End If
    Il resto lo lasci fuori dalla IF e al posto del nome del report usi la variabile strNomeReport.
    Questa porzione di codice
    ..._Report_AT-CS" & ".pdf"... 
    è caldamente consigliato che sia sostituita da
    ..._Report_AT-CS.pdf"... 
    la variabili AT e CS sono dichiarate in una parte del codice che non hai postato, spero.

    Vàluta l'apertura del recordset in modalità sola lettura (molto più veloce) e l'uso di una variabile per l'oggetto Database anziché direttamente CurrentDb
    Dim db AS DAO.Database
    Set db = CurrentDb
    con distruzione al termine.
  • Re: Time routine

    Ok fatti phil i punti iniziali. Posso chiedere gentilmente come impostare il recordset in modalità sola lettura? Io adesso ho:

    Dim rsGroup As DAO.Recordset
    Dim ColumnName As String, AbtName As String, DRName As String, ATName As String, AT As Boolean, CS As Boolean, myPath As String
    myPath = "..."
    Set rsGroup = CurrentDb.OpenRecordset("SELECT DISTINCT Abt, Ciid, Fill, DT, AT, CS FROM Tab_produzione_report_PDF", _
    dbOpenDynaset)
    Do While Not rsGroup.EOF
    ......
    Come diventerebbe in sola lettura?
  • Re: Time routine

    Markusmn ti è già stato detto di usare i TAG CODE, come da regolamento
    e per il come fare a mettere in sola lettura ti sarebbe bastato cercare "OPENRECORDSET" su mamma google ... cmq leggi qui
    https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/database-openrecordset-method-dao
Devi accedere o registrarti per scrivere nel forum
11 risposte