Zahlen extrahieren von Text

.. das wohl mächtigste Werkzeug in Bill Gates' Büro-Sippe. Ob reine Formeln, PowerQuery oder VBA. Hier bleiben kaum Wünsche unerfüllt.
Benutzeravatar
d'r Bastler
Beiträge: 670
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 175 Mal
Danksagung erhalten: 90 Mal

Re: Zahlen extrahieren von Text

#21

Beitrag von d'r Bastler »

Moin Tom aber auch!

Der blöde Ehrgeiz hat es mich nicht bleiben lassen, meine Schnapsidee weiter zu entwickeln und siehe da: gar nicht so ganz schlecht ... :o

Ausnahmsweise stelle ich hier mal wieder eine Arbeitsmappe ein (sonst beschränke ich mich ja gerne auf Snippets), die eine erste Version eines Funktionsassistenten für UDFs zeigt.

Die Idee dahinter: Der Nutzer sieht bei der Eingabe =UDF() keine HilfeToolTips, hätte aber trotzdem gerne welche, dann muss er jetzt nur wissen: ersetze das = durch eine Raute # (die man auch als doppelt durchgestrichenes = verstehen könnte), bestätige mit Enter und kehre mit der rechten Maustaste in die Zelle zurück (gehen Sie nicht über Los, ziehen Sie keine 4000 EUR ein) und schwupps öffnet sich meine Version des UDFhelpers.

Dieser holt sich die APO aus einer Tabelle mit Namen UDFhelp. Hat der Admin dort seine UDFs mit den notwendigen Details eingetragen, werden die beim Aufruf der USF automatisch angezeigt. Zudem bietet die USF die Möglichkeit andere UDFs auszuwählen. Nun ist es am Nutzer, die APOs einzutragen und auf Execute zu klicken. Im Idealfall hat er dann die fertig parametrisierte Formel in seiner Zelle stehen und kann damit arbeiten.

MS hat es offensichtlich gefallen die Formelsyntax upzugraden, weshalb die nun in der Bearbeitungszeile sichtbare Formel nach dem = um ein @ ergänzt wird. Ob das in allen Versionen so ist, weiß ich nicht, ich habe nur in Win11/XL 2021 getestet. Eine Änderung zum Nachteil meiner Bastelei konnte ich nicht sehen.

Es gibt in der USF drei Buttons: Clear, Update UDF und Execute. Nummern 1 & 3 sind schon am Start, Nummer 2 werde ich nach einem Feedback von Dir (und natürlich auch gerne von anderen!) als Option ergänzen: Bei jedem WorkbookOpen werden die UDFs des Workbooks gesucht und mit dem Sheet UDFhelp abgeglichen, stehen dann im UDFhelper also unmittelbar zur Verfügung. NACHTRAG: In der USF gibt es pro APO auch noch Hilfen per ControlTipText zur Eingabe! :!:

Noch mal Fachchinesich: USF + Sheet mit den APOs + Modul mit UDF und Eventhandlern + (leider noch) MinimalCode in den Worksheets. Und genau da freue ich mich sehr auf Deine qulassifizierten Ideen!
UDFhelp.xlsb
(27.24 KiB) Noch nie heruntergeladen
Für heute ist's mal gut - morgen gerne weiter

Viel Spaß damit! (Hätte ich fast vergessen ...)

lg!
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Zahlen extrahieren von Text

#22

Beitrag von thowe »

Moin Heb,

danke für deine Idee, deinen Ehrgeiz :)
Ich habe gerade jetzt die .xlsb heruntergeladen.
Ich bin aktuell anderweitig eingespannt.
Werde jedoch erst nächste Woche - vorher schaffe ich es leider nicht - thoweisiert - antworten....

Danke nochmals für deine Initiative und Arbeit! :v:

LG
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Zahlen extrahieren von Text

#23

Beitrag von thowe »

Hallo Heb,

doch noch kurz dazugemurmmelt...

Vom Design deines Entwurfsmusters würde ich ein wenig ändern und erzähle nun mal:

Trennen wir doch Daten, Logik und View ein wenig und verwenden die schon mit Bordmitteln von VBA6 zur Verfügung stehenden "Instrumente", das heißt vernünftiges Verwenden von Property Get() und Property Let(), schlau kombiniert mit UserForm_Activate() und UserForm_Initialize(). Das ganze sogar GANZ OHNE EIGENE KLASSE(!), was das Handling der UserForm betrifft. Denn, meines Erachtens soll die Verarbeitung auf Datenebene (Controller-Ebene) erfolgen und nicht in der View (UserForm).

Wertaufruf (in diesem Fall "Funktionsname" aus der Zelle) über Property GET löst zuerst das _Initialize Event der UserForm aus und erst danach Property LET, bedeutet UserForm wird initialisiert (eigentlich erstellt) bevor die Werte (aus dem Arbeitdblatt UDFHelp - via Property LET (in diesem Fall für die cbx...) "gesettet" werden. Da würden wir in einen Laufzeitfehler hineinstolpern, daher müssen wir _Activate() verwenden um den Laufzeitfehler zu vermeiden.

_Activate() wird ausgeführt , wenn die UserForm "erscheint" und _Initialize() wird ausgeführt wenn die UserForm erstellt ist. Abgesehen davon kann _Acitvate() öfters aufgerufen werden, wenn zB die UserForm mit Hide ausgeblendet wird und später die UserForm nochmals aufgerufen wird, OHNE das die Daten nochmals geladen werden müssen.

Daher Property GET und Property LET als Private im Modul. Damit übermitteln wir die Daten/Settings der UserForm, wenn Sie geladen werden. Das heißt wir übergeben die Properties mit der Anweisung die UserForm anzuzeigen und erhalten beim "AUSBLENDEN" der UserForm die Daten vom Benutzer - hier - in das Arbeitsblatt zurück.

Abschießend eine kleine Prozedur für passendes Hide und Unload der UserForm, damit können wir gleich das QueryClose() mitgestalten (das "X" rechts oben in der Ecke der UserForm).

Damit haben wir schon ein wenig das - denkbare - Prinzip von MVC (einfach ausgedrückt, Daten, Logik und View getrennt) umgesetzt.

Das werde ich - zeitnah - in den nächsten Tagen in deine .xlsb einbauen und sonst absolut nichts ändern.

Sonst noch ein paar inhaltliche Fragen:

Beschreibung der Funktionsparameter nicht nur als ToolTip bei den Textboxen sondern auch Anzeigen in einem weiteren Label unten bei Funktionsbescheibung?

Eventuell Funktionsargumente zählen und Labels, Textboxen dynamisch erstellen?

lg
Folgende Benutzer bedankten sich beim Autor thowe für den Beitrag:
d'r Bastler
Benutzeravatar
d'r Bastler
Beiträge: 670
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 175 Mal
Danksagung erhalten: 90 Mal

Re: Zahlen extrahieren von Text

#24

Beitrag von d'r Bastler »

Moin Tom,

na, Du hast aber 'ne kurze Woche! ;)

Lieben Dank für Dein Feedback, bei dem ich gestehen muss, dass ich mal gleich alle Absätze, außer den letzten zwei, so gut wie (noch!) gar nicht verstehe. Dein offenbar elaborierte Konzept ist einem autodidaktischen Bastler wie mir noch zu hoch. Aber ich will ja lernfähig bleiben und versuche heute Nachmittag mal es zu verstehen. :roll:

Zu den Absätzen, die ich verstanden habe:
Weitere Labels statt ToolTip für die F-Params wird sofort umgesetzt - ist natürlich erheblich nutzerfreundlicher. Hätte ich auch selber drauf kommen können, sacklzement :twisted:
Den dynamischen Aufbau der Textboxen hatte ich erwogen (ist ja im MS-Original auch so), aber wieder verworfen. Der Nutzer soll ein vertrautes Formular zu sehen bekommen. Die Anzahl der Parameter ist im Moment natürlich auf vier beschränkt (habe aber auch keine Idee, wozu man mehr brauchen könnte). Per Filter habe ich aber nicht vorhandene Paramater aus der Erstellung der Funktionsformel bereits ausgeschlossen. Auf meiner ToDo hierzu steht erst einmal (die bisher noch nicht gegebene) Möglichkeit der Korrektur von Fehleingaben.

Wenn ich damit soweit bin, mache ich ein neues Thema auf. Die dann verfügbare Version will ich mit weiteren Beispiel-Funktionen und einer Sub zum auslesen der in einem Workbook vorhandene UDF schmücken.

LG und bitte nicht überarbeiten :)
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Zahlen extrahieren von Text

#25

Beitrag von thowe »

Hallo Heb,

Danke für deine Rückmeldung.

wusstest du nicht wir Vulkanier haben:
Samstag, Samstag, Sonntag, Sonntag, Sonntag, Montag, Dienstag. Arbeitswoche damit kurz....

Es ist mir uangenehm, dass dies als elaboriert ankommt und sogar komme ich mir als Moelpackung vor. Ich bin - auch - Autodidakt :ugeek:
Tja, hättest du mir im Nov. 23 gesagt, dass ich sowas wie vorhin schreibe, und auch noch weiß, was ich da schreibe (das behaupte ich mal), dann hätte ich dich ungläubig angesehen... Man entwickelt sich und probiert einfach.

Das Gute an diesem Beispiel und den anderen ist, dass ich praktische Beispiele habe, all das "Erlesene" - mühsam (try & error) - umzusetzen. Lerneffekt ist jedoch phänomenal und fasizinierend (das Wort muss von einem Vulkanier kommen...)
Danke für die Gelgenheit und deine Geduld. Vielleicht wird dein UDF-Funktionsassistent "erlesen..."

Ja! neuer Thread zu Hebs UDF-Hilfe-Helferlein wäre sinnvoll.

Inhaltlich zu deiner Rückäußerung:
Ich denke mir ein Label für die Parameter, Optionsbeschreibung (weiter unten) wäre ausreichend. anstatt nach jeder Textbox. Mit dem _Exit() Event kann man das Label befüllen und die zur Textbox zugehörige Information/Erläuterung anzeigen, nicht?

Bezüglich Dynamik!
Das sollte dann das Sahnehäubchen und der Honig sein, wenn alles vorher stabil läuft, schlage ich vor

[EDIT - nachträglich hinzugefügt]

Warum als Trigger zuerst Enter dann in die Zelle und Rechtsclick?
Gäbe es andere Vorgehensweisen, oder spricht was gegen Andere?


LG
Benutzeravatar
d'r Bastler
Beiträge: 670
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 175 Mal
Danksagung erhalten: 90 Mal

Re: Zahlen extrahieren von Text

#26

Beitrag von d'r Bastler »

hintergründiges Schmunzel ...

zur Rückmeldung: Ich habe dem Label Description eine Brüderchen namens Parameter geboren, das einfach nach Auswahl der jeweiligen Textbox aus wsUDF gefüllt wird.Zur Übersichtlichkeit farblich pissgelb markiert. Einfache und schnelle Lösung.

Mein momentan größeres Problem: der Debugger mault mich in einem Code, den eben noch funktioniert hat, mit der unsinnigen Meldung an, dass nach End Sub/Function... nur Kommentare erlaubt seien (was ja prinzipiell richtig ist). Nur: Selbst wenn ich allen Code außer einer Sub ..End Sub auskommentiere, erzählt mir das MS-Ding den gleichen Unfug. Neustart XL & PC bisher erfolglos.

Okay - inzwischen doch gelöst: Im VBE kein Eigenschaftsfenster mehr für die USF, unsinnige Debugger-Meldungen ... was tun? Mut zum Harakiri ... USF exportieren und löschen. Reimportieren und auf einmal geht's wieder. So was schon mal erlebt?

Zum Spaß hier mal ein Screenshot der aktuellen Version:
UDFhelper.jpg
UDFhelper.jpg (50.49 KiB) 2735 mal betrachtet
Die zusammengebaute Formel wird erst unten angezeigt und mit Execute noch einmal geprüft und dann an die Zelle übergeben. Ich denke, ich bin nicht ganz auf dem Holzweg ...

LG
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Zahlen extrahieren von Text

#27

Beitrag von thowe »

Hallo Heb,

danke!

Bitte STOPPE einmal.

Ich habe nun mal die UserForm als Model (aus dem (vereinfachten) MVC Konzept fertig.
Auch die/den Controller (also Let & Get Prozeduren...

Mir ist in der Listbox aufgefallen, dass das Suchen nach Funktionen nach eintippen eines Buchstaben nicht richtig funktioniert.
Das sollte sich fixen lassen... -> das gucke ich mir an. Du erhältst das alles heute noch.
Danach gucke ich mir deinen bisherigen Stand an...

Nein, du bist sicher nicht auf dem Holzweg,
Nein, ich hatte noch nie so ein fehlerhaftes Phänomen.

LG
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Zahlen extrahieren von Text

#28

Beitrag von thowe »

Moin Heb,

leider fuchst mich die Entkapselung, dies wollte ich nun mal probieren, da wir nur wenige Controls in der UF haben.
Mit der Combobox bekokmme ich es hin, mit den Textboxen/Labels - noch - nicht. Leider!

Ich möchte dich nicht aufhalten, also solltes du weiterbasteln, an dem was du hast. Sollte ich es hinbekommen, können wir das noch immer - mit nicht zuviel Aufwand darübersülpen...

Sorry & LG

NS: Wie und mit was könnte ich nuzn konkret unterstützen?
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Zahlen extrahieren von Text

#29

Beitrag von thowe »

Hallo Heb,

zum Einlesen habe ich hiere etwas gefunden, als Sekundärliteratur!

https://gregmaxey.com/word_tip_pages/us ... _tips.html
UserForm Andvance Notes and Tips.docx
Heruntergeladen von: https://gregmaxey.com/word_tip_pages/userforms_advanced_tips.html
(314.65 KiB) Noch nie heruntergeladen
auch die "Demo Datei" anbei:


Ist das Vernünftigstze und lehrreichste meines Erachtens.
(AUCH) Ich muss versuchen, dass alles zu verstehen.

LG
Dateianhänge
userform_advanced_tips_demo_pack.zip
gezippte Datei von besagter Site
(55.54 KiB) Noch nie heruntergeladen
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Zahlen extrahieren von Text

#30

Beitrag von thowe »

I've gotten, I+ve managed....

Was habe ich getan, geändert:

In mdUDF:

Nach deiner Function ABC(...) zwei neue Funktionen

Code: Alles auswählen

Public Function GetUDFFunctions() As Variant
...
Public Function GetFunctionSearchText() As String
Mit der Function GetUDFFunctions() As Variant habe ich entksapselt (encapsulated). Dies vor dem Hintergrund dass die UserForm tatsächlich nur für die View zuständig sein soll. Daten kommen - eben - aus den dafür zuständigenModulen/Prozeduren/Funktionen...

Und zum Instanziieren der UserForm die Sub ShowUserForm(sFunc). In dieser Sub habe ich beispielsweise mit strFunction auchden Datensatz "entkapselt".

in usfUDFhelp

Ich habe zum Befüllen der Listbox cbxUDF die For ... Next Schleife ersetzt mit Range. Soll(te) den Code schneller machen. -> Irgendwelche Nachteile?

Eine neue Textbox tbxSearch habe ich eingebaut und den zugehörigen Code, soie ein paar Subs

Code: Alles auswählen

Private Sub cmdCancel_Click()
Private Sub CancelUserForm()
Private Sub UserForm_Activate()
, sowie eine Reihe von Getter & Setter

guck dir mal an und entscheide ob du dies tatsächlich implementiert wissen möchtest...

LG & schöne Tage
Dateianhänge
UDFhelp-t001-10042024.xlsb
heb`s UDFhelper mit UserForm Model
(40.24 KiB) Noch nie heruntergeladen
Antworten

Wer ist online?

Mitglieder in diesem Forum: Ahrefs [Bot] und 0 Gäste