xla-AddIn für Excel

  • Excel

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von peterfido.

    xla-AddIn für Excel

    Hi,

    kann mir vielleicht jemand Mal sagen wie man ein XLA-File als Excel AddIn in Visual-Studio erstellt. Muss ich in der VB-Entwicklungsumgebung auch eine Excel-Bibliothek benutzen, um vielleicht Excel-spezifische Routinen auszuführen. Ích habe in meiner DLL-Library diverse kleine Funktionen, die ich gerne auch in Excel ausführen würde.

    mfg xfelixx

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Garnicht.

    Eine XLA-Datei wird in Excel erstellt, in dem man eine fertige xls- als xla-Datei abspeichert.
    In VB kann ein Com-AddIn erstellt werden. Hier muss dann natürlich der Verweis auf Excel eingefügt werden.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Hallo INOPIAE,

    zunächst vielen Dank für den Tipp. Ich bin jetzt als Ahnungsloser etwas schlauer. Ich weiss jetzt wie schnell eine XLA erstellt wird. Nur, ich habe mir einfach Mal so einen Dreizeiler gechrieben und in den Excel-VB-Editor kopiert, als Test02.xla gespeichert. Der Eintrag erscheint jetzt auch sofort in der AddInManager-Liste. Ich habe sie dort angekreuzt. Und das war's. Ich muss doch noch irgend etwas spezielles machen oder deklarieren, dass diese Funktion, auch wenn sie noch etwas sinnlos ist, bei den Funktionen unter der Rubrik "Benutzerdefinierte" auch erscheint. Danach soll sie auch noch funktionieren, indem ich aus einer Zelle die Eingabe entgegennehme und nach dort wieder zurück gebe.

    Mein Dreizeiler:
    Public Function xErsterDesMonats(ByVal Datum As Date) As Date
    Dim myDate As Date
    myDate = Year(Datum) & Month(Datum) & Day(1)
    xErsterDesMonats = myDate
    End Function

    PS. ich muss noch dazusagen, dass erschwerend dazukommt, dass ich mich bei der VBA mit VB6 herumschlagen muss, das ich ja so gut wie gar nicht mehr kenne (Office 2000 Pro).

    mfg. xfelixx

    xfelixx schrieb:

    PS. ich muss noch dazusagen, dass erschwerend dazukommt, dass ich mich bei der VBA mit VB6 herumschlagen muss, das ich ja so gut wie gar nicht mehr kenne (Office 2000 Pro).

    Das bleibt dir zumindest bis Office2007 (inkl.) erhalten, wenn auch in der Version VB6.5.

    Eigentlich sollte die Funktion dann unter Funktionen - benutzerdefiniert - erscheinen.
    Denke aber auch noch an eine Fehlerroutine.

    Für das Umwandeln in das Datum solltest Du die Funktion DateSerial(Jahr,Monat,Tag) verwenden.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Merci, ich habe das BuidIn DateSerial wie folgt eingebaut:

    Public Function xErsterDesMonats(ByVal Datum As Date) As Date
    Dim myDate As Date
    'myDate = Year(Datum) & Month(Datum) & Day(1)
    myDate = DateSerial(Jahr(Datum), Monat(Datum), Tag(1))
    xErsterDesMonats = myDate
    End Function

    Hilft aber auch nichts. Es regt sich nichts im Blätterwald.
    Ich habe den Code umgewandelt, indem ich ihn einfach nochmals speicherte, oder liegt hier der Hunde begraben? Ich glaube, das Problem ist, dass es zu einfach ist.
    Hey INOPIAE

    Ich habe mir Dein Statement einfach reinkopiert, habe die xla unter einem neuen Namen gespeichert, habe sich mittels Durchsuchen im AddIn-Mannager dort reingehold, angekreuzt - Und - es geht soviel wie vorher. Apropo gespeichert. Ich hatte die ganze Zeit im VB-Edito auf "Speichern" gedrückt, bis ich merkte, dass unter "Datei" extra eine Funktion "als XLA speichern" existiert. Wie Du siehst, war das aber nicht das Problem.

    Ich muss nochmals sagen, ich habe von dieser XLA-Geschichte keine Ahnung und ich glaube immer noch, dass da noch irgendwo irgendwas gemacht werden muss.

    Ich hatte mir vor ein paar Tagen xla-Funktion hereinkopiert und wie beschrieben installiert. Die Scheiße klappt astrein. Eigentlich hatte ich mir diese XLA-Funktionen nur heruntergeladen, weil ich mir eben den Code anschauen wollte. Aber diese billigen Furzel-Funktionen sind leider paßwortgeschützt.

    Ansonsten vielen Dank für Deine Bemühungen

    Gruß xfelixx
    Nein, dass musst Du nicht, abgesehen davon, dass Du die Makrosicherheit auf Mittel anpassen bzw. die Datei signieren musst.
    Nur die Funktionen müssen natürlich sauber durchlaufen, dh. fehlerfrei sein.

    Schützen kann Du den Code mit einenm Kennwort, das allerdings einfach zu umgegehen ist.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Die Makrosicherheit stellst Du unter Extras - Makros - Sicherheit ein.
    Zum signieren der Datei musst Du zum einen ein Zertifikat haben, zum anderen wird die fertige Datei im VBA Editor mit Extras - Digitale Signatur signiert.

    Sind dies reine Schutzmechanismen für Gefahren von außen?

    Nein auch von innen. Hier definierst Du, in wie weit Du dem Ersteller einer Datei mit Programmieranteilen vertrauen willst. Im Code könnte ja ein schadhafter Code verborgen sein.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Hallo, INOPIAE, da bin ich wieder,

    ich bin jetzt zum ersehnten Ergebnis gekommen, nachdem ja nach außen hin alles ok war:
    - der Code war ok;
    - dass Excel eine .xla-Datei erkennt und auch ausführen kann, zeigte mir die herunter geladene XLA. nur konnte ich dort nciht reinschauen.

    Was ich nicht sehen konnte, wie sieht eine XLA intern aus, z.B. im Projektmanager. Ich hatte die ganze Zeit den Code als Tabelle1-Code generiert, anstatt als Modul-Code. Als Klassen-Code funktioniert es übrigens auch nicht.

    Eine neue Frage:
    Sind die Klassen überwiegend für Makros vorgesehen? Ich könnte mir vorstellen, wenn ich irgendwas in Tabelle1 codemäßig untersützen will, dann programmiere ich das eben im Tabellen-Code. Makros dagegen vielleicht in Klassen, weil sie in der Mappe allgemein zur Verfügung stehen sollten. Die Klasse ist vielleicht auch für Routinen gedacht, die es möglich machen, dass man Excel auch von außen, bspw. von VB2008, ansprechen bzw. aufrufen kann.

    Da ich mich bis jetzt, progammiertechnisch noch nie, bis auf diese XLA-Geschichte, mit Excel auseinandergesetzt habe, wäre ein kleiner Tipp in dieser Sache sehr angenehm, insbesondere denke ich dabei schon an einen Aufruf von "außen".

    Da dieses Thema jetzt eigentlich geklärt ist, würde ich dieses Thema auch gerne als "Erledigt" markieren. Ich hab' gesehen, dass das manche machen, habe aber hier im Text-Editor außen "Melden" und "Zitieren" noch keine Funktion gefunden.

    Auf jeden will ich mich bei für den einen oder anderen nützlichen Tipp herzlichst bedanken.

    mfg xfelixx
    Bei AddIns werden die Tabellen ausgeblendet.
    Also den Code in Module, Klassenmodule, Formulare packen.
    Z.B.
    in ein Modul

    Visual Basic-Quellcode

    1. Public Function Gestern() As String
    2. Gestern = Date - 1
    3. End Function

    packen, und dieses Workbook dann als AddIn speichern

    Dann in der Tabelle als Formel

    Quellcode

    1. =gestern()

    eingeben, nachdem das AddIn aktiviert wurde.
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Merci,

    ich habe, wie oben schon erwähnte, ebenfalls einen Test mit einem Klassenmodul gemacht. Da hatte ich wieder das Problem, dass er es mir bei den Funktionen nicht anzeigte.

    Ich weiß nicht wie fit Du in VBA bist. Aber wenn es Dir nicht schwer fällt, könntest Du mir vielleicht einen Tipp geben oder gar einen Dreizeiler, wie ich beim Erstellen von XLAs den Debugger benutzen kann. Wahrscheinlich geht dies nur über ein Macro, das eben die zu testende Funktion aufruft.
    Hier mal schnell ein Beispiel, wie man ein Klassenmodul verwenden könnte:

    Im Klassenmodul, welches Liste heisst:

    Visual Basic-Quellcode

    1. Private sWerte() As String
    2. Dim Anzahl As Long
    3. Private Sub Class_Initialize()
    4. Anzahl = -1
    5. End Sub
    6. Public Function Additem(ByVal s As String)
    7. Anzahl = Anzahl + 1
    8. ReDim Preserve sWerte(Anzahl)
    9. sWerte(Anzahl) = s
    10. End Function
    11. Public Function List(ByVal Index As Integer) As String
    12. List = sWerte(Index)
    13. End Function
    14. Public Function delete(ByVal Index As Integer) As String
    15. Dim i As Long
    16. If Index > -1 And Index <= Anzahl Then
    17. For i = Index To Anzahl - 1
    18. sWerte(i) = sWerte(i + 1)
    19. Anzahl = Anzahl - 1
    20. ReDim Preserve sWerte(Anzahl)
    21. Next i
    22. End If
    23. End Function


    Dann in einem normalen Modul:

    Visual Basic-Quellcode

    1. Public Sub test()
    2. Dim Liste1 As New Liste
    3. Dim Liste2 As New Liste
    4. Dim i As Integer
    5. With Liste1
    6. .Additem "Hallo"
    7. .Additem "weißt Du wie spät es ist?"
    8. .Additem "danke!"
    9. End With
    10. With Liste2
    11. .Additem "Hallo!"
    12. .Additem "ja"
    13. .Additem "gerne!"
    14. End With
    15. For i = 0 To 2
    16. MsgBox Liste1.List(i)
    17. MsgBox Liste2.List(i)
    18. Next i
    19. End Sub


    Dann einfach auf Start klicken, während der Mauszeiger sich im Sub Test befindet.

    Prinzipiell so.
    Gruß
    Peterfido

    Keine Unterstützung per PN!