Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

im VBA-Code nach „ß” suchen

Begonnen von Doming, September 22, 2025, 06:46:40

⏪ vorheriges - nächstes ⏩

Doming

Hallo,

ich habe hier eine alte, mit Sonderzeichen verseuchte Datenbank auf den Tisch bekommen, um sie auch mit Rechnern ohne Sonderzeichen verwenden zu können. Also Sonderzeichen aus den Controls raus.

Mit ä. ö und ü geht das auch flott, aber wenn man nach dem ß sucht, ,,findet" die Suche auch alle ,,ss".

Wie kann man der Zeichensuche beibringen, dass sie nur das markiert, was auch eingegeben wurde?

Gruß
 Doming

PhilS

Das scheint leider nicht möglich zu sein. :-(

Auch kommerzielle Tools, wie MZ-Tools und Find and Replace haben damit ein Problem. Allerdings kann man bei diesen Tools immerhin mit der RegExp-Option nach [ß] suchen und das gewünschte Ergebnis erreichen. - Das scheitert bei der eingebauten Suche leider auch, wenn man die "Use Pattern matching"-Option aktiviert.



Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Doming

c'est la vie... dann muss man sich eben durch die ganzen Access-Erwähnungen und sonstigen DoppelEssen durchklicken

Hatte gehofft, dass ich da nur eine Wissenslücke habe

Gruß
 Doming

Knobbi38

Hallo Doming,

dafür verwende ich schlichtweg einen ext. Programmier-Editor und kopiere den Code einfach per CP. In dem Fall lohnen sich die wenigen Tastendrücke mehr auf jeden Fall.

Knobbi38

Doming

*urgs* wenige Tastendrücke...   :-\

die DB hat gefühlt mehr Formulare und Module als Eszette, da kopiere ich mir ja nen Wolf.
Aber danke für den Vorschlag, auf die Idee bin ich nicht gekommen.

Knobbi38

#5
Hallo Doming,

wenn es etwas mehr wird, könnte man es automatisieren ...

  • Datenbank in neuer Access-Instanz öffnen
  • Objekte als Text exportieren "SaveAsText()"
  • Änderungen an der Textdatei vornehmen und speichern
  • Textdatei als Objekt wieder "LoadFromText() importieren
  • Datenbank schließen

Air-Code:
  Dim app As Access.Application
 
  Set app = New Access.Application
  app.AutomationSecurity = msoAutomationSecurityForceDisable
  app.UserControl = False
 
  app.OpenCurrentDatabase "X:\MyDatabse.accdb", True
  app.SaveAsText acForm, "MyFormName", "x:\MyFormName.txt"
 
  ' Todo: make the changes in the text file
 
  app.LoadFromText acForm, "MyFormName", "x:\MyFormName.txt"
  app.RunCommand acCmdCompileAndSaveAllModules
  app.CloseCurrentDatabase
  app.Quit
  Set app = Nothing

Die Namen der Objekte und die Objekttypen können mit Hilfe der Containers-Auflistung ermittelt werden.

Knobbi38

PhilS

Zitat von: Knobbi38 am September 22, 2025, 13:26:24Die Namen der Objekte und die Objekttypen können mit Hilfe der Containers-Auflistung ermittelt werden.
Einfacher ist: CurrentProject.AllForms 
Und analog .AllReports, .AllModules

 
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Knobbi38

Hallo Phil,

wäre ja schön, aber auf die Eigenschaft CurrentProjekt besteht in dem Moment kein Zugriff (Error 7952)!

Knobbi38

PhilS

Zitat von: Knobbi38 am September 22, 2025, 14:06:48wäre ja schön, aber auf die Eigenschaft CurrentProjekt besteht in dem Moment kein Zugriff (Error 7952)!
?
Eigenartig. Ich benutze CurrentProject sehr häufig und an diesen Fehler kann ich mich nicht erinnern.
Dein Code modifiziert wie folgt, läuft ohne Probleme:

[...]
  app.OpenCurrentDatabase Environ("Temp") & "\Database3.accdb", True
 
  Dim cp As CurrentProject
  Set cp = app.CurrentProject
  app.SaveAsText acForm, cp.AllForms(0).Name, Environ("Temp") & "\" & cp.AllForms(0).Name & ".txt"
 
  ' Todo: make the changes in the text file
 [...]
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Knobbi38

#9
Hallo Phil,

ich habe es nicht verifiziert, aber ich könnte mir Vorstellen, daß Makros in deinem Beispiel generell erlaubt sind und damit der Zugriff auf CurrentProject möglich wird.

In meinem Beispiel jedoch werden explizit durch
app.AutomationSecurity = msoAutomationSecurityForceDisablealle Makros in der automatisierten Instanz deaktiviert, um so die Ausführung von Code während des Öffnens zu verhindern. Es werden somit keine Initialisierungen und Datenbankzugriffe mehr automatisch durchgeführt, schließlich soll ja nur der Code bearbeitet werden.

Die Zeile
app.UserControl = Falseist eher kosmetischer Natur und kennzeichnet damit, daß der Zugriff per Automation erfolgt und die Anwendung selber ausgeblendet ist.
 
Deshalb habe ich in diesem Beispiel ausnahmsweise vorgeschlagen, die Informationen per Container-Auflistung auszulesen, da diese Möglichkeit seltener angewendet wird und wenig bekannt ist.
 

VG Knobbi38

PhilS

Zitat von: Knobbi38 am September 22, 2025, 23:01:08[...]ich könnte mir Vorstellen, daß Makros in deinem Beispiel generell erlaubt sind und damit der Zugriff auf CurrentProject möglich wird.

In meinem Beispiel jedoch werden explizit durch
Mein Beispiel ist dein Beispiel. ;-)
Ich habe dein Beispiel unverändert (bis auf die Pfade) übernommen, und nur die obigen Zeilen zusätzlich eingefügt.


Zitat von: Knobbi38 am September 22, 2025, 23:01:08app.AutomationSecurity = msoAutomationSecurityForceDisablealle Makros in der automatisierten Instanz deaktiviert, um so die Ausführung von Code während des Öffnens zu verhindern. Es werden sommit keine Initialisierungen und Datenbankzugriffe mehr automatisch durchgeführt, schließlich soll ja nur der Code bearbeitet werden.
Von der automatisierten Instanz wird kein Code ausgeführt. Der laufende Code ist nur in der primären Instanz, die die sekundäre, automatisierte Instanz steuert. Daher glaube ich nicht, dass die AutomationSecurity der Sekundärinstanz hierfür relevant ist.
Die Einstellung dürfte nur verhindern, dass Code durch AutoExec oder ein Startup-Form ausgeführt wird. app.Run und app.Eval dürften durch diese Einstellung ebenfalls nicht funktionieren.


Zitat von: Knobbi38 am September 22, 2025, 23:01:08Deshalb habe ich in diesem Beispiel ausnahmsweise vorgeschlagen, die Informationen per Container-Auflistung auszulesen, da diese Möglichkeit seltener angewendet wird und wenig bekannt ist.
Das finde ich als alternativen Ansatz auch durchaus sinnvoll. 
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor