Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

mit VBA "Speichern unter" Dateityp vorbelegen

mit VBA "Speichern unter" Dateityp vorbelegen
06.12.2012 19:39:33
Ruder
Hallo,
mein erster Beitrag hier, da ich zur Zeit an einem Problem dran bin,dass ich nicht lösen kann, hatte es schon in einem anderen Forum probiert ( dort bin ich schon etwas länger angemeldet) aber da konnte man mir bisher nicht helfen.
Folgendes Problem: Also eine Gültigkeitsprüfung oder derartiges brauche ich eigentlich nicht, hier haben alle Office 2010...es liegt folgende SItuation vor:
Ich hab ein Berechnugnsprogramm geschrieben, dieses soll jetzt als Template/Vorlage in einen allgemein zugängigen Ordner abgelegt werden und da einige schon etwas älter sind und man nicht zu jedem hinrennen will und ihm erklären, was er wie speichern muss, damit es weiterhin funktioniert,dachten wir halten "wir sperren die anderen Formate beim speichern".
Das Template Format ist nur dabei, damit ich die Ausgangsdatei als Template speichern kann.
Also ich öffne die Template Datei ( Excel macht ja dann Automatisch daraus ein "DateiName1" arbeite dann damit und hinterlege die Berechnung unter einen anderem Dateinamen als xlsm - Datei.
Was schon alles unternommen wurde könnt hier hier nach lesen: Siehe: http://www.office-loesung.de/ftopic563542_0_0_asc.php#2388039
hab schon einige Codes ausprobiert, aber leider hat noch nichts hin gehauen, und da ich hier schhon desöfteren Lösung für Probleme gefunden habe,dachte ich mir komm ich mal hier her ;)
DANKE!

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mit VBA "Speichern unter" Dateityp vorbelegen
06.12.2012 20:06:05
schauan
Hallo Ruder,
nur mal als Ansatz. Dein erster code sah doch ganz gut aus. Am Anfang fehlt nur Application.EnableEvents=False.
Die Prüfung FileFormat:=IIf(Val(Application.Version) gt 11, 52, xlNormal) ist m.E. so nicht korrekt. Eventuell solltest Du das nicht erst an dieser Stelle auswerten.
Für Office 2010 benötigst Du ja eine Unterscheidung nach xlsm und xltm und entsprechend, wie schon diskutiert, die 52 oder 53.
Hier könntest Du prüfen, welche letzten 4 Zeichen des Namens hier zutreffend sind.
Wenn Du Versionsunterschiede berücksichtigen willst, solltest Du eventuell 2 Speichervarianten ausführen.
Im Prinzip
Wenn Version gt 11 dann
wenn xlsm dann varTyp = 52 sonst varTyp = 53
saves ... filetyp:=vartyp
oder
saveas ... was auch immer
Ende Wenn
Grüße, André

Anzeige
AW: mit VBA "Speichern unter" Dateityp vorbelegen
06.12.2012 20:20:39
Ruder
Hallo André,
Danke für deine Antwort!
ja der "erste Code" hat bisher auch am besten funktioniert, nur hab ich bzw. wir da nicht die Excel Vorlagen Datei integerien können.
Irgendwas prüfen muss ich auch gar nicht ( außer es geht nicht anders) kann man nicht einfach "sagen" BeforeSave, Filterindex nur mit xlsm und xltm und dann speichern Aufrufen.
Auf allen PC's ist Office 2010 drauf und die xltm - Endung brauche ich ja nur um aus der xlsm - Datei erstmal eine Vorlage zuerzeugen ( vielleicht gibt es da auch einen anderen Weg?)
Hier vielleicht nochmal der Code um den es geht:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim varWorkbookName As String
Dim xbCModus As Integer
If SaveAsUI = True Then
varWorkbookName = Application.GetSaveAsFilename( _
fileFilter:=IIf(xbCModus, "Excel Macro Enabled Template (*.xltm), *.xltm", "Excel Macro  _
Enabled Workbook (*.xlsm), *.xlsm"))
Cancel = True
If varWorkbookName  "Falsch" Then _
ActiveWorkbook.SaveAs Filename:=varWorkbookName, FileFormat:=IIf(Val(Application. _
Version) > 11, 52, xlNormal)
End If
Quit:
If Err.Number > 0 Then
If Err.Number  1004 Then
MsgBox "Error: " & Err.Number & Err.Description & vbCrLf & vbCrLf & vbCrLf & _
"Title", vbCritical
End If
End If
Application.EnableEvents = True
End Sub 

Anzeige
AW: mit VBA "Speichern unter" Dateityp vorbelegen
07.12.2012 04:54:45
schauan
Hallo Ruder,
dann der betreffende codeteil nochmal in Bunt ;-)
If varWorkbookName <> "Falsch" Then
    If Application.Version > 11 Then
        If Right(varWorkbookName) = "xlsm" Then vartyp = 52 Else vartyp = 53
           ActiveWorkbook.SaveAs Filename:=varWorkbookName, FileFormat:=vartyp
    Else
        'save fuer altes office 
    End If
End If
Grüße, André

Anzeige
AW: mit VBA "Speichern unter" Dateityp vorbelegen
07.12.2012 06:37:35
schauan
Hallöchen
statt
Right(varWorkbookName)
bitte
Right(varWorkbookName, 4)
Grüße, André

TIPP : Besser xl-Bezeichner verwenden
07.12.2012 12:05:50
NoNet
Hallo André,
ich habe Deinen Code jetzt nicht analysiert, beim Drüberlesen fiel mir jedoch auf, dass Du den numerischen Typ (52 bzw. 53) verwendest. Ich kann von der Verwendung solcher fixen Werten nur abraten und empfehle die Verwendung der xlBezeichner (bzw. xl-Konstanten) - im konkreten Fall also :
varTyp = xlOpenXMLWorkbookMacroEnabled '52
bzw.
varTyp = xlOpenXMLTemplateMacroEnabled '53

Gruß, NoNet

TIPP: xl-Bezeichner in der VBA-Hilfe
07.12.2012 14:36:10
NoNet
Hallo schauan,
Danke für die Links. Die Offline-Version ist allerdings nicht unbedingt notwendig, wenn die lokale VBA Onlinehilfe installiert und funktionstüchtig ist. Hier das Offline-Pendant : Hilfe zu xlFileFormat :
Hier der Screenshot (bitte ein-/ausblenden) : Einblenden  Ausblenden :

Gruß, NoNet

Anzeige
AW: TIPP: xl-Bezeichner in der VBA-Hilfe
07.12.2012 15:20:04
Ruder
Hallo NoNet und André,
ich danke euch, es klappt jetzt ohne das Excel meckert (endlich!) und die Lösung war so nahe nur ein kleiner Teil hat sich ja geändert!
Das mit dem Format (52,53) werde ich dann dementsprechend abändern, kannst du auch erklären warum du davon abräts? (Frage nur aus Neugier).
Danke!
Der Code sieht jetzt so aus:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim varWorkbookName As String
Dim xbCModus As Integer
Application.EnableEvents = False
If SaveAsUI = True Then
varWorkbookName = Application.GetSaveAsFilename( _
fileFilter:="Excel Macro Enabled Workbook (*.xlsm), *.xlsm, Excel Macro Enabled  _
Template (*.xltm), *.xltm")
Cancel = True
If varWorkbookName  "Falsch" Then
If Application.Version > 11 Then
If Right(varWorkbookName, 4) = "xlsm" Then vartyp =  _
xlOpenXMLWorkbookMacroEnabled Else vartyp = xlOpenXMLTemplateMacroEnabled '52,53
ActiveWorkbook.SaveAs Filename:=varWorkbookName, FileFormat:=vartyp
Else 'save fuer altes office
End If
End If
End If
Application.EnableEvents = True
End Sub
Falls ihr nichts mehr daran auszusetzen habt, würde ich das Thema als abgeschlossen betrachten :-)

Anzeige
AW: TIPP: xl-Bezeichner in der VBA-Hilfe
07.12.2012 15:23:51
Ruder
Hi,
eine kurze Frage noch:
Was bringt genau das "Application.EnableEvents " wofür brauch ich das in meinen Fall?

AW: TIPP: xl-Bezeichner in der VBA-Hilfe
07.12.2012 16:10:04
schauan
Hallo Ruder,
der code läuft beim Speichern sonst öfter durch - einmal, weil Du auf Speichern gedrückt hast, und dann speichert der code mit saveas ....
Vorteilhaft wäre deswegen auch eine Fehlerbehandlung. Wenn der code mal nicht durchläuft, passiert danach nämlich in Richtung Events so gut wie nix mehr :-(
Also oben irgendwo
On Error goto Errorhandler
und über App...=True
Errorhandler:
Grüße, André

AW: TIPP: xl-Bezeichner in der VBA-Hilfe
07.12.2012 17:01:27
Ruder
Hi André,
Danke für die Erklärung! Das mit dem Error go to werde ich noch einbauen, ich denke dann sollte es klappen :-)

Anzeige
Neugier-Befriedigung ;-)
07.12.2012 16:46:30
NoNet
Hallo Ruder,
Das mit dem Format (52,53) werde ich dann dementsprechend abändern, kannst du auch erklären warum du davon abräts? (Frage nur aus Neugier).
1.) weiss nach einiger Zeit kaum noch jemand, was 52 bzw. 53 bedeuten - die xl-Bezeichner sind hier selbsterklärend und daher besser lesbar.
2.) Niemand kann Dir versichern, dass auch in zukünftigen Excel-Versionen noch die gleichen numerischen Werte für diese Versionen verwendet werden - oder ob diese überhaupt noch unterstützt werden (es kam in der Vergangenheit schon mehrfach vor, dass Bezeichenr bzw. damit auch deren numerische Werte entfielen !).
Im schlimmsten Fall wird für die Werte 52 und 53 ein anderer Dateityp unterstützt - und das wäre fatal (allerdings ist mir kein konkreter Fall bekannt, in dem die numerischen Werte tatsächlich eine andere Bedeutung erhielten !)
3.) über die xl-Bezeichner ist klar, welches Argument gemeint ist, manchmal wird der Argumentenname auch weggelassen (also z.B. ActiveWorkbook.SaveAs varWorkbookName, vartyp - hier ist nicht auf den ersten Blick erkenntlich, welcher Wert für welches Argument steht. In Deinem Code hast Du sinnvollerweise die Namen der Argumente mit angegeben : ActiveWorkbook.SaveAs Filename:=varWorkbookName, FileFormat:=vartyp
Gruß, NoNet

Anzeige
AW: Neugier-Befriedigung ;-)
07.12.2012 17:04:59
Ruder
Hi Nonet,
zu 1) naja man könnte es ja in einem Kommentar erklären :D
2,3) Stimm ich dir zu, das macht Sinn und klingt einleuchtend, dachte erst das sei irgendwie Fehler anfälliger oder "unsauber" programmiert oder so.
Ich denke dann passt der Code jetzt, werde noch (André hatte mich drauf hingewiesen) ein Error - Abfang Zeile mit reinnhemen und dann sollte es ja erstmal funktionieren :-)
Danke Neugier - Befriedigt!

AW: Neugier-Befriedigung ;-)
07.12.2012 17:05:16
Ruder
Hi Nonet,
zu 1) naja man könnte es ja in einem Kommentar erklären :D
2,3) Stimm ich dir zu, das macht Sinn und klingt einleuchtend, dachte erst das sei irgendwie Fehler anfälliger oder "unsauber" programmiert oder so.
Ich denke dann passt der Code jetzt, werde noch (André hatte mich drauf hingewiesen) ein Error - Abfang Zeile mit reinnhemen und dann sollte es ja erstmal funktionieren :-)
Danke Neugier - Befriedigt!

Anzeige
AW: Neugier-Befriedigung ;-)
08.12.2012 09:43:56
Hajo_Zi
aus dem Beitrag konnte ich jetzt nicht lesen was offen?
Gruß Hajo
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen