/ / Planlagt VBA-opgave og 'Application.OnTime' - Excel, VBA, Excel-VBA, Planlagte opgaver

Planlagt VBA-opgave og 'Application.OnTime' - Excel, VBA, Excel-VBA, Planlagte opgaver

Jeg har følgende VBA kode, der fungerer godt. Det kalder en anden VBA Sub uden problemer:

Public Sub AutoPrintMissingHistoric()
Dim qdf As DAO.QueryDef
Dim rcs As DAO.Recordset
Dim db As DAO.Database
Dim j As Integer
Dim flag As Boolean
Dim i As Long
Dim value_start, value_end As String
Dim tmp As Date
Dim wbRiskedge As Workbook
Dim wsAccueil As Worksheet
Dim wsHistoric As Worksheet

Set wbRiskedge = Workbooks(StrWbRiskedge)
Set wsAccueil = wbRiskedge.Worksheets(StrWsAccueil)
Set wsHistoric = wbRiskedge.Worksheets(StrWsHistoricMissing)
If FistTime = True Then
Call Initialisation.CleanTab
Else
FistTime = True
Call Initialisation.Initialisation
End If
vDelay = 5
Cpt = Cpt + 1
Set db = DBEngine.OpenDatabase(strDB)
Set qdf = db.QueryDefs("Get_missing_fixings")
If Cpt <= wsAccueil.Range(ManualListLetter & "1").End(xlDown).Row Then
Application.StatusBar = wsAccueil.Cells(Cpt, ManualListLetter).Text
qdf.Parameters("arg1") = wsAccueil.Cells(Cpt, ManualListLetter).Value
Set rcs = qdf.OpenRecordset
j = 0
i = 1
flag = False
If Not rcs.EOF Then
rcs.MoveLast
rcs.MoveFirst
While Not rcs.EOF
j = 0
While j < rcs.Fields.Count
If flag = False Then
With Cells(i, j + 1)
If .Value = "" Then
.Value = rcs(j).Name
.Font.Bold = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End If
End With
Else
Cells(i, j + 1).Value = rcs(j).Value
End If
j = j + 1
Wend
If flag = False Then
flag = True
End If
i = i + 1
rcs.MoveNext
Wend
Call ChangeMinMax(rcs.RecordCount, CellMinDate, CellMaxDate, wsHistoric)
Call ParseParameters
Call SetReutersFunction
End If
rcs.Close
qdf.Close
db.Close
wsHistoric.Calculate
Application.StatusBar = wsAccueil.Cells(Cpt, ManualListLetter).Text & " - Next Function: FindMissingValue.AutoFindMissingValue"
sToCall = "FindMissingValue.AutoFindMissingValue"
MTimeGT = Time + TimeValue("00:00:" & vDelay)
Application.OnTime MTimeGT, sToCall
End If
End Sub

Jeg udfører udførelsen af ​​denne proces i en planlagt opgave. Men min kode er tilsyneladende ikke godt udført: FindMissingValue.AutoFindMissingValue Sub hedder ikke, fordi Excel bare lukker.

Jeg tror, ​​det er fordi Application.OnTime MTimeGT, sToCall... Hvad kunne være årsagen?

Her er du koden til FindMissingValue.AutoFindMissingValue

Sub AutoFindMissingValue()
Dim wbRiskedge As Workbook
Dim wsAccueil As Worksheet
Dim wsHistoric As Worksheet
Dim i, nbResult As Long

Set wbRiskedge = Workbooks(StrWbRiskedge)
Set wsAccueil = wbRiskedge.Worksheets(StrWsAccueil)
Set wsHistoric = wbRiskedge.Worksheets(StrWsHistoricMissing)
If Left(wsHistoric.Range(ReutersFormula).Text, 13) Like "Retrieving...*" = True Then
sToCall = "FindMissingValue.AutoFindMissingValue"
MTimeGT = Time + TimeValue("00:00:05")
Application.OnTime MTimeGT, sToCall
Exit Sub
End If
i = WorksheetFunction.CountA(Columns(DateColumn & ":" & DateColumn))
If WorksheetFunction.CountA(Columns(ColumnResearchVResult & ":" & ColumnResearchVResult)) > 0 Then
wsHistoric.Range(FirstCellResearchVResult & ":" & ColumnResearchVResult & WorksheetFunction.CountA(Columns(ColumnResearchVResult & ":" & ColumnResearchVResult))).ClearContents
End If
nbResult = wsHistoric.Range(FirstResult).End(xlDown).Row
wsHistoric.Range(ColumnResearchVResult & LineResearchVResult - 1).Value = "Results"
If WorksheetFunction.CountA(Columns(DateColumn & ":" & DateColumn)) > 1 Then
wsHistoric.Range(FirstCellResearchVResult & ":" & ColumnResearchVResult & i).FormulaLocal = "=RECHERCHEV($" & DateColumn & "$" & LineResearchVResult & ":$" & DateColumn & "$" & i & ";" & FirstLockResult & ":$" & ValueResultColumn & "$" & nbResult & ";2;0)"
End If
Application.StatusBar = wsAccueil.Cells(Cpt, ManualListLetter).Text & " - Next Function: FindMissingValue.AutoPutResultInDb"
sToCall = "FindMissingValue.AutoPutResultInDb"
MTimeGT = Time + TimeValue("00:00:01")
Application.OnTime MTimeGT, sToCall
End Sub

svar:

1 for svar № 1

Det Application.OnTime del er rigtig og FindMissingValue.AutoFindMissingValue skal kaldes uden problemer (efter 5 sekunder). Hvad der kan ske er, at koden fortsætter i løbet af denne 5 sekunders periode, går tilbage til hvor AutoPrintMissingHistoric blev kaldt fra, og arbejdsbogen kan lukkesinden disse 5 sekunder er gået (selvom funktionen skal kaldes, selvom arbejdsbogen er lukket), afhængigt af dine nøjagtige forhold.

Du kan enten reducere ventetiden (vDelay = 1, for eksempel) eller ring direkte til funktionen (Call FindMissingValue.AutoFindMissingValue). Faktisk er jeg ikke sikker på, hvorfor du ringer funktionen ved at stole på Application.OnTime; at bruge dette er fint for at "starte processen" (f.eks. "Jeg vil have min makro udført hver dag kl. 00:00"), men kan køre til "rodet situationer", hvis det bliver brugt regelmæssigt.

Hvis intet af dette virker, bedes du angive koden til FindMissingValue.AutoFindMissingValue at kigge på det.

BEMÆRK: Efter nogle yderligere test / diskussioner kan jeg bekræfte, at adfærd fra OnTime under disse særlige forhold er "for uregelmæssig". Du bør komme med en anden tilgang til at tillade den ventede periode, du har brug for, eller i tilfælde af at skulle stole på OnTime, gør en intensiv prøve-og-fejl for at sikreat dens adfærd er helt under kontrol. Denne funktion forventes at blive kaldt en gang (f.eks. Åbning af regnearket på et bestemt tidspunkt) og derfor skal du være meget opmærksom når du bruger den i forskellige sammenhænge (som denne: kalder den inde i en funktion).


Beslægtede spørgsmål


Kommentarer (0)

Tilføj en kommentar