plotselinge “ongeldige procedure aanroep of argument”fout in VBA

door Philipp Stiefel, oorspronkelijk gepubliceerd op 15 augustus 2019, laatst bijgewerkt op 2 September 2019

voordat we beginnen, laten we dingen in perspectief zetten:” ongeldige procedure aanroep of argument ” is een vrij veel voorkomende fout. Als u deze fout tegenkomt tijdens het schrijven van nieuwe code, is het waarschijnlijk een werkelijke fout in uw code en niet gerelateerd aan het onderwerp van deze tekst.

als de code van uw toepassing feilloos werd uitgevoerd, maar nu plotseling mislukt met een runtime-fout ‘5’ – “ongeldige procedure aanroep of argument”, is het waarschijnlijk een probleem veroorzaakt door de 13 augustus 2019 Windows-updates voor alle huidige versies van Windows.

Dit is van invloed op alle huidige versies van Office/VBA op Windows 10, Windows 8.1 en Windows 7, evenals op alle Windows Server-besturingssystemen van Windows Server 2008 tot en met Windows Server 2019.

Microsoft zelf heeft deze waarschuwing al toegevoegd aan de lijst” bekende problemen in deze update”.

“na het installeren van deze update kunnen toepassingen die zijn gemaakt met Visual Basic 6 (VB6), macro’ s met Visual Basic for Applications (VBA), en scripts of apps met Visual Basic Scripting Edition (VBScript) niet meer reageren en kunt u een “ongeldige procedure aanroepfout” ontvangen.”

Microsoft onderzoekt momenteel dit probleem en zal een update verstrekken indien beschikbaar.”

(bron: een van de KB-artikelen hieronder)

Hier is een lijst van de updates die het probleem veroorzaken (zonder aanspraak op volledigheid):

  • Windows-10, Versie 1903 – 13 augustus 2019—KB4512508 (OS Bouwen 18362.295)
  • Windows-10, Versie 1809 – 13 augustus 2019—KB4511553 (OS Bouwen 17763.678)
  • Windows-10, Versie 1803 – 13 augustus 2019—KB4512501 (OS Bouwen 17134.950)
  • Windows-10, Versie 1709 – 13 augustus 2019—KB4512516 (OS Bouwen 16299.1331)
  • Windows-10, Versie 1703 – 13 augustus 2019—KB4512507 (OS Bouwen 15063.1988)
  • Windows 8.1 – 13 augustus 2019—KB4512489 (Security-update alleen)
  • Windows 8.1-13 augustus 2019-Kb4512488 (Monthly Rollup)

sommige reproduceerbare foutscenario ’s veroorzaakt door de Windows Update

Ik kwam twee verschillende, hoewel gerelateerde, scenario’ s waren de “ongeldige procedure aanroep of argument” fout optreedt als gevolg van de geïnstalleerde update. Beide zijn gerelateerd aan lege arrays.

geneste procedures met ParamArray-argumenten

als uw code meerdere procedures bevat waarbij variabele ParamArray-argumenten van de ene procedure naar de andere worden doorgegeven, zal dit de fout veroorzaken als de param-array op het hoogste niveau leeg was.

Hier is een klein VBA-code voorbeeld dat de fout reproduceert.

Public Sub StartParamArrayTest() TestArray1End SubPrivate Sub TestArray1(ParamArray params() As Variant) TestArray2 paramsEnd SubPrivate Sub TestArray2(ParamArray params() As Variant) TestArray3 params ‘ Vorige regel zal verhogen fout 5 – “Invalid procedure call of argument”Einde SubPrivate Sub TestArray3(ParamArray params() As Variant)’ StubOnly, het aanroepen van deze verhoging van de fout alreadyEnd Sub

ik heb niet gevonden een oplossing voor deze specifieke fout scenario nog.

een lege array byval doorgeven

Als u een lege array doorgeeft aan een procedure die een Varianttype argument ByVal verwacht, zal de procedure aanroep mislukken met de foutmelding. Dit wordt waarschijnlijk veroorzaakt door dezelfde interne mechanica als de vorige foutsituatie.

Hier is een klein voorbeeld dat de fout weergeeft.

Public Sub StartVarArrayTest() Dim testArray () As Object TestArrayProc testArray ‘ vorige regel zal error 5 – “ongeldige procedure aanroep of argument”End SubPrivate Sub TestArrayProc(ByVal varArray As Variant)’ StubOnly, aanroepen dit zal de error al verhogen End Sub

In dit geval kan de fout voorkomen worden door in de lege array ByRef door te geven aan de procedure.

Private Sub TestArrayProc (ByRef varArray As Variant) ‘StubOnly, dit aanroepen zal de errorEnd Sub

niet verhogen dit zou in de meeste scenario’ s een haalbare oplossing moeten zijn.

met behulp van de Array-functie om een multi-value combo box te wissen

Als u de Array-functie zonder argumenten gebruikt om een lege array aan een variabele toe te wijzen, zult u opnieuw de fout “Ongeldige procedure aanroep” zien. Maar als u de Array-functie zonder argumenten gebruikt om een keuzelijst met meerdere waarden uit VBA-code te wissen, ziet u een run-time error 2004 “Er is niet genoeg geheugen om deze bewerking uit te voeren. Sluit onnodige programma ‘ s en probeer de bewerking opnieuw.”

Private Sub Command3_Click () Me.cboMultiValue.Value = Array () End Sub

Ik heb deze variatie van het probleem zelf niet gezien, maar het werd gerapporteerd in een thread op het Access mdsn Forum.

verdere overwegingen – “…kan stoppen met reageren … “

de hierboven genoemde scenario ‘ s zijn vrij eenvoudig te diagnosticeren, als je eenmaal weet over de oorzaak van de fout. Echter, Ik ben meer bezorgd over de “kan stoppen met reageren” deel van de beschrijving van de know probleem. Dit is iets dat veel moeilijker is op te sporen en te diagnosticeren. Nu we over deze fout weten, kunnen we waarschijnlijk een dergelijke situatie ook diagnosticeren, maar zonder deze kennis zou het vinden van de oorzaak bijna onmogelijk zijn geweest.

algemene oplossing / tijdelijke oplossing

zolang Microsoft geen nieuwe update heeft uitgebracht om dit probleem aan te pakken en op te lossen, is de enige echte “oplossing” het verwijderen van de Windows-Updates van 13 augustus 2019. Zodra u de update hebt verwijderd, zal uw code draaien als voorheen. Geen verdere maatregelen nodig.

het verwijderen en uitstellen van een beveiligingsupdate voor Windows is uiteraard niet ideaal. Je moet afwegen of het effect van deze update op je VBA-toepassingen ernstig genoeg is om dit te rechtvaardigen.

bij mijn weten is er nog geen bestaande exploit bekend voor de beveiligingsproblemen die met die update zijn opgelost. (Disclaimer: ik ben geen beveiligingsexpert!) Dus, rekening houdend met verschillende toepassingen zwaar getroffen door de hierboven beschreven problemen, Ik aanbevolen aan mijn klanten om de update uit te stellen tot nader bericht.

Update 2019-08-18: een Fix lijkt aan de gang …

in de late uren van 16 augustus Microsoft heeft de update 16 augustus 2019—KB4512494 (OS Build 16299.1365) naar Windows 10, versie 1709 (alleen!).

De lijst “verbeteringen en correcties” voor deze update bevat dit item:

  • lost een probleem op waardoor het volgende niet meer reageert:
    • toepassingen die zijn gemaakt met Visual Basic 6 (VB6).
    • macro ‘ s die Visual Basic for Applications (VBA) gebruiken.
    • Scripts of apps die gebruik maken van Visual Basic Scripting Edition (VBScript).

    u kunt ook een “ongeldige procedure aanroep” – fout ontvangen.

dus, Microsoft lijkt echt een poging te doen om deze puinhoop snel opgelost. Tot nu toe is er alleen de oplossing voor de specifieke versie 1709 van Windows 10. Er is nog geen oplossing beschikbaar voor nieuwere versies van Windows 10, laat staan Windows 7 of 8. Niettemin, dit is een zilveren rand aan de horizon, en het lijkt te zijn waarschijnlijk dat andere updates vaststelling van het probleem op andere versies van weduwen zal volgen in de volgende week.

Update: er is ook een oplossing beschikbaar voor Windows 8.1/Windows Server 2012 R2. Deze update wordt niet vermeld in de pagina updategeschiedenis voor venster 8.1 op de Microsoft-website en het is niet beschikbaar via Windows Update. U kunt het installeren via de Microsoft Update-catalogus. – Ik heb net geïnstalleerd op mijn belangrijkste ontwikkeling computer en het lijkt alle reproduceerbare variaties van deze fout hierboven vermeld op te lossen.

Update 2019-09-02-Patches beschikbaar voor alle besturingssystemen

de week na de oorspronkelijke, problematische Windows-Update heeft Microsoft een paar patches uitgebracht om de VBA-problemen op te ruimen. Helaas, de patch voor de meest up-to-date versie van Windows 10 ontbrak enige tijd. Tot slot, op Augustus 30, Microsoft ook vrijgegeven van het pad voor Windows 10, V1903.

Het is een beetje vervelend dat Microsoft Windows 10 gebruikers aanmoedigt om te updaten naar de meest recente versie de hele tijd, maar dan geeft de belangrijke patch om dit ernstige VBA probleem weken later dan de overeenkomstige patches voor alle andere besturingssystemen op te lossen.

Hier is een lijst van alle patches die het VBA-probleem oplossen:

  • Windows 10, versie 1903-30 augustus 2019-KB4512941 (OS Build 18362.329)
  • Windows 10, versie 1809 + Windows Server 2019 – 17 augustus 2019—KB4512534 (OS Build 17763.720)
  • Windows-10, versie 1803 – 19 augustus 2019—KB4512509 (OS Bouwen 17134.984)
  • Windows-10, versie 1709 – 16 augustus 2019—KB4512494 (OS Bouwen 16299.1365)
  • Windows-10, versie 1703 – 17 augustus 2019—KB4512474 (OS Bouwen 15063.2021)
  • Windows-10, versie 1607 + Windows Server 2016 – 17 augustus 2019—KB4512495 (OS Bouwen 14393.3181)
  • Windows 8.1 Windows Server 2012 R2 – Update KB4517298 16 augustus 2019
  • Windows 7 SP1 en Windows Server 2008 R2 SP1: Update KB4517297 16 augustus 2019
    (Onjuiste download link. Hier is de juiste downloadlink naar de Microsoft Update-catalogus)

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.