PDA

Vollständige Version anzeigen : unterschiedliche Versionen


Hajo_Zi
19.09.2011, 13:12
Hallo,

ich soll ein Code entwickeln der auf 2003 und ab 2007 läuft. Ich glaube ich habe mir das zu einfach vorgestellt.
If ActiveSheet.UsedRange.Address <> "$A$1" Then
If Application.Version >= 14 Then
' aktuelle Tabelle speichern als PDF ab Version 2010
MsgBox "Bitte im nächsten Dialog den Ordner angeben!!!"
StOrdner = "C:\Eigene Dateien" 'GetAOrdner ' Verzeichnis auswählen
If StOrdner <> "" Then
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
StOrdner & "\" & Format(Date, "yymmdd") & "Zusammenfassung " & StAbteilung & ".pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=True
End If
Else
Application.ActivePrinter = "FreePDF auf Ne02:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
"FreePDF auf Ne02:", Collate:=True
End If
End If

Der Code unterscheidet schon zwischen den Versionen, aber er löst einen Fehler in 2003 aus da er die Befehle ab 2007 nicht kennt. Wie umgehe ich das? Ich möchte eigentlich ab 2007 nicht den "FreePDF auf Ne02:" benutzen.
GetAOrdner ist nur ein Teilprogramm um den Ordner auszuwählen. Ich habe es mal auskommentiert.

<img src="http://www.hajo-excel.de/images/grusz1.gif" align="middle" height="40" alt="Grußformel"><a href="http://Hajo-Excel.de/" onclick="window.open(this.href);return false"><img border="0" src="http://Hajo-Excel.de/images/logo_hajo3.gif" align="middle" height="40" alt="Homepage"></a>

Erich G.
19.09.2011, 13:37
Hi Hajo,
so ein einfaches If ... Else ... reicht da nicht aus.

Schau dir mal "Bedingte Kompilierung" an - z. B.
#If...Then
...
#Else
...
#End If

josef e
19.09.2011, 13:40
<div style="width:85%; margin-left:5px; margin-right:15px; text-align:justify;">
Hallo Hajo,

die bedingte Kompilierung kann man hier ja nicht anwenden, aber probier es mal so.

<div style="background-color:#F5F5F5; border-width:2px; border-style: groove; border-color:#ff9966; padding:4px;"><nobr><span style="font-family:Courier New,Arial; font-size:8pt ;" ><b><span style="color:#00009B"; >Sub</span> hajo()</b><br />&nbsp;&nbsp;<span style="color:#00009B"; >If</span> ActiveSheet.UsedRange.Address &lt;&gt; <span style="color:#800000"; >"$A$1"</span> <span style="color:#00009B"; >Then</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#00009B"; >If</span> Val(Application.Version) &gt;= <span style="color:#800000"; >14</span> <span style="color:#00009B"; >Then</span> <span style="color:#008000"; >'&gt;=12 ab xl2007</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000"; >' aktuelle Tabelle speichern als PDF ab Version 2010</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xl2010<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#00009B"; >Else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xl97_2003<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#00009B"; >End</span> <span style="color:#00009B"; >If</span><br />&nbsp;&nbsp;<span style="color:#00009B"; >End</span> <span style="color:#00009B"; >If</span><br />&nbsp;&nbsp;<br /><b><span style="color:#00009B"; >End</span> <span style="color:#00009B"; >Sub</span></b><br /><br /><br /><b><span style="color:#00009B"; >Sub</span> xl2010()</b><br />&nbsp;&nbsp;<span style="color:#00009B"; >Dim</span> stOrdner <span style="color:#00009B"; >As</span> String, stAbteilung <span style="color:#00009B"; >As</span> <span style="color:#00009B"; >String</span><br />&nbsp;&nbsp;MsgBox <span style="color:#800000"; >"Bitte im n&auml;chsten Dialog den Ordner angeben!!!"</span><br />&nbsp;&nbsp;stOrdner = <span style="color:#800000"; >"C:\Eigene Dateien"</span> <span style="color:#008000"; >'GetAOrdner ' Verzeichnis ausw&auml;hlen</span><br />&nbsp;&nbsp;<span style="color:#00009B"; >If</span> stOrdner &lt;&gt; "" <span style="color:#00009B"; >Then</span><br />&nbsp;&nbsp;&nbsp;&nbsp;ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stOrdner & <span style="color:#800000"; >"\"</span> & Format(Date, <span style="color:#800000"; >"yymmdd"</span>) & <span style="color:#800000"; >"Zusammenfassung "</span> & stAbteilung & <span style="color:#800000"; >".pdf"</span>, Quality:= _<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenAfterPublish:=True<br />&nbsp;&nbsp;<span style="color:#00009B"; >End</span> <span style="color:#00009B"; >If</span><br /><b><span style="color:#00009B"; >End</span> <span style="color:#00009B"; >Sub</span></b><br /><br /><br /><b><span style="color:#00009B"; >Sub</span> xl97_2003()</b><br />&nbsp;&nbsp;Application.ActivePrinter = <span style="color:#800000"; >"FreePDF auf Ne02:"</span><br />&nbsp;&nbsp;ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"; >"FreePDF auf Ne02:"</span>, Collate:=True<br /><b><span style="color:#00009B"; >End</span> <span style="color:#00009B"; >Sub</span></b><br /><br /></span></nobr></div>


</div>

<div style="width:100px; text-align:center; color:white; font-style:italic; font-size:0.8em; font-family:Tahoma; background-color:royalblue;margin-left:5px; margin-top:15px; padding:4px; border:3px double darkblue;">&laquo; Gru&szlig; Sepp &raquo;</div>

EarlFred
19.09.2011, 13:43
;) gelöscht

Erich G.
19.09.2011, 13:57
Hi Sepp,
zwei Fragen:
"die bedingte Kompilierung kann man hier ja nicht anwenden"
Warum nicht? Wo könnte man sie dann anwenden?

Wie bekommst du die Routine xl2010 in XL2003 kompiliert, wo es einige verwendete Befehle noch gar nicht gibt?

Hajo_Zi
19.09.2011, 14:13
Hallo Josef,

Danke für den Code, mein erster Test war erfolgreich.

Gruß Hajo

josef e
19.09.2011, 16:43
<div style="width:85%; margin-left:5px; margin-right:15px; text-align:justify;">
Hallo Erich,

die bedingte Kompilierung akzeptiert nur Konstanten zur Auswertung, wenn man die xl-Version feststellen will, geht das also nicht.

Das geht
<pre>
#If VBA6 Then
'oder
#If Win32 Then
'oder
#If Mac Then
</pre>
weil es sich dabei um Konstanten handelt.

Mein Code läuft, weil die entsprechende Sub ja nur in der jeweiligen Version angesprochen wird und die unbekannten Schlüsselwörter/Konstanten stören den Compiler in dem Fall nicht.
</div>

<div style="width:100px; text-align:center; color:white; font-style:italic; font-size:0.8em; font-family:Tahoma; background-color:royalblue;margin-left:5px; margin-top:15px; padding:4px; border:3px double darkblue;">&laquo; Gru&szlig; Sepp &raquo;</div>

EarlFred
19.09.2011, 16:59
Hallo zusammen,

und die unbekannten Schlüsselwörter/Konstanten stören den Compiler in dem Fall nicht.
...und Methoden! stören Excel 2003 nichtmal, wenn der Code innerhalb einer Sub steht (so, wie von Hajo gepostet)! Da hätte ich aus dem Bauch heraus jede Wette verloren... :entsetzt:
Einzig "Option Explicit" will in diesem Falle verhätschelt werden...

Einziger "Denkfehler" in Hajos Code: Application.Version lässt sich nicht auf >= 14 prüfen. Dafür ist folgende Änderung in der Zeile nötig:
If Val(Application.Version) >= 14 Then

Mit dieser Anpassung arbeitet das Makro unter meinem Excel 2003 ohne Meckerei.

Grüße
EarlFred

Erich G.
19.09.2011, 17:02
Danke, Sepp! - Wieder was dazugelernt. :-)