/ / Plānotais VBA uzdevums un 'Application.OnTime' - excel, vba, excel-vba, plānotie uzdevumi

Plānotais VBA uzdevums un "Application.OnTime" - excel, vba, excel-vba, scheduled-tasks

Man ir šādi VBA kods, kas darbojas labi. Tas izsauc citu VBA Sub bez jebkādām problēmām:

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

Es šo procesu izpildīju plānotā uzdevumā. Bet acīmredzot mans kods nav labi izpildīts: FindMissingValue.AutoFindMissingValue Apakšpunkts netiek izsaukts, jo programma Excel vienkārši aizveras.

Es domāju, ka tas ir tāpēc, ka Application.OnTime MTimeGT, sToCall... Kas varētu būt iemesls?

Šeit jūs esat koda kods 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

Atbildes:

1 atbilde Nr. 1

The Application.OnTime daļa ir pareiza un FindMissingValue.AutoFindMissingValue jāaicina bez problēmām (pēc 5 sekundēm). Var gadīties, ka šajā 5 sekunžu laikā kods turpinās darboties, atgriežas tur, kur AutoPrintMissingHistoric tika izsaukts, un darbgrāmata varētu būt slēgtapirms šīs 5 sekundes ir pagājušas (lai gan, atkarībā no jūsu precīziem nosacījumiem, funkcija ir jāuzaicina pat neskatoties uz darbgrāmatas aizvēršanu).

Jūs varat samazināt gaidīšanas laiku (vDelay = 1, piemēram) vai vienkārši izsauciet funkciju tieši (Call FindMissingValue.AutoFindMissingValue). Patiesībā es neesmu pārliecināts, kāpēc jūs izsaucat šo funkciju, atsaucoties uz to Application.OnTime; tas ir labi, lai "uzsāktu procesu" (piem., "Es vēlos, lai makro tiktu izpildīts katru dienu 00:00"), bet, ja to lieto regulāri, tā var braukt uz "netīrām situācijām".

Ja nekas no tā nedarbojas, lūdzu, norādiet kodu FindMissingValue.AutoFindMissingValue to apskatīt.

PIEZĪME: pēc dažiem papildu testiem / diskusijām varu apstiprināt, ka OnTime šajos īpašajos apstākļos ir "pārāk neregulāra". Jums vajadzētu nākt klajā ar citu pieeju, lai ļautu gaidīšanas periodam, kas jums nepieciešams, vai, ja jums ir jāpaļaujas OnTime, veiciet intensīvu izmēģinājumu un kļūdu, lai pārliecinātoska tās uzvedība ir pilnībā kontrolēta. Paredzams, ka šī funkcija tiks izsaukta vienu reizi (piemēram, atverot izklājlapu), un tāpēc, lietojot to dažādos kontekstos, jums ir jāmaksā daudz uzmanības (piemēram, tas ir: funkcija, kas notiek funkcijas ietvaros).


Saistītie jautājumi


Komentāri (0)

Pievieno komentāru