Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1724to1728
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

per Makro verschiedene excel versionen ansprechen

per Makro verschiedene excel versionen ansprechen
28.11.2019 15:01:48
Andreas

Hallo Zusammen,
eine Datei mit Makros soll an verschiedenen Rechnern genutzt werden & mit verschiedenen Excelversionen.
An meinem Rechner Excel 2016 funktionieren alle Makros einwandfrei, an anderen Rechnern leider nicht (Meist Excel 2010, 2013).
Aufhänger sind hier Codes die bestimmte Diagramme oder Tabellen ansprechen (jew. aufgezeichnet), die Debug Funktion führt mich dann immer zu der jew. Codepassage die für das Ansprechen zuständig ist.
Ich vermute daher, dass die älteren Excelversionen nicht mit dem Code umgehen können bzw. diesen nicht kennen.
Was kann ich hier machen?
Kann ich die Codes so programmieren, dass das Makro je Excelversion anders arbeitet?
Viele Grüße und Danke für die Hilfe

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: per Makro verschiedene excel versionen ansprechen
28.11.2019 15:27:50
Nepumuk
Hallo Andreas,
mit Application.Version kannst du die Excelversion abfragen. Ich würde Makros immer auf den niedrigsten Version entwickeln auf der sie laufen sollen.
Gruß
Nepumuk
AW: per Makro verschiedene excel versionen ansprechen
28.11.2019 15:31:14
volti
Hallo Andreas,
Du könntest die heiklen Code-Passagen über die Version-Nr. entsprechend behandeln.
  If Application.Version = "16.0" Then
  'code
  ElseIf Application.Version = "14.0" Then
  'code
  Else
  'code
  End If
VG
Karl-Heinz
Anzeige
Das ist idR nur erforderlich, ...
28.11.2019 23:50:28
Luc:-?
…wenn Befehle der ältesten vorgesehenen Version nicht auf neueren möglichen Versionen lt Versionsintervall zufriedenstellend laufen (zB bei BedingtFormatierung von Xl11 zu Xl12) oder generell versionsabhängig verfahren wdn soll. Dann sollte aber bedingte Pgmmierung eingesetzt wdn (#Befehle). Anderenfalls ist es einfacher, Nepumuks Empfehlung zu folgen, denn das ist das übliche und empfohlene/gelehrte Vorgehen.
Gruß, Luc :-?
„Die universelle Befähigung zur Unfähigkeit macht jede menschliche Leistung zu einem unglaublichen Wunder.“ Stapps ironisches Paradoxon
Nichtsdestotrotz Durchblick verbessern mit …

Anzeige
AW: per Makro verschiedene excel versionen ansprechen
29.11.2019 09:40:16
Daniel
Hi
ich würde auch empfehlen, sich bei der Programmentwicklung an der niedrigsten Version zu orientieren, auf der der Code laufen muss.
in der Regel ist VBA aufwärtskompatibel und geänderte oder erweiterte Umfänge können auch in der neueren Version nach der alten Schreibweise programmiert werden (z.B. das Sortieren)
betreibst du differenzierte Programmierung innerhalb des Makros so wie von Volti vorgeschlagen, besteht das Risiko, dass der Fehler bereits beim Kompilieren des Codes auftritt und somit und somit unabhängig davon ist, ob die betroffene Codezeile ausgeführt wird oder nicht.
(bspw VBA interpretiert einen unbekannten Befehl als nicht deklarierte Variable oder leeres Objekt)
Gruß Daniel
Anzeige
Deshalb ja mein Hinweis auf BedingtPgmmierg! owT
29.11.2019 13:48:48
Luc:-?
:-?
AW: Deshalb ja mein Hinweis auf BedingtPgmmierg! owT
29.11.2019 14:13:12
Daniel
Hi Luc
naja, was ist "bedingte Programmierung" ?
was sind "#Befehle" ?
Gruß Daniel
Genau genommen heißt das in VBA ja ...
29.11.2019 18:01:52
Luc:-?
bedingte Kompilierung, Daniel;
Bsp aus der VBA-Hilfe:
' Öffentliche Konstante für die Kompilierung im
' Deklarationsabschnitt deklarieren.
#Const conTest = 1
Sub SelektiveAusführung()
#If conTest = 1 Then
.                ' Ausführen von Code mit Testanweisungen.
#Else
.                ' Ausführen von normalem Code.
#End If
End Sub
Die mit #Befehl eingeleiteten Abschnitte wdn nur kompiliert, wenn sie der Bedingung entsprechen. Die anderen fallen ohne SyntaxÜberprüfung weg. Die Befehle dazwischen müssen nicht mit # eingeleitet wdn. Man kann das auch differenzierter schachteln.
Die Konstante kann auch auf die Versionsüberprüfung aufsetzen oder wie im Bsp unterschiedliche Pgm-Modi festlegen. Ich nutze das auch, um parametrierbar Pgm-Wege festzulegen, je nachdem, ob eine erweiternde UDF vorliegt oder nicht.
Gruß, Luc :-?
Anzeige
AW: Genau genommen heißt das in VBA ja ...
29.11.2019 19:02:04
Nepumuk
Hallo Luc,
wie willst du das per VBA verwirklichen? Ich weiß wie Compilerkonstanten manuell erzeugt werden können, eine VBA-Lösung ist mir unbekannt.
Gruß
Nepumuk
Falls das Letzte missverständlich war, ...
02.12.2019 18:13:25
Luc:-?
…hier noch eine Ergänzung:
Es ist egal, ob die #-Konstanten in einem Pgm oder fürs Modul genannt wdn, sie wdn ohnehin stets nur auf ModulEbene und auch nur für die Kompilierung ausgewertet, weshalb sie anderweitig auch nutzlos sind. Das bedeutet auch, dass sie nur manuell festgelegt wdn können. „Parametrierbare Pgm-Wege“ heißt also nichts Anderes, als diese vorab nach Bedarf manuell festzulegen. Damit kann man quasi aus einem gemeinsamen Pgm mehrere Varianten kreieren, je nachdem wie sie eingesetzt wdn sollen. Dabei kann das auch innerhalb von PgmVerzweigungen erfolgen, die per Parameter bzw Argument direkt steuerbar sind. Je nach Wert der #-Konstante wdn dann nämlich alle auf die jeweilige #-Konstante bezogenen irrelevanten PgmTeile, die innerhalb von zugehörigen #-Blöcken stehen, gar nicht erst kompiliert und deshalb auch nicht in die SyntaxPrüfung einbezogen. Dazu habe ich mal ein etwas komplexeres Bsp geschaffen, das auch noch eine andere Möglichkeit enthält, in einer älteren Version unbekannte Fktsnamen der SyntaxÜberprüfung zu entziehen:
#Const alfa = 0
#Const beta = 0
Rem DemoUDF f.BedKomp u.Maskieren vb-unbekannter Funktionen
'   Vs1.1 -LSr -cd:20191130 -1pub:20191202h -lupd:20191201t
Function bKomPm(Bezug, Optional ByVal ArbVar As Boolean)
'    #Const alfa = 0
'    #Const beta = 0
Dim erg, x
If ArbVar Then
#If alfa = 1 Then
bKomPm = Array(WorksheetFunction.Aggregate(9, 6, Bezug), "Var1.1")
#Else
For Each x In Bezug
If IsNumeric(x) Then erg = erg + x
Next x
bKomPm = Array(erg, "Var1.0")
#End If
Else
#If beta = 1 Then
If TypeName(Bezug) = "Range" Then Bezug = Bezug.Address
bKomPm = Array(Evaluate("VJoin(" & Bezug & ",,-1)"), "Var0.1")
#Else
For Each x In Bezug
If IsError(x) Then Else erg = erg & x
Next x
bKomPm = Array(erg, "Var0.0")
#End If
End If
End Function
Für unbekannte neue ObjektEigenschaften wäre es evtl auch möglich, CallByName zu verwenden, bei dem diese Eigenschaft als Bezeichnungstext (2.Argument) zum Objekt (1.Arg) angegeben wird. Das zeigt die obige Bsp-UDF aber nicht. (Ein 2. möglicher #Const-Standort wurde angedeutet, ist aber irrelevant.)
Luc :-?
Anzeige
AW: Falls das Letzte missverständlich war, ...
02.12.2019 19:15:26
Nepumuk
Hallo Luc,
1. Könntest du mir bitte "Pgm" übersetzen?
2. Kennst du keine projektweiten Compilerkonstanten? Siehe:
Userbild
Das Trennzeichen zwischen den Konstante ist ein Doppelpunkt.
Gruß
Nepumuk
Das lässt mich den Bezug des HilfeTextes ...
03.12.2019 05:29:53
Luc:-?
…zu Comp-Konstanten erkennen, Nepumuk,
denn auf ModulEbene fktioniert das ja so nicht; die VBA-Hilfe ist leider recht uneinheitlich. Bei anderen Boxen arbeite ich bei mehreren Angaben ähnlich. Aber projektweite Angabe war für mein Bsp ja auch nicht erforderlich, weshalb ich nicht an diese Möglichkeit gedacht hatte.
Pgm hatte ich mal als Abk-Variante von Programm gelernt (neben ebenfalls möglichem Prog).
Gruß, Luc :-?

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige