{"id":55000363,"date":"2023-04-01T00:00:00","date_gmt":"2023-04-25T11:56:26","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=363"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Excel_Benutzerdefinierte_Funktionen_per_AddIn","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Excel_Benutzerdefinierte_Funktionen_per_AddIn\/","title":{"rendered":"Excel: Benutzerdefinierte Funktionen per Add-In"},"content":{"rendered":"<p><b>Benutzerdefinierte VBA-Funktionen lassen sich leicht zu einem Excel-Workbook hinzuf&uuml;gen. Sie sind dann aber normalerweise nur in dem entsprechenden Workbook verf&uuml;gbar. Was aber, wenn Du richtig coole Funktionen entwickelt hast, die Du nicht nur in einem Workbook nutzen m&ouml;chtest, sondern in verschiedenen Dateien &#8211; und Du hast keine Lust, den VBA-Code immer wieder in das VBA-Projekt neuer Workbooks zu kopieren? In diesem Fall gibt es gute Nachrichten: Excel bietet den Dateityp Excel-Add-In an. Darin kannst Funktionen definieren, die immer verf&uuml;gbar sind.<\/p>\n<p><b>Video passend zu diesem Artikel:<\/b><\/p>\n<div class=\"brlbs-cmpnt-container brlbs-cmpnt-content-blocker brlbs-cmpnt-with-individual-styles\" data-borlabs-cookie-content-blocker-id=\"youtube-content-blocker\" data-borlabs-cookie-content=\"PGlmcmFtZSB3aWR0aD0iNTYwIiBoZWlnaHQ9IjMxNSIgc3JjPSJodHRwczovL3d3dy55b3V0dWJlLW5vY29va2llLmNvbS9lbWJlZC8wLXoxMWZyMGRoRSIgdGl0bGU9IllvdVR1YmUgdmlkZW8gcGxheWVyIiBmcmFtZWJvcmRlcj0iMCIgYWxsb3c9ImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBjbGlwYm9hcmQtd3JpdGU7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmU7IHdlYi1zaGFyZSIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPg==\">\n<div class=\"brlbs-cmpnt-cb-preset-c brlbs-cmpnt-cb-youtube\">\n<div class=\"brlbs-cmpnt-cb-thumbnail\" style=\"background-image: url('https:\/\/vbentwickler.de\/wp-content\/uploads\/borlabs-cookie\/1\/yt_0-z11fr0dhE_hqdefault.jpg')\"><\/div>\n<div class=\"brlbs-cmpnt-cb-main\">\n<div class=\"brlbs-cmpnt-cb-play-button\"><\/div>\n<div class=\"brlbs-cmpnt-cb-content\">\n<p class=\"brlbs-cmpnt-cb-description\">Sie sehen gerade einen Platzhalterinhalt von <strong>YouTube<\/strong>. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfl\u00e4che unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.<\/p>\n<p> <a class=\"brlbs-cmpnt-cb-provider-toggle\" href=\"#\" data-borlabs-cookie-show-provider-information role=\"button\">Mehr Informationen<\/a> <\/div>\n<div class=\"brlbs-cmpnt-cb-buttons\"> <a class=\"brlbs-cmpnt-cb-btn\" href=\"#\" data-borlabs-cookie-unblock role=\"button\">Inhalt entsperren<\/a> <a class=\"brlbs-cmpnt-cb-btn\" href=\"#\" data-borlabs-cookie-accept-service role=\"button\" style=\"display: inherit\">Erforderlichen Service akzeptieren und Inhalte entsperren<\/a> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<p><\/b><\/p>\n<h2>UDF oder Userdefined Functions<\/h2>\n<p>Was wir in der &Uuml;berschrift <b>Benutzerdefinierte Funktionen<\/b> genannt haben, findest Du auf den englischen Excel-Seiten unter der Bezeichnung <b>Userdefined Functions<\/b>, kurz <b>UDF<\/b>. Wir verwenden in diesem und auch in anderen Artikeln jedoch die deutsche Bezeichnung <b>Benutzerdefinierte Funktion<\/b>.<\/p>\n<h2>Anlegen eines Excel-Add-Ins<\/h2>\n<p>Das Erstellen eines Add-Ins besteht erst einmal in einem ganz kleinen Schritt: Dem Speichern einer neuen, leeren Excel-Datei (oder auch einer Datei, die bereits die gew&uuml;nschten Funktionen enth&auml;lt) im Format <b>Excel-Add-In (.xlam)<\/b>. Dieses Format findest Du, wenn Du die Datei mit dem Ribbonbefehl <b>Datei|Speichern <\/b>unter den Bereich <b>Speichern unter <\/b>im Backstage-Bereich &ouml;ffnest und dort nach der Auswahl des entsprechenden Dateityps auf <b>Speichern <\/b>klickst (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_363_001.png\" alt=\"Speichern als Excel-Add-In\" width=\"549,6265\" height=\"164,2796\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Speichern als Excel-Add-In<\/span><\/b><\/p>\n<p>Als Speicherort wird dabei automatisch der Add-In-Ordner f&uuml;r den aktuellen Benutzer gew&auml;hlt, der sich im Verzeichnis <b>C:\\Users\\[Benutzername]\\AppData\\Roaming\\Microsoft\\AddIns <\/b>befindet.<\/p>\n<p>Ob das Anlegen funktioniert hat, und das Excel-Add-In verf&uuml;gbar ist, findest Du in den Excel-Optionen heraus. Dazu klickst Du auf <b>Datei|Optionen <\/b>und wechselst im nun erscheinenden Dialog <b>Excel-Optionen <\/b>auf den Bereich <b>Add-Ins<\/b>. Hier sehen wir schon den Eintrag f&uuml;r unser Add-In (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_363_002.png\" alt=\"&Uuml;bersicht der Office-Add-Ins\" width=\"700\" height=\"374,6794\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: &Uuml;bersicht der Office-Add-Ins<\/span><\/b><\/p>\n<p>W&auml;hlen wir dann unten unter Verwalten den Eintrag <b>Excel-Add-Ins <\/b>aus und klicken auf <b>Los&#8230;<\/b>, erscheint ein Dialog, der nur die Excel-Add-Ins anzeigt (siehe Bild 3). Auch hier finden wir unser Add-In vor. Klicken wir es dort an, sehen wir allerdings keinen Beschreibungstext wie bei den &uuml;brigen Add-Ins der Liste. Aber keine Sorge &#8211; darum k&uuml;mmern wir uns sp&auml;ter.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_363_003.png\" alt=\"Der Dialog Add-Ins\" width=\"274,6267\" height=\"336,3121\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Der Dialog Add-Ins<\/span><\/b><\/p>\n<h2>Add-In verbinden<\/h2>\n<p>Es kann sein, dass das Add-In im Dialog <b>Add-Ins <\/b>mit einem leeren Kontrollk&auml;stchen angezeigt wird. In diesem Fall ist es noch nicht verbunden. Setze einen Haken in das Kontrollk&auml;stchen und Du kannst das Add-In nutzen &#8211; und zwar in allen Excel-Workbooks, die Du auf diesem Rechner &ouml;ffnest.<\/p>\n<h2>Testfunktion im Excel-Add-In anlegen<\/h2>\n<p>Wir starten mit einer einfachen Testfunktion. Diese soll einfach nur den Text <b>Test <\/b>zur&uuml;ckgeben. Dazu legen wir in der Datei <b>ExcelAddIn.xlam <\/b>ein neues VBA-Modul an:<\/p>\n<ul>\n<li>&Ouml;ffne den VBA-Editor mit <b>Alt + F11<\/b>.<\/li>\n<li>Bet&auml;tige den Men&uuml;befehl <b>Einf&uuml;gen|Modul<\/b>.<\/li>\n<li>&Auml;ndere den Namen des neuen Moduls in <b>mdlAddIn<\/b>.<\/li>\n<li>F&uuml;ge eine Funktion wie in Bild 4 hinzu.<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_363_004.png\" alt=\"Die Funktion des Add-Ins\" width=\"574,6265\" height=\"352,5368\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Die Funktion des Add-Ins<\/span><\/b><\/p>\n<\/ul>\n<p>Die Funktion liefert lediglich eine Zeichenkette zur&uuml;ck:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>Testfunktion()<span style=\"color:blue;\"> As String<\/span>\r\n     Testfunktion = \"Test\"\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<h2>Die Add-In-Funktion testen<\/h2>\n<p>Wie k&ouml;nnen wir diese Funktion nun nutzen? Dazu schlie&szlig;en wir die Add-In-Datei und &ouml;ffnen eine neue Excel-Datei.<\/p>\n<p>Wenn wir hier nun in einer leeren Zelle mit der Eingabe eines Gleichheitszeichens und des Funktionsnamens <b>Testfunktion <\/b>beginnen, wird diese Funktion direkt angeboten (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_363_005.png\" alt=\"Eingeben der neuen Funktion\" width=\"274,6267\" height=\"365,8973\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Eingeben der neuen Funktion<\/span><\/b><\/p>\n<p>Vervollst&auml;ndigen wir nun die Eingabe und schlie&szlig;en diese ab, erhalten wir statt <b>=Testfunktion() <\/b>den in der Funktion definierten R&uuml;ckgabewert als Ergebnis in der Zelle.<\/p>\n<h2>Funktion mit Parametern<\/h2>\n<p>Wir wollen ausprobieren, ob dies auch mit Parametern funktioniert. Eine neue Funktion soll den Inhalt des als Parameter angegebenen Wertes um eine f&uuml;hrende Zeichenkette ersetzen und sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>FunktionMitParameter(strTest<span style=\"color:blue;\"> As String<\/span>) _\r\n        <span style=\"color:blue;\"> As String<\/span>\r\n     FunktionMitParameter = \"Der Text lautet: \" & strText\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Diese Funktion nutzen wir in der n&auml;chsten Zelle wie folgt:<\/p>\n<pre>=FunktionMitParameter(A1)<\/pre>\n<p>Auch diese Funktion arbeitet wie gew&uuml;nscht (siehe Bild 6).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_363_006.png\" alt=\"Ergebnis und Formel f&uuml;r eine Funktion mit Parameter\" width=\"424,6267\" height=\"132,4288\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Ergebnis und Formel f&uuml;r eine Funktion mit Parameter<\/span><\/b><\/p>\n<h2>Public oder Private<\/h2>\n<p>Wir haben die bisherigen Beispielfunktionen jeweils mit dem Schl&uuml;sselwort <b>Public <\/b>versehen. Du kannst  die Funktionen auch als <b>Private<\/b> deklarieren. Sie sind dann nach wie vor nutzbar, aber privat deklarierte Funktionen werden nicht in der Liste der verf&uuml;gbaren Funktionen angezeigt.<\/p>\n<h2>Speichern von &Auml;nderungen am Excel-Add-In<\/h2>\n<p>Wenn man Access-Add-Ins programmiert, kann man &Auml;nderungen nur speichern, wenn das Add-In selbst mit Access ge&ouml;ffnet wurde. Hat man es von einer anderen Datenbank aus als Add-In ge&ouml;ffnet, wird zwar das VBA-Projekt des Add-Ins im VBA-Editor angezeigt, aber &Auml;nderungen werden nicht gespeichert.<\/p>\n<p>Unter Excel ist das ist nicht der Fall. Wir m&uuml;ssen das VBA-Projekt des Excel-Add-Ins allerdings im VBA-Editor speichern, zum Beispiel mit der Tastenkombination <b>Strg + S<\/b>. Anderenfalls gehen die &Auml;nderungen beim Schlie&szlig;en von Excel verloren. Excel fragt zwar gegebenenfalls, ob &Auml;nderungen gespeichert werden sollen, aber dies betrifft nur &Auml;nderungen an der ge&ouml;ffneten Excel-Datei, nicht das Add-In.<\/p>\n<p>Funktionen, die wir im VBA-Projekt des Add-Ins neu anlegen, w&auml;hrend dieses im Kontext einer anderen Excel-Datei ge&ouml;ffnet ist, k&ouml;nnen auch direkt in der ge&ouml;ffneten Excel-Datei verwendet werden. Gerade deshalb ist es wichtig, das VBA-Projekt des Add-Ins zu speichern. Ansonsten erh&auml;lt man beim n&auml;chsten &Ouml;ffnen der Excel-Datei, welche die nicht gespeicherte Funktion nutzt, den Ausdruck <b>#NAME? <\/b>als Ergebnis. Schaut man sich dann die zugrunde liegende Formel an, sieht man, dass diese wie folgt aussieht:<\/p>\n<pre>=ExcelAddIn.xlam!FunktionMitParameter(A1)<\/pre>\n<p>Bei den &uuml;brigen Funktionen werden, wir wir oben schon gesehen haben, immer nur die Funktionsnamen angegeben und kein Verweis auf die Datei, aus der die Funktion stammt. Offenbar liefert Excel diese Funktion, damit man pr&uuml;fen kann, warum diese nicht wie gew&uuml;nscht arbeitet.<\/p>\n<h2>Einen Bereich als Parameter entgegennehmen<\/h2>\n<p>Viele der eingebauten Funktionen nutzen ganze Bereiche als Funktionsparameter &#8211; beispielsweise die <b>Summe<\/b>-Funktion (siehe Bild 7). Das k&ouml;nnen wir auch tun. Dazu brauchen wir den Parameter, der den Bereich entgegennehmen soll, einfach nur als <b>Range <\/b>oder <b>Variant <\/b>zu deklarieren. Im folgenden Beispiel haben wir den <b>Range<\/b>-Datentyp verwendet, da wir in der Funktion die Elemente des Bereichs durchlaufen wollen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_363_008.png\" alt=\"Eingabehilfe bei eingebauten Funktionen\" width=\"424,6267\" height=\"166,9377\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Eingabehilfe bei eingebauten Funktionen<\/span><\/b><\/p>\n<p>Die Funktion enth&auml;lt zwei <b>For&#8230;Next<\/b>-Schleifen, mit denen wir alle Zeilen und Spalten des als Parameter &uuml;bergebenen Bereichs durchlaufen und die enthaltenen Werte aufsummieren (ja, es gibt bereits eine Funktion namens <b>SUMME<\/b>, aber es soll ja nur ein Beispiel sein):<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>Summieren(rng<span style=\"color:blue;\"> As <\/span>Range)<span style=\"color:blue;\"> As Double<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngZeile<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngSpalte<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>dblSumme<span style=\"color:blue;\"> As Double<\/span>\r\n     For lngZeile = 1 To rng.Rows.Count\r\n         For lngSpalte = 1 To rng.Columns.Count\r\n             dblSumme = dblSumme + _\r\n                 rng.Cells(lngZeile, lngSpalte)\r\n         <span style=\"color:blue;\">Next<\/span> lngSpalte\r\n     <span style=\"color:blue;\">Next<\/span> lngZeile\r\n     Summieren = dblSumme\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Das Ergebnis sehen wir in Bild 8.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_363_009.png\" alt=\"Funktion mit einem Bereich als Parameter\" width=\"424,6267\" height=\"128,7968\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Funktion mit einem Bereich als Parameter<\/span><\/b><\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Dieser Artikel zeigt, wie Du benutzerdefinierte Funktionen in einem Excel-Add-In speicherst und diese nutzen kannst.<\/p>\n<p>In einem weiteren Artikel namens  <b>Excel: Add-In mit Ribbon-Button erstellen <\/b>(<b>www.vbentwickler.de\/353<\/b>) schauen wir uns noch an, wie Du einem Excel-Add-In Routinen zum Ausf&uuml;hren weiterer Aktionen hinzuf&uuml;gen und diese aufrufen kannst &#8211; beispielsweise, um bestimmte bestimmte Operationen an den Inhalten eines Worksheets vorzunehmen, die Du nicht nur im aktuellen Workbook ben&ouml;tigst, sondern immer wieder.<\/p>\n<p>Damit Du diese Routinen aufrufen kannst, f&uuml;gen wir au&szlig;erdem ein Ribbon-Tab zum Add-In hinzu, dass beim Starten von Excel immer verf&uuml;gbar ist.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>AddInTest.xlsx<\/p>\n<p>ExcelAddIn.xlam<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/412C2015-9B76-45B0-BAC6-E6F4DC90563A\/vbe_363.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Benutzerdefinierte VBA-Funktionen lassen sich leicht zu einem Excel-Workbook hinzuf&uuml;gen. Sie sind dann aber normalerweise nur in dem entsprechenden Workbook verf&uuml;gbar. Was aber, wenn Du richtig coole Funktionen entwickelt hast, die Du nicht nur in einem Workbook nutzen m&ouml;chtest, sondern in verschiedenen Dateien &#8211; und Du hast keine Lust, den VBA-Code immer wieder in das VBA-Projekt neuer Workbooks zu kopieren? In diesem Fall gibt es gute Nachrichten: Excel bietet n&auml;mlich den Dateityp Excel-Add-In an, dem Du Funktionen hinzuf&uuml;gen kannst, die immer verf&uuml;gbar sind, wenn Excel ge&ouml;ffnet ist.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66022023,662023,44000027],"tags":[],"yst_prominent_words":[],"class_list":["post-55000363","post","type-post","status-publish","format-standard","hentry","category-66022023","category-662023","category-Excel_programmieren"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000363","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000363"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000363\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000363"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000363"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000363"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000363"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}