Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Function versionsübergreifend "deklarieren"
zurück: Problem mit Serienmails über Excel/Fragen weiter: Zeilenumbruch in MsgBox funktioniert nicht unter 2007 Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Antwort Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
16. Sep 2007, 18:42
Rufname:
Wohnort: Leipzig

Function versionsübergreifend "deklarieren" - Function versionsübergreifend "deklarieren"

Nach oben
       Version: Office 97

Hallo liebe Experten,

in meinem Projekt gibt es ein Modul, das nachgebaute VBA6-Funktionen enthält, damit diese in VBA5 verfügbar sind. Ich möchte gerne die Namen so organisieren, dass man in VBA6 immer komfortabel die neuen Funktionsnamen benutzt und in VBA5 auch. Trotzdem müssen die Functions in VBA5 natürlich andere Namen haben. Also vielleicht besser ein Bsp.:

Im Modul steht die Function ReverseStr:
Code:
Public Function ReverseStr(ByVal Str As String) As String
' baut die Funktion StrReverse nach, die es in VBA 6 gibt

    Dim k As Long
    Dim tStr As String

    tStr = ""
    For k = 1 To Len(Str)
        tStr = Mid$(Str, k, 1) & tStr
    Next k
    ReverseStr = tStr

End Function

Das Projekt soll unter VBA5 und VBA6 laufen. Solange ich aber in VBA6 programmiere, soll natürlich ganz normal die Funktion StrReverse angewendet werden. Nun kann ich natürlich bedingt kompilieren lassen:
Code:
#If VBA6 = False Then
    x = ReverseStr("abc")
#Else
    x = StrReverse("abc")
#End If

Wenn ich das jedoch bei jedem einzelnen Aufruf vorschalten und auch bedenken soll, ist das doch nervig. (Welche Function gab es in VBA5 noch nicht?)

Ziel ist also, dass ich immer nur StrReverse aufrufe. Wenn ich jedoch in VBA5 bin, soll stattdessen ReverseStr aufgerufen werden, ohne dass ich mich explizit drum kümmern muss. Ich stelle es mir etwa so vor:
Code:
Option Explicit

#If VBA6 = False Then
    Public Const StrReverse As String = "ReverseStr"
#End If

Damit hätte ich nur einmal diese Ersetzung im Code und könnte dann sorglos überall mit StrReverse arbeiten. Es tritt natürlich sofort ein Kompilierungsfehler auf: "Erwartet: Datenfeld"
So funktioniert das leider nicht. Ich schlage mich schon den halben Tag damit herum und finde doch keinen Ausweg aus den Denkblockade. Wie kann ich das organisieren? (Es betrifft ja nicht nur diese eine Funktion, sondern noch ein paar mehr.)

Ich freue mich sehr, falls ich mal wieder den Wald vor Bäumen nicht sehe, und bin schon sehr gespannt auf Vorschläge.

Gruß
Lisa
Thomas Ramel
Microsoft Excel-MVP


Verfasst am:
16. Sep 2007, 18:59
Rufname: Thom
Wohnort: Glashütten - CH


AW: Function versionsübergreifend "deklarieren" - AW: Function versionsübergreifend "deklarieren"

Nach oben
       Version: Office 97

Grüezi Lisa

OK, lass mich mal sehen.

Du möchtest je nach VB(A)-Version die eine oder die andere Funktion verwenden.
Das wird ohne Bedingung nicht machbar sein.

Ich denke, dass in der anderen Richtung ein Schuh draus wird:

Verwende immer die von dir geschriebene Funktion und mache darin dann die bedingte Verzweigung - arbeitst Du in VB6 dann rufst Du von dort her die eingebaute Funktion auf und übergibst den gleichen Parameter gleich weiter.
Arbeitest du in VB5 geht deine Funktin weiter und berechnet das Gewünschte.

Der Nachteil ist, dass Du dann immer deine neue Funktion aufrufen musst - umgekehrt geht das IMO nicht, weil deine neue Funktion nicht denselben Namen wie eine eingebaute tragen sollte.

Allenfalls könntest Du ausprobieren wie sich das Ganze verhält wenn Du deiner Funktion den gleichen Namen gibst, ich fürchte aber, dass sie sich dann nur immer wieder selber aufrufen wird, wenn du in VB6 arbeitest.

_________________
Mit freundlichen Grüssen

Thomas Ramel
[Vista Ultimate SP-1 / xl2007 SP-2]
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
16. Sep 2007, 19:27
Rufname:
Wohnort: Leipzig

AW: Function versionsübergreifend "deklarieren" - AW: Function versionsübergreifend "deklarieren"

Nach oben
       Version: Office 97

Lieber Thomas,

herzlichen Dank für Dein Interesse. So habe ich es bisher gemacht, dass ich immer meine Eigenbau-Function benutzt habe.
Ich habe jetzt noch etwas weitergesucht und bin doch noch fündig geworden. Man kann tatsächlich denselben Namen verwenden. So geht das:
Code:
Option Explicit

#If VBA6 = False Then
    Public Function StrReverse(ByVal Str As String) As String
        ' baut die Funktion StrReverse nach, die es in VBA 6 gibt

        Dim k As Long
        Dim tStr As String
   
        tStr = ""
        For k = 1 To Len(Str)
            tStr = Mid$(Str, k, 1) & tStr
        Next k
        StrReverse = tStr
   
    End Function
#End If

Vielleicht kann das ja noch jemand sonst auch brauchen. Ich werde jedenfalls jetzt die Sammlung sukzessive vervollständigen und kann damit VBA5 überall "aufhübschen". Am besten diese Funktionen in ein Modul, in dem sonst nichts anderes steht, dann lässt sich das perfekt handhaben.

Liebe Grüße
Lisa
Thomas Ramel
Microsoft Excel-MVP


Verfasst am:
16. Sep 2007, 22:27
Rufname: Thom
Wohnort: Glashütten - CH

AW: Function versionsübergreifend "deklarieren" - AW: Function versionsübergreifend "deklarieren"

Nach oben
       Version: Office 97

Grüezi Lisa

Stimmt - so wird der Code gar nicht kompiliert solange VB6 am werkeln ist.

Und dass diese Codes in ein eigenes Modul zu liegen kommen macht auch mehr als nur Sinn - so kannst Du dieses in einem Rutsch exportieren oder gar per Drag-n-Drop in eine neue Mappe ziehen.

Weisst Du so aus dem Stegreif ab welcher Office/Excel-Version mit VB6 gearbeitet worden ist? IMO war dies ab xl97?

_________________
Mit freundlichen Grüssen

Thomas Ramel
[Vista Ultimate SP-1 / xl2007 SP-2]
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
17. Sep 2007, 10:40
Rufname:
Wohnort: Leipzig

AW: Function versionsübergreifend "deklarieren" - AW: Function versionsübergreifend "deklarieren"

Nach oben
       Version: Office 97

Hallo Thomas,

nein, Office 97 (Excel 8/Word 8) arbeitet noch mit VBA5. Ab O 2000 (Excel 9/Word 9) ist es dann VBA6, alles unter Windows. Beim Mac weiß ich es allerdings nicht.

Gruß
Lisa
Thomas Ramel
Microsoft Excel-MVP


Verfasst am:
17. Sep 2007, 19:07
Rufname: Thom
Wohnort: Glashütten - CH

AW: Function versionsübergreifend "deklarieren" - AW: Function versionsübergreifend "deklarieren"

Nach oben
       Version: Office 97

Grüezi Lisa

Herzlichen Dank für die Infos - IMO ist beim MAC nur VB5 vorhanden, wenn ich mich recht entsinne - es fehlen jedenfalls nette Digne wie z.B. Split().


Im Zusammenhang mit dem Thema ist mir heute noch der folgende KB-Artikel 'über den Weg gelaufen':

http://support.microsoft.com/default.aspx?scid=kb;en-us;188007

_________________
Mit freundlichen Grüssen

Thomas Ramel
[Vista Ultimate SP-1 / xl2007 SP-2]
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
18. Sep 2007, 12:38
Rufname:
Wohnort: Leipzig


AW: Function versionsübergreifend "deklarieren" - AW: Function versionsübergreifend "deklarieren"

Nach oben
       Version: Office 97

Lieber Thomas,

super der Link, das spart eine Menge Arbeit. Da kann ich ja gleich auf einen Ritt die Sammlung ergänzen.

Gruß
Lisa
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Excel Formeln: Fehlemeldung: Too many arguments for this function 4 Constantin 409 05. Sep 2011, 12:28
Gast Fehlemeldung: Too many arguments for this function
Keine neuen Beiträge Excel Formeln: Worksheet.Function.Average bei Variablen im VBA Code 0 Jwk 1211 23. Jan 2011, 15:47
Jwk Worksheet.Function.Average bei Variablen im VBA Code
Keine neuen Beiträge Excel VBA (Makros): Find Function über VBA 1 McJustin 10338 05. Aug 2008, 08:48
meinTipp Find Function über VBA
Keine neuen Beiträge Excel VBA (Makros): Function funktioniert nicht/Indexfehler 3 Gast 610 25. Jul 2008, 14:08
Gast Function funktioniert nicht/Indexfehler
Keine neuen Beiträge Excel VBA (Makros): brauche Hilfe bei Function 2 JR2007 306 10. Jun 2008, 07:42
JR2007 brauche Hilfe bei Function
Keine neuen Beiträge Excel VBA (Makros): Function in Zelle Aktualisieren 1 Marganeus 494 25. Apr 2008, 15:49
Nepumuk Function in Zelle Aktualisieren
Keine neuen Beiträge Excel VBA (Makros): Zelle als Variable deklarieren 32 mtubolino2 4788 10. Apr 2008, 11:16
mtubolino2 Zelle als Variable deklarieren
Keine neuen Beiträge Excel VBA (Makros): Function wird nicht gefunden? (AddIn) 2 derhenry 309 13. März 2008, 14:11
bst Function wird nicht gefunden? (AddIn)
Keine neuen Beiträge Excel VBA (Makros): Probleme beim Deklarieren von Variablen 2 fabiang40 813 16. Feb 2008, 10:16
fabiang40 Probleme beim Deklarieren von Variablen
Keine neuen Beiträge Excel VBA (Makros): UserForm als Variable deklarieren 5 chris forster 1437 23. Okt 2007, 22:29
Bamberg UserForm als Variable deklarieren
Keine neuen Beiträge Excel VBA (Makros): Wie Variablen deklarieren...... 5 somodi 391 11. Sep 2007, 23:32
Gast Wie Variablen deklarieren......
Keine neuen Beiträge Excel VBA (Makros): Makro (Sub) in Funktion (Function) umwandeln 5 Dante09 3852 21. Jun 2007, 17:49
bst Makro (Sub) in Funktion (Function) umwandeln
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft Project