í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
- beágyazott eljárások ParamArray argumentumokkal
- üres tömb ByVal átadása
- A tömb függvény használata többértékű kombinált lista törléséhez
- további megfontolások – “… nem válaszolhat…”
- általános megoldás / ideiglenes megoldás
- frissítés 2019-08-18: úgy tűnik, hogy javításra kerül sor …
- frissítés 2019-09-02 – az összes operációs rendszerhez elérhető javítások
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.
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.
ebben az esetben a hiba megakadályozható az üres tömb átadásával byref az eljáráshoz.
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.”
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)