UDFhelper - Hilfefunktion für eigene Funktionen

.. 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: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

UDFhelper - Hilfefunktion für eigene Funktionen

#1

Beitrag von d'r Bastler »

Moin allerseits,
eine funktionierende Hilfe für selbstgebaute Funktionen(UDF) wird von MS leider nicht angeboten. Mit einem VBA-Code (den ich nach sehr langer Suche erst finden konnte) kann man die UDFs zwar im Funktionsassistenten (FA) registrieren, aber so elegant wie die XL-internen Funktionen ist das dann nicht. Also: selbst ist d'r Bastler und ich habe mal gebastelt und dabei eigentlich nur den FA nachgebaut.

Das Ergebnis besteht im Wesentlichen aus fünf Teilen: wenige Zeilen VBA für DieseArbeitsmappe (siehe folgenden Code), ein paar mehr Zeilen im Modul mdlUDPHelper und einer lustigen Userform. Dann noch natürlich ein allg. Modul mdlFunctions, das Ihr mit Euren eigenen Funktionen füllt (ein paar Beispiele sind schon drin) und ein Arbeitsblatt, das den Namen UDFhelp trägt.

Alle Teile gibt es hier als Anhang, die Ihr ohne großen Aufwand einfach in eine neue Arbeitsmappe importieren könnt. Was Ihr Euch da aufhalst, will ich hier erläutern. Manche Änderungen in XL sind deutlich, also bitte sorgfältig lesen! Mit

Code: Alles auswählen

Option Explicit

Private Sub Workbook_Open()
Dim sht As Worksheet
For Each sht In ThisWorkbook.Sheets
    If sht.Name = "UDFhelp" Then
        Exit For
    End If
    ThisWorkbook.Sheets.Add
    With ActiveSheet
        .Name = "UDFhelp"
        .Visible = False
    End With
Next
    Application.OnKey "{F1}", "ShowUDFhelp"
End Sub
eingefügt in DieseArbeitsmappe wird die Taste F1, die sonst die allgemeine Hilfe aufruft neu belegt. Es erscheint stattdessen der UDFhelper. Wer hier nicht F1, sondern eine andere F-Taste nutzen möchte, ändert einfach den Wert zwischen den geschweiften Klammern. Vorher wird geprüft, ob es ein Arbeitsblatt UDFhelp gibt. Falls nicht wird es eingefügt, aber es bleibt unsichtbar. Für die tägliche Arbeit wird es nämlich vom Nutzer nicht benötigt und muss auch nicht bearbeitet werden.

Der Code der Userform und des Moduls mdlUDFhelper sollte nicht modifiziert werden, wenn man nicht sehr genau weiß, was man da tut. Diesen also einfach nur in die neue Arbeitsmappe importieren und die Arbeitsmappe unter einem beliebigen Namen, aber im Format .xlsb speichern, schließen und wieder öffnen.

Wir Ihr seht, seht Ihr nichts. Denn erst einmal habt Ihr einfach eine leere Mappe vor Euch. Hinter den Kulissen ist Folgendes passiert:

Beim Aufruf wurde die Taste F1mit dem UDFhelper belegt. Mit seinem Aufruf werden die im mdlFunctions vorhandenen UDFs mit ihren Argumenten, Optionen und Kommentaren in das Blatt UDFhelp geschrieben und zudem im FA registriert, können dort also wie die XL-internen Funktionen genutzt werden (wenn auch ohne Hilfe).

Getestet werden kann das Ganze mit folgendem Beispiel: Man schreibe in Zelle A1 das unsinnige Wort "ABC20$§xyz", schreibe den Funktionsnamen "ABC" in B1, bestätige mit Enter, aktiviere B1 erneut und drücke die Taste F1 und schon erscheint diese Userform:
UDFhelper.jpg
UDFhelper.jpg (40.76 KiB) 3413 mal betrachtet
Je nach Eintrag in den ersten drei TextBoxen erhält man ein unterschiedliches Ergebnis. Das letzte Textfeld (Label) dient erst einmal nur als Beispiel, wie die Funktion denn aussehen könnte. Tatsächlich zusammengebaut wird sie erst mit dem Button Execute. So sind Korrekturen möglich.

Und hier die zu importierenden Codes/Module als ZIP:
UDFhelper.zip
(56.9 KiB) Noch nie heruntergeladen

Und nun als echte Premiere das dicke Ende
Diese Bastelei wirklich Bullet Proof zu machen habe ich mich noch nicht bemüht. Es kommt also durchaus zu ungemütlichen Fehlermeldungen. Wer eine optimierte Version möchte, dem helfe ich gerne, allerdings mit einem kleinen Haken: Der Betrieb dieses Forums kostet mein privates Geld und ich freue mich über kleine Spenden, die bei der Bezahlung ein bisschen helfen. Firmen sparen durch meine kleinen Helfer vielleicht ein paar Minuten pro Tag. Das würde mir schon genügen. Kontakt dazu bitte per PN.

Viel Spaß mit dem kleinen Tool ...
Folgende Benutzer bedankten sich beim Autor d'r Bastler für den Beitrag:
thowe
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Re: UDFhelper - Hilfefunktion für eigene Funktionen

#2

Beitrag von d'r Bastler »

Was ich vielleicht noch ergänzen sollte: Damit das Ganze funktioniert, benötigen die UDFs eine gewisse Syntax. Als Beispiel:

Code: Alles auswählen

[i]Function Sample(Val as Variant, Filter as Byte, Optional Option as Byte)[/i] as String 
Hier also der Funktionsname und die erwarteten Argumente. Daraus baut der UDFhelper dann die Labels der Userform. Als Trennzeichen wird nach VBA-Regeln das Komma verwendet.
Jetzt kommen die Hilfetexte. Die werden wie Kommentare im Code gehandhabt, also mit dem Trennzeichen Hochkomma:

Code: Alles auswählen

[i]'Kommentar1'Kommentar2'Optional: Kommentar3[/i]
Drei Hochkomatöse = drei Hilfezeilen.
Diese Formatierung gehört ins mdlFunctions und wird bei jedem Öffnen der Arbeitsmappe neu eingelesen, kann dort also auch ggf. geändert werden.
Kleiner Haken: Auch die Kommentare müssen in die erste Zeile der Funktion. Der Trick mit dem Zeilenumbruch per Unterstrich funktioniert hier nicht.

Schöne Grüße!
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: 209
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 79 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: UDFhelper - Hilfefunktion für eigene Funktionen

#3

Beitrag von thowe »

Hallo Heb,

Gratulation.
Danke für das Werk.
Ich lade es runter und wirf Blicke drauf.
Gegebenenfalls kommen hier in dieem Thread Rückmeldungen

lg
Sulprobil
Beiträge: 22
Registriert: 23. Sep 2022, 05:54
Hat sich bedankt: 3 Mal
Danksagung erhalten: 14 Mal
Kontaktdaten:

Re: UDFhelper - Hilfefunktion für eigene Funktionen

#4

Beitrag von Sulprobil »

Hallo,

Man kann zur normalen Microsoft Hilfe eigene Funktionen hinzufügen.

Siehe z. B.:
https://www.sulprobil.com/roundtosum_en/

Viele Grüße,
Bernd
Folgende Benutzer bedankten sich beim Autor Sulprobil für den Beitrag:
d'r Bastler
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Re: UDFhelper - Hilfefunktion für eigene Funktionen

#5

Beitrag von d'r Bastler »

Moin Bernd!

Lieben Dank für Deinen Hinweis! Deine Lösung entspricht im Wesentlichen der von mir schon erwähnten VBA-Methode, wenn auch besser ausgeführt, als alles was ich sonst dazu gefunden habe :P .

Was aber auch hier fehlt, ist die Kommunikation mit der Bearbeitungsleiste: Keine Beschreibung der Funktion im DropDown, keine Parameterhilfe bei der Eingabe. Und das versuche ich mit meinem UDFhelper abzubilden. Das DropDown baue ich mithilfe einer Listbox, die nur die UDFs zeigt. Nach der Auswahl stehen aber alle Hilfen in der USF zur Verfügung. Eingelesen werden aktualisierte/zusätzliche UDF regelmäßig beim Workbook_Open.

Der Weg scheint praktikabel. Ich muss meine Bastelei nur noch mit Fehlerfallen ausstatten / Bullet Proof machen und dann ich will auch prüfen, ob sich das nicht als AddIn realisieren lässt. Das würde die Verteilung unter Kollegen vereinfachen und es wären keine zusätzlichen Sheets mehr notwendig.

Schöne Grüße und einen ebensolchen Abend!
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: 209
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 79 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: UDFhelper - Hilfefunktion für eigene Funktionen

#6

Beitrag von thowe »

Moin an Alle... & Hallöche an Heb,

danke Heb, -wirklich DANKE! - für deine tolle bisherige Arbeit.

Ich habe dir etwas dazugebastelt, ungefragt....

Bitte beachte, dass ich die Funktion nur für Demozwecke eingebaut habe, keine Fehlerprüfungen stattfinden und die Ausgabe nicht - wirklich -umgesetzt ist. Zu beachten ist auch, dass ich lediglich zu deiner Funktion IsLeap() die entsprechenden Kommentare eingegeben habe und der Code nur zum Modul mdlFunctions funktioniert. (siehe Const.....)

Was ist neu?
UDFhelp-t001-22042024.xlsb
(56.77 KiB) Noch nie heruntergeladen
In der vorhandenen UserForm usfUDFhelper habe ich einen weiteren Button eingebaut, cmdHelp
Es soll (derzeit nur Debug.Print, da die Ausgabe via MsgBox nicht wirklich was hergibt) ergänzende (Hilfe)Informationen ausgegeben/angezeigt werden.
Clicke einfach auf den erwähnten CommandButton und sehe dir mit [StRG] + [G] im Immediate Window das Ergebnis an.

Wie funktioniert das Ganze?


Bei de jeweiligen Funktionen müssen die Kommentare mit '@ (Hochkammate + Klammeräffchen) gekennzeichnet sein.

Das Event cmdHelp_Click holt sich aus der vorhandenen Listbox cbxUDF den Funktionsnamen prüft ob die Funktion mit ProcuedureExists ob diese vorhanden ist. Wenn ja, dann wird die Funktion GetProcedureInformation aufgerufen.

Wenn im übergebenen FunktionsCode links als erste beide Zeichen '@ gefunden werden dann wird die gesamte Kommentarzeile in die entsprechende Variable strProcedureInformation gespeichert. Den gesamten String gibt dann diese Funktion zurück. Aktuell wie gesagt nur via Debug.Print

Die genannten Funktionen befinden sich im Modul mdlUDFhelper ganz unten. ACHTUNG! im Modulkopf sind ein paar Public Variablen und eine Konsante hinzugekommen.

Wenn das weiter verfolgt werden soll, dann ist folgende Umsetzung denkbar:

Wenn entsprechende Komentare vorhanden können diese in Format .md oder .rst temporär zwischengespeichert werden und via Defalt-Webbrowser angezeigt werden.
Wenn die .md und/oder .rst Dateien tatsächlich auf Festplatte gespeichert werden, könn(t)en diese auch zB vie sphinx gerendert werden....

Freue mich auf Rückmeldung....

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

Re: UDFhelper - Hilfefunktion für eigene Funktionen

#7

Beitrag von thowe »

Hallöchen!

ich habe ein paar Kleinigkeiten adaptiert. Nun auch das Öffnen mit dem Standardbrowser integriert.

Das Große ABER:

Alles läuft durch, nur das Öffnen funktioniert nicht:

Code: Alles auswählen

Shell (strBrowser & " -url -newtag " & strInformationFile)
das ist die letzte Zeile in der Sub OpenFunctionInformationWithBrowser(strInformationFile As String) im Modul mdlUDFInformation. Ärgerlich. Hat jemand eine Idee? Die Datei existiert, denn sonst würde ie Sub nicht aufgerufen werden, siehe in usfUDFhelper im Event Private Sub cmdHelp_Click():

Code: Alles auswählen


(....)

If FSO.FileExists(strTempPath) Then OpenFunctionInformationWithBrowser (strTempPath)

(....)

UDFhelp-t002-22042024.xlsb
(61.83 KiB) Noch nie heruntergeladen
LG
Benutzeravatar
thowe
Beiträge: 209
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 79 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: GELÖST -> UDFhelper - Hilfefunktion für eigene Funktionen

#8

Beitrag von thowe »

Hallo & Moin,

habe das im vorigen Post geschilderteProblem gelöst.
Es waren nur ein paar Kleinigkeiten anzupassen.

Lediglich die Prozedur OpenFunctionInformationWithBrowser im Modul mdlInformation ist zu ändern auf:

Code: Alles auswählen

Sub OpenFunctionInformationWithBrowser(ByVal strInformationFile As String)

    Dim objShell As Object
    Dim strBrowser As String
    
    'initialize
    strInformationFile = Trim(strInformationFile)
    
    Set objShell = CreateObject("WScript.Shell")
    strBrowser = objShell.RegRead(Trim(GetFullDefaultBrowserPath))

    Shell (strBrowser & " -url -newtab " & strInformationFile)

End Sub
LG
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Re: UDFhelper - Hilfefunktion für eigene Funktionen

#9

Beitrag von d'r Bastler »

Moin thowe,
na - das mit GELÖST im Titel finde ich ganz schön dreist :lol: denn, der UDFhelper ist zwar auf einem guten Weg, aber gelöst mal sicher noch nicht :)

Unabhängig von diesem Thema: Danke, dass Du Möglichkeit der Kennzeichnung entsprechender Beiträge durch Änderung der Titelzeile pro Post demonstriert. Muss ich mir auch mehr angewöhnen.

Bezugnehmend auf meine PN von vorhin: AddIns funktionieren auch auf macs, also ran an's Werk ... :mrgreen:

Gruß von meinem persönlichen Zustand und dem meines Laptop-Akkus ... Wir sind allle :o daher bfn

Grüße
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: 209
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 79 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: UDFhelper - Hilfefunktion für eigene Funktionen

#10

Beitrag von thowe »

Moin Heb,

gerne doch....
Habe PN gesandt
lg thowe
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast