Plutselig «Ugyldig prosedyrekall eller argument» feil I VBA

Av Philipp Stiefel, opprinnelig publisert 15.August 2019, sist oppdatert 2. September 2019

før vi begynner, la oss sette ting i perspektiv: «Ugyldig prosedyrekall ELLER ARGUMENT» er En Ganske Vanlig feil. Hvis du støter på denne feilen mens du skriver ny kode, er det mest sannsynlig en faktisk feil i koden din og ikke relatert til emnet i denne teksten.

Hvis programmets kode kjørte feilfritt, men nå plutselig mislykkes med En Kjøretidsfeil ‘5’ – «Ugyldig prosedyrekall eller argument», er det sannsynligvis et problem forårsaket av Windows-oppdateringene 13.August 2019 for alle gjeldende versjoner Av Windows.

dette påvirker alle gjeldende Versjoner Av Office / VBA I Windows 10, Windows 8.1 og Windows 7 i tillegg til Alle Windows Server-operativsystemer Fra Windows Server 2008 til Windows Server 2019.

Microsoft selv har allerede lagt til denne advarselen i listen «Kjente problemer i denne oppdateringen».

«når du har installert denne oppdateringen, kan programmer som ble laget med Visual Basic 6 (VB6), makroer som bruker Visual Basic FOR Applications (VBA) og skript eller programmer som bruker Visual Basic Scripting Edition (VBScript) slutte å svare, og du kan få en «ugyldig prosedyrekallfeil.»

Microsoft undersøker for øyeblikket dette problemet og vil gi en oppdatering når den er tilgjengelig.»

(Kilde: NOEN AV KB-artiklene nedenfor)

Her er en liste over oppdateringene som forårsaker problemet (uten krav om fullstendighet):

  • Windows 10, Versjon 1903 – 13.August 2019—KB4512508 (Os – Build 18362.295)
  • Windows 10, Versjon 1809—13. August 2019 – KB4511553 (Os—Build 17763.678)
  • Windows 10, Versjon 1803 – 13. August 2019—kb4512501 (Os – Build 17134.950)

  • WINDOWS 10, VERSJON 1709—13. AUGUST 2019 – KB4512516 (Os—Build 16299.1331)
  • WINDOWS 10, VERSJON 1703-13. August 2019-Kb4512507 (Os-Build 15063.1988)
  • windows 8.1-13. august 2019-kb4512489 (kun sikkerhetsoppdatering)
  • WINDOWS 8.1-13. August 2019-KB4512488 (Månedlig Samleoppdatering)

noen reproduserbare feilscenarier forårsaket Av Windows Update

jeg oppdaget to forskjellige, selv om relaterte, scenarier var feilen» Ugyldig prosedyrekall eller argument » oppstår på grunn av den installerte oppdateringen. Begge er relatert til tomme arrays.

Nestede prosedyrer med ParamArray-argumenter

hvis koden din inneholder flere prosedyrer der variable ParamArray-argumenter sendes fra en prosedyre til den andre, vil dette føre til feilen hvis param-matrisen på toppnivå var tom.

Her er et lite VBA-kodeeksempel som gjengir feilen.

Offentlig Sub StartParamArrayTest() TestArray1End SubPrivate Sub TestArray1(ParamArray params() Som Variant) TestArray2 paramsEnd SubPrivate Sub TestArray2(ParamArray params() Som Variant) TestArray3 params ‘ Forrige linje vil heve feil 5 – «Ugyldig prosedyre kall eller argument»End SubPrivate Sub TestArray3(ParamArray params() Som Variant)’ StubOnly, ringer dette vil heve feil alreadyend sub

Jeg Har Ikke Funnet Noen Løsning For Dette Feilscenarioet Ennå.

Passerer en tom matrise ByVal

hvis du sender en tom matrise til en prosedyre forventer En Variant type argument ByVal, vil prosedyrekallet mislykkes med feilmeldingen. Dette skyldes trolig den samme interne mekanikken som forrige feil situasjon.

Her er et lite eksempel som gjengir feilen.

Offentlig Sub StartVarArrayTest () Dim testArray () Som Objekt TestArrayProc testArray ‘Forrige linje vil heve feil 5 -» Ugyldig prosedyre kall eller argument «End SubPrivate Sub TestArrayProc( ByVal varArray Som Variant)’ StubOnly, ringer dette vil heve feilen alreadyEnd Sub

i dette tilfellet feilen kan forhindres fra å vises ved å sende i den tomme matrisen ByRef til prosedyren.

Private Sub TestArrayProc ( ByRef varArray Som Variant) ‘ StubOnly, ringer dette vil ikke heve errorEnd Sub

Dette bør være en mulig løsning i de fleste scenarier.

bruke Matrisefunksjonen til å fjerne en kombinasjonsboks med flere verdier

hvis Du bruker Matrisefunksjonen uten argumenter for å tilordne en tom matrise til en variabel, vil du igjen se feilen «Ugyldig prosedyrekall». Men hvis Du bruker Array-funksjonen uten argumenter for å fjerne en kombinasjonsboks med flere verdier fra VBA-kode, vil du se en kjøretidsfeil 2004 » Det er ikke nok minne til å utføre denne operasjonen . Lukk unødvendige programmer og prøv operasjonen på nytt.»

Privat Under Command3_Click() Meg.cboMultiValue.Value = Array () End Sub

jeg møtte ikke denne varianten av problemet selv, men det ble rapportert i En tråd på Access Mdsn Forumet.

Ytterligere hensyn – «…kan slutte å svare … »

de ovennevnte scenariene er ganske enkle å diagnostisere, når du vet om årsaken til feilen. Imidlertid er jeg mer bekymret for» kan slutte å svare » – delen fra beskrivelsen av know-problemet. Dette er noe som er mye vanskeligere å spore og diagnostisere. Nå som vi vet om denne feilen, kan vi sannsynligvis diagnostisere en slik situasjon også, men uten denne kunnskapen ville det vært nesten umulig å finne årsaken.

Generell Løsning / Midlertidig Løsning

Så Lenge Microsoft Ikke har gitt ut en ny oppdatering som adresserer og løser dette problemet, avinstallerer den eneste virkelige «løsningen» Windows-Oppdateringene 13.August 2019. Når du har avinstallert oppdateringen, vil koden din kjøre som før. Ingen ytterligere tiltak nødvendig.

selvfølgelig er det ikke ideelt å avinstallere og utsette en sikkerhetsoppdatering For Windows. Du bør veie om effekten av denne oppdateringen PÅ VBA-programmene er alvorlig nok til å rettferdiggjøre dette.

Til min kunnskap er det ingen eksisterende utnyttelse for sikkerhetsproblemene som er løst med den oppdateringen ennå. (Disclaimer: jeg er ikke en sikkerhetsekspert!) Så, med tanke på flere applikasjoner som er sterkt påvirket av problemene beskrevet ovenfor, anbefalte jeg kundene mine å utsette oppdateringen til videre varsel.

Update 2019-08-18: En Løsning ser ut til å være i gang …

i de sene timene 16. August lanserte Microsoft oppdateringen 16. August 2019—KB4512494 (OS-Build 16299.1365) Til Windows 10, Versjon 1709 (bare!).

listen «Forbedringer og rettelser» for denne oppdateringen inneholder dette elementet:

  • Løser et problem som kan føre til at følgende slutter å svare:
    • Programmer som ble laget med Visual Basic 6 (VB6).
    • Makroer som bruker Visual Basic For Applications (VBA).
    • Skript eller apper som bruker Visual Basic Scripting Edition (VBScript).

    du kan også få en «Ugyldig prosedyrekall» – feil.

Så, Microsoft synes å være virkelig å gjøre en innsats for å få dette rotet løst raskt. Så langt er det bare løsningen for den spesielle Versjonen 1709 Av Windows 10. Det er ingen løsning tilgjengelig for nyere versjoner Av Windows 10, enn si Windows 7 eller 8, ennå. Likevel, dette er en silver lining i horisonten, og det synes å være sannsynlig at andre oppdateringer fikse problemet på andre versjoner Av Enker vil følge i neste uke.Oppdatering: Det er en løsning tilgjengelig For Windows 8.1 / Windows Server 2012 R2 også. Denne oppdateringen er ikke oppført på siden oppdateringslogg For Windows 8.1 På Microsoft-webområdet, og den er ikke tilgjengelig Via Windows Update. Du kan installere Den via Microsoft Update-Katalogen. – Jeg har nettopp installert den på min hovedutviklingsdatamaskin, og det ser ut til å fikse alle reproduserbare variasjoner av denne feilen nevnt ovenfor.

Update 2019-09-02-Patcher tilgjengelig for alle operativsystemer

uken etter den opprinnelige, problematiske Windows Update, lanserte Microsoft Et par patcher for å rydde OPP vba-problemene. Dessverre manglet oppdateringen for Den mest oppdaterte versjonen Av Windows 10 i noen tid. Til slutt, i August 30, lanserte Microsoft også banen For Windows 10, V1903.Det er litt irriterende At Microsoft oppfordrer Windows 10-brukere til å oppdatere til den nyeste versjonen hele tiden, men slipper deretter den viktige oppdateringen for å løse DETTE alvorlige VBA-problemet uker senere enn de tilsvarende oppdateringene for alle andre operativsystemer.

Her er en liste over alle oppdateringer som løser VBA-problemet:

  • Windows 10, versjon 1903-30. August 2019 – KB4512941 (Os-Build 18362.329)
  • Windows 10, versjon 1809 + Windows Server 2019 – 17.August 2019—KB4512534 (OS-Build 17763.720)
  • Windows 10, versjon 1803 – 19.August 2019—KB4512509 (Os – Build 17134.984)
  • Windows 10, versjon 1709—16. August 2019 – KB4512494 (Os—Build 16299.1365)
  • Windows 10, versjon 1703 – 17. August 2019—kb4512474 (os – build 15063.2021)

  • WINDOWS 10, VERSJON 1607 + Windows server 2016-august 17, 2019-kb4512495 (os-build 14393.3181)
  • WINDOWS 8.1 windows server 2012 r2-oppdatering kb4517298 august 16, 2019
  • windows 7 sp1 og windows server 2008 r2 sp1: oppdater kb4517297 16. august 2019
    (FEIL NEDLASTINGSKOBLING. Her er den riktige nedlastingskoblingen Til Microsoft Update-Katalogen)

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.