RegExp-Fehler in Access 2021 nach Office-Update

Sittich

Neuer Benutzer
Beiträge
4
Hallo zusammen,

seit dem Update von Access 2021 auf Version 2508 Build 16.0.19127.20192 (32 und 64 -Bit) funktionieren einige RegExp-Patterns
nicht mehr. Der von bestimmten Mustern mit „LookAhead“ in der C++-Bibliothek verursachte Fehler lautet wie folgt:

Error.webp

Hier etwas Code, der den Fehler reproduziert:

'Verweis auf "Microsoft VBScript Regular Expressions 5.5" setzen!
Public Sub crashRegExp()

Dim sTest As String
Dim myReg As RegExp
Dim erg As MatchCollection
sTest = "Blabla Hallo Welt Blabla"

Set myReg = New RegExp

myReg.Pattern = "(Hallo).*(Welt)"
Set erg = myReg.Execute(sTest)
Debug.Print erg(0).Value

'Pattern mit Lookahead: Scheppert bei aktualisiertem Office 16
myReg.Pattern = "(Hallo).*(?=Welt)"
Set erg = myReg.Execute(sTest) '<-Crash
Debug.Print erg(0).Value
End Sub

Patterns mit „LookAhead“ funktionierten in Access-Version 2507 und früher sowie in Access 15 durchgehend fehlerfrei.
Von daher vermute ich fast, dass es ein Bug in der neuen Access-Version ist. Kann das jemand bestätigen?
Ich hatte schon versucht dies in zwei Microsoft-Foren zu posten, aber die Beiträge wurden jeweils kommentarlos gelöscht :(

TIA & Gruß,
Marcus
 
Werbung:
Interessant!
Wenn das so stimmt und deine Beiträge dort nicht wegen übergriffiger Formulierungen entfernt wurden, dann bestätigt das einige meiner Vorurteile meine Meinung über Microsoft.
Dementsprechend nutze ich deren Produkte nicht, außer ich bin beruflich dazu gezwungen und kann im Zweifel auf bezahlten Support zurück greifen.
Sorry, dass ich nicht mehr dazu beitragen kann.
 
Finde ich interessant und bin leider zu oft auf MS angewiesen aber bei Access bin ich zum Glück auch raus. Update-Probleme gibt es ja zu Hauf.
 
Hallo zusammen,

seit dem Update von Access 2021 auf Version 2508 Build 16.0.19127.20192 (32 und 64 -Bit) funktionieren einige RegExp-Patterns
nicht mehr. Der von bestimmten Mustern mit „LookAhead“ in der C++-Bibliothek verursachte Fehler lautet wie folgt:
[....]
Patterns mit „LookAhead“ funktionierten in Access-Version 2507 und früher sowie in Access 15 durchgehend fehlerfrei.
Von daher vermute ich fast, dass es ein Bug in der neuen Access-Version ist. Kann das jemand bestätigen?
Ich hatte schon versucht dies in zwei Microsoft-Foren zu posten, aber die Beiträge wurden jeweils kommentarlos gelöscht :(

Inzwischen kenn ich die Lösung: Ja es ist ein Bug in der neuen Accessversion!
Die Lösung, bzw. den Link zur Lösung hatte donkarl in seinem Forum gepostet:
https://donkarl.com/forum/forums/thread-view.asp?tid=2151&mid=6798#M6798

Offenbar ein Bug der durch die Integration der RegExp-Funktionalität direkt in der VBA ab Version 2508 entstanden ist.
Hier noch die Info zur Integration:
Prepare your VBA projects for VBScript deprecation in Windows - Microsoft 365 Developer Blog

Warum man darüber offenbar nichts in MS-moderierten Foren schreiben darf, weiß ich auch nicht 🤔

Gruß,
Marcus
 
Inzwischen kenn ich die Lösung: Ja es ist ein Bug in der neuen Accessversion!
Die Lösung, bzw. den Link zur Lösung hatte donkarl in seinem Forum gepostet:
https://donkarl.com/forum/forums/thread-view.asp?tid=2151&mid=6798#M6798

Offenbar ein Bug der durch die Integration der RegExp-Funktionalität direkt in der VBA ab Version 2508 entstanden ist.
Hier noch die Info zur Integration:
Prepare your VBA projects for VBScript deprecation in Windows - Microsoft 365 Developer Blog

Warum man darüber offenbar nichts in MS-moderierten Foren schreiben darf, weiß ich auch nicht 🤔

Gruß,
Marcus
Also hier von einem Bug zu sprechen ....
Bei einem korrekten Einsatz mit Early Binding kann der Fehler nicht auftreten.
Es geht doch nur darum die korrekte Klasse einzusetzen, die nicht mal was mit Access zu tun hat.
Beim Einsatz von Late Binding, kann der Compiler nicht unterstützen, da kracht es dann zur Laufzeit.
 
Also hier von einem Bug zu sprechen ....
Bei einem korrekten Einsatz mit Early Binding kann der Fehler nicht auftreten.
Es geht doch nur darum die korrekte Klasse einzusetzen, die nicht mal was mit Access zu tun hat.
Beim Einsatz von Late Binding, kann der Compiler nicht unterstützen, da kracht es dann zur Laufzeit.
Haste überhaupt mal nachgelesen, worum es hier geht oder willste einfach nur mal was posten?
Mal den Beispielcode oben angesehen? Wie würdest Du das denn fixen?
Der Fehler tritt ja gerade bei Early-Binding ab Access 2508 auf, vorher nicht. Natürlich ein Bug.
Kannst ja mal den Link bei donkarl und die dortigen Links checken.
 
Über die Abschaltung von ActiveX ist im Vorfeld ausgiebig diskutiert worden. Ebenso wurden Lösungsansätze immer wieder dargestellt um den Umstieg zu erleichtern. Das altbekannte Access-Bashing hier im Forum wundert mich eigentlich immer noch, obwohl eigentlich durchgehend zu allen Themen. die hier in den letzten Monaten auftauchten, Lösungen gefunden wurden. Zudem wird es von Leuten betrieben , die selbst keine oder wenig Erfahrung mit Access haben.

Hier noch Aussage von Mikrosoft und ein Heise-Artikel:

Microsoft hat ActiveX in Microsoft Office 2024 abgeschaltet. Ab dem neuen Office 2024 wird die Standardkonfiguration für ActiveX-Objekte von "Vor der Aktivierung aller Steuerelemente mit minimalen Einschränkungen eine Eingabeaufforderung anzeigen" zu "Alle Steuerelemente ohne Benachrichtigung deaktivieren" geändert. Dies bedeutet, dass Benutzer nach der Implementierung dieser Änderung keine ActiveX-Objekte mehr in Office-Dokumenten erstellen oder damit interagieren können. Die Änderung ist Teil einer umfassenden Strategie zur Stärkung der Sicherheit von Microsoft Office und soll vor den bekannten Sicherheitsproblemen von ActiveX-Schwachstellen

 
Über die Abschaltung von ActiveX ist im Vorfeld ausgiebig diskutiert worden. Ebenso wurden Lösungsansätze immer wieder dargestellt um den Umstieg zu erleichtern. Das altbekannte Access-Bashing hier im Forum wundert mich eigentlich immer noch, obwohl eigentlich durchgehend zu allen Themen. die hier in den letzten Monaten auftauchten, Lösungen gefunden wurden. Zudem wird es von Leuten betrieben , die selbst keine oder wenig Erfahrung habe.

Hallo Andreas,
es geht mir nicht um Bashing, aber in 2508 ist halt ein Fehler im RegEx-Paser. Wahrscheinlich ist er im Zuge der Integration von RegExp direkt in VBA entstanden. Ab 2508 kann man sich nämlich das Einbinden der VB-Script-RegExp sparen, siehe:
https://devblogs.microsoft.com/microsoft365dev/how-to-prepare-vba-projects….
Theoretisch, aber da ist halt der Bug 😉
cu,
Marcus
 
Hallo Marcus,
ich meinte auch nicht Dich. Sorry, wenn das so rüber gekommen ist. Du hast lediglich hier nach einer Lösung im Zusammenhang mit Access gesucht. Dazu ist das Forum da. Es wird aber, anstatt eine konkrete Lösung anzubieten von immer wieder den gleichen "Gurus" mit Access-Halbwissen auf Access herumgehackt. Das finde ich hier unpassend.

Da Du den Workaround bei DonKarl schon selbst gefunden hast, brauche ich da nicht näher drauf einzugehen.
 
Werbung:
Haste überhaupt mal nachgelesen, worum es hier geht oder willste einfach nur mal was posten?
Mal den Beispielcode oben angesehen? Wie würdest Du das denn fixen?
Der Fehler tritt ja gerade bei Early-Binding ab Access 2508 auf, vorher nicht. Natürlich ein Bug.
Kannst ja mal den Link bei donkarl und die dortigen Links checken.
Nochmal - es ist kein Access Fehler.
Die verwendete Klasse hat nichts mit Access zu tun, was aber unwichtig ist.

Jetzt habe ich mal kurz getestet.
Hab auch die Version 2508 und da läuft dein Code-Beispiel ohne Fehler.
Wie ich sehe, wurde die benutzte vbscript.dll am 27.8.25 erstellt Version(10.0.26100.5074).
Möglicherweise wurde der Bug also bereits gefixt.

Und ja natürlich, jedes Update einer dll birgt Risiken und sofern man die dll nicht selbst schreibt ist man immer von extern abhängig - entweder Rollback des Updates oder warten, so wie immer.

Und was ich generell tun würde - wenn möglich kein Access verwenden.
Ich bin in einem Unternehmen mit ursprünglich hunderten jetzt noch duzenden Access Anwendungen - wir killen Sie nach der Reihe und ersetzen sie in der Regel durch Web-Anwendungen oder verlegen die Funktionalität in Rest Services usw.

Edit: Und natürlich kann man auch gleich die Klasse VBA.RegEx verwenden, anstatt hier eine fremde Klasse zu nutzen.
 
Zuletzt bearbeitet:
Zurück
Oben