hirtelen “Érvénytelen eljáráshívás vagy argumentum” hiba a VBA-ban

írta: Philipp Stiefel, eredetileg megjelent 15.augusztus, 2019, Utoljára frissítve szeptember 2., 2019

mielőtt elkezdenénk, tegyük a dolgokat perspektívába: “Érvénytelen eljáráshívás vagy érv” meglehetősen gyakori hiba. Ha új kód írása közben találkozik ezzel a hibával, akkor ez valószínűleg a kód tényleges hibája, amely nem kapcsolódik a szöveg témájához.

Ha az alkalmazás kódja hibátlanul futott, de most hirtelen meghiúsul az ‘5’ futási idejű hibával-“Érvénytelen eljáráshívás vagy argumentum”, akkor valószínűleg a 13.augusztus 2019 – I Windows frissítések A Windows összes jelenlegi verziójához.

Ez az Office/VBA összes jelenlegi verzióját érinti Windows 10, Windows 8.1 és Windows 7 rendszeren, csakúgy, mint az összes Windows Server operációs rendszert a Windows Server 2008-tól A Windows Server 2019-ig.

maga a Microsoft már hozzáadta ezt a figyelmeztetést a “frissítés ismert problémái” listához.

” a frissítés telepítése után előfordulhat, hogy a Visual Basic 6 (VB6) használatával készült alkalmazások, a Visual Basic for Applications (VBA) használatával készült makrók, valamint a Visual Basic Scripting Edition (VBScript) használatával készült szkriptek vagy alkalmazások nem válaszolnak, és “érvénytelen eljáráshívási hiba” jelenik meg.”

a Microsoft jelenleg vizsgálja ezt a problémát, és amint rendelkezésre áll, frissítést fog nyújtani.”

(Forrás: az alább felsorolt KB-cikkek bármelyike)

itt található a problémát okozó frissítések listája (a teljesség igénye nélkül):

  • Windows 10, 1903 – as verzió—augusztus 13, 2019 – KB4512508 (OS Build 18362.295)
  • Windows 10, 1809—es verzió – augusztus 13, 2019—KB4511553 (OS Build 17763.678)
  • Windows 10, 1803 – as verzió—augusztus 13, 2019 – kb4512501 (OS build 17134.950)
  • Windows 10, 1709—es verzió – augusztus 13, 2019—kb4512516 (OS build 16299.1331)
  • Windows 10, 1703-as verzió-augusztus 13, 2019-kb4512507 (OS build 15063.1988)
  • Windows 8.1-augusztus 13, 2019-kb4512489 (csak biztonsági frissítés)
  • Windows 8.1-August 13, 2019-KB4512488 (havi Összegzés)

néhány reprodukálható hibaforgatókönyv, amelyet a Windows Update okozott

két különböző, bár kapcsolódó forgatókönyvvel találkoztam: az “Érvénytelen eljáráshívás vagy argumentum” hiba a telepített frissítés miatt jelentkezik. Mindkettő üres tömbökhöz kapcsolódik.

beágyazott eljárások ParamArray argumentumokkal

Ha a kód több olyan eljárást tartalmaz, ahol a változó ParamArray argumentumok átkerülnek az egyik eljárásból a másikba, ez hibát okoz, ha a legfelső szintű param tömb üres volt.

itt van egy kis VBA kód példa, amely reprodukálja a hibát.

Public Sub StartParamArrayTest() TestArray1End SubPrivate Sub TestArray1(ParamArray params() változatként) TestArray2 paramsEnd SubPrivate Sub TestArray2(ParamArray params() változatként) TestArray3 params előző sora 5 – ös hibát emel – “Érvénytelen eljáráshívás vagy argumentum”End SubPrivate Sub TestArray3(ParamArray params() változatként)’ StubOnly, ennek meghívása növeli a SubPrivate Sub TestArray3 (ParamArray params () változatként)’ az error alreadyend sub

még nem találtam megoldást erre a hibajelenségre.

üres tömb ByVal átadása

Ha üres tömböt ad át egy ByVal variáns típusú argumentumot váró eljárásnak, az eljáráshívás sikertelen lesz a hibaüzenettel. Ezt valószínűleg ugyanaz a belső mechanika okozza, mint az előző hibahelyzetet.

itt van egy kis példa a hiba reprodukálására.

Public Sub StartVarArrayTest() Dim testArray () as Object TestArrayProc testArray ‘ az előző sor 5 – ös hibát emel – “Érvénytelen eljáráshívás vagy argumentum”End SubPrivate Sub TestArrayProc (ByVal varArray as Variant)’ StubOnly, ennek meghívása növeli a hibát alreadyEnd Sub

ebben az esetben a hiba megakadályozható az üres tömb átadásával byref az eljáráshoz.

Private sub TestArrayProc(Byref varArray mint variáns) ‘ StubOnly, ennek meghívása nem növeli az errorEnd Sub

Ez a legtöbb esetben megvalósítható megoldás lehet.

A tömb függvény használata többértékű kombinált lista törléséhez

ha argumentumok nélküli tömb függvényt használ egy üres tömb hozzárendeléséhez egy változóhoz, akkor ismét megjelenik az “Érvénytelen eljáráshívás” hiba. De ha argumentumok nélkül használja a tömb függvényt a többértékű kombinált lista törléséhez a VBA-kódból, akkor egy 2004-es futásidejű hiba jelenik meg: “nincs elég memória a művelet végrehajtásához. Zárja be a felesleges programokat, és próbálja meg újra a műveletet.”

privát Sub Command3_Click () nekem.cboMultiValue.Value = Array () End Sub

nem találkoztam a probléma ezen variációjával, de az Access MDSN Fórum egyik szálában jelentették.

további megfontolások – “… nem válaszolhat…”

a fent említett forgatókönyvek meglehetősen könnyen diagnosztizálhatók, ha megismerjük a hiba okát. Engem azonban jobban aggaszt a know-probléma leírásának “nem válaszolhat” része. Ez olyasmi, amit sokkal nehezebb nyomon követni és diagnosztizálni. Most, hogy tudunk erről a hibáról, valószínűleg diagnosztizálhatunk egy ilyen helyzetet is, de ezen ismeretek nélkül az ok megtalálása szinte lehetetlen lett volna.

általános megoldás / ideiglenes megoldás

mindaddig, amíg a Microsoft nem adott ki újabb frissítést a probléma megoldására és megoldására, az egyetlen igazi “megoldás” az 13 augusztus 2019 Windows frissítéseinek eltávolítása. Miután eltávolította a frissítést, a kód a korábbiakhoz hasonlóan fog futni. Nincs szükség további lépésekre.

nyilvánvaló, hogy a Windows biztonsági frissítésének eltávolítása és elhalasztása nem ideális. Mérlegelnie kell, hogy a frissítés hatása a VBA-alkalmazásokra elég súlyos-e ennek igazolásához.

tudomásom szerint még nem ismert a frissítéssel rögzített biztonsági problémák kihasználása. (Jogi nyilatkozat: Nem vagyok biztonsági szakértő!) Tehát, figyelembe véve a fent leírt problémák által súlyosan érintett számos alkalmazást, azt javasoltam ügyfeleimnek, hogy halasszák el a frissítést további értesítésig.

frissítés 2019-08-18: úgy tűnik, hogy javításra kerül sor …

augusztus 16—i késő órákban a Microsoft kiadta a frissítést augusztus 16, 2019-KB4512494 (OS Build 16299.1365) Windows 10-re, 1709-es verzióra (csak!).

a frissítéshez tartozó “javítások és javítások” lista a következő elemet tartalmazza:

  • egy olyan problémát kezel, amely a következők VÁLASZADÁSÁT okozhatja:
    • Visual Basic 6 (VB6) használatával készült alkalmazások.
    • a Visual Basic for Applications (VBA) programot használó makrók.
    • szkriptek vagy alkalmazások, amelyek Visual Basic Scripting Edition (VBScript).

    ” Érvénytelen eljáráshívás “hibaüzenetet is kaphat.

tehát úgy tűnik, hogy a Microsoft valóban erőfeszítéseket tesz annak érdekében, hogy ezt a rendetlenséget gyorsan kijavítsa. Eddig csak a Windows 1709 adott verziójának javítása van 10. A Windows 10 újabb verzióihoz még nincs javítás, nem is beszélve a Windows 7 vagy 8-ról. Mindazonáltal, ez egy ezüst bélés a láthatáron, és valószínűnek tűnik, hogy a Widows más verzióiban a problémát rögzítő egyéb frissítések a következő héten következnek.

frissítés: a Windows 8.1/Windows Server 2012 R2 rendszerhez is elérhető javítás. Ez a frissítés nem szerepel a Windows 8.1 frissítési előzményei lapon a Microsoft webhelyén, és nem érhető el a Windows Update szolgáltatáson keresztül. Telepítheti a Microsoft Update katalóguson keresztül. – Most telepítettem a fő fejlesztő számítógépemre, és úgy tűnik, hogy kijavítja a fent említett hiba összes reprodukálható változatát.

frissítés 2019-09-02 – az összes operációs rendszerhez elérhető javítások

az eredeti, problémás Windows frissítést követő héten a Microsoft kiadott néhány javítást a VBA-problémák tisztítására. Sajnos a Windows 10 legfrissebb verziójának javítása egy ideje hiányzott. Végül augusztus 30-án a Microsoft kiadta a Windows 10, V1903 elérési útját is.

kissé bosszantó, hogy a Microsoft arra ösztönzi a Windows 10 felhasználókat, hogy folyamatosan frissítsenek a legfrissebb verzióra, de ezután kiadja a fontos javítást, hogy hetekkel később megoldja ezt a súlyos VBA-problémát, mint az összes többi operációs rendszer megfelelő javításai.

itt található a VBA-problémát rögzítő összes javítás listája:

  • Windows 10, 1903 – as verzió-augusztus 30, 2019 – KB4512941 (OS Build 18362.329)
  • Windows 10, 1809—es verzió + Windows Server 2019-augusztus 17, 2019-KB4512534 (OS Build 17763.720)
  • Windows 10, 1803 – as verzió—augusztus 19, 2019 – KB4512509 (OS Build 17134.984)
  • Windows 10, 1709—es verzió – augusztus 16, 2019—KB4512494 (OS Build 16299.1365)
  • Windows 10, 1703 – as verzió—augusztus 17, 2019 – kb4512474 (OS build 15063.2021)
  • Windows 10, verzió 1607 + Windows Server 2016-augusztus 17, 2019-kb4512495 (OS build 14393.3181)
  • Windows 8.1 Windows Server 2012 R2-frissítés kb4517298 augusztus 16, 2019
  • Windows 7 SP1 és Windows Server 2008 R2 SP1: frissítés kb4517297 augusztus 16, 2019
    (helytelen letöltési link. Itt található a helyes letöltési link a Microsoft Update katalógushoz)

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.