XLSM-werkmap standaard opslaan als Excel met macro's

Status
Niet open voor verdere reacties.

combinatietang

Gebruiker
Lid geworden
24 mrt 2008
Berichten
48
Ik heb een xltm-sjabloon met vba-codes. Het sjabloon staat onder sjablonen zodat iedereen erbij kan.
Wannneer de gebruiker het bestand na openen wil opslaan, staat in het dialoogvenster automatisch opslaan als xlsx-bestand geselecteerd.
Graag wil ik dat standaard de optie xlsm geselecteerd staat.

De codes die ik op internet heb gevonden, werken maar half, verbergen de overige opslaan-opties, werken alleen via commandobuttons o.d., geven foutmeldingen enz, enz.
Heeft iemand toevallig een code in de la liggen die dit wel zonder problemen doet?
 
Laatst bewerkt:
Je kan dat als standaard instellen:
Opslaan.jpg
 
@Edmoor,

Bedankt voor je tip. Ik heb het uitgeprobeerd.
Maar als ik nu een xlsx bestand wil opslaan staat standaard ook xlsm geselecteerd.
Dit is natuurlijk minder erg omdat je dan niet per ongeluk gegevens kunt kwijt raken, maar logisch is anders.
 
Je kan uiteraard niet 2 extensies als standaard instellen.
 
@Edmoor

Ik ben dus eigenlijk op zoek naar een code die ik kan toevoegen aan mijn xlmt-sjabloon, zodat standaard xlsm geselecteerd staat als dit bestand wordt opgeslagen.
Dit is bedoeld om te voorkomen dat als je te snel op "ja - ja" klikt, het per ongeluk opslaat als xlsx.
Ook zijn er gebruikers die niet goed het verschil weten tussen xlsx en xlsm, en bij twijfel eerder voor xlsx zullen kiezen.
Natuurlijk kan ik de gebruikers hier op wijzen, maar een code die standaard xlsm selecteert leek me een elegantere oplossing.
Een dergelijk code moet dan natuurlijk wel betrouwbaar zijn, anders is het middel erger dan de kwaal.
De codes die ik op internet heb gevonden, en heb proberen aan te passen, bleken echter niet in alle gevallen betrouwbaar.
Dus als iemand een betrouwbare oplossing heeft, hou ik me aanbevolen.
 
Je kan bij het opslaan van een werkboek het type meegeven:
Workbook,SaveAs "Pad\Naam", 52

Die 52 staat voor werkbook met macro's, xlsm dus.

Of:
Application.DefaultSaveFormat = xlOpenXMLWorkbookMacroEnabled

Om de eerder genoemde instelling te zetten.

Terug naar xlsx:
Application.DefaultSaveFormat = xlOpenXMLWorkbook
 
Laatst bewerkt:
@Edmoor

Ik krijg het niet werkend. Ik heb de volgende code in ThisWorkbook geplaatst:

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel as Boolean) 
Application.DefaultSaveFormat = xlOpenXMLWorkbookMacroEnabled
End Sub

Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Application.DefaultSaveFormat = xlOpenXMLWorkbook
End Sub

Verder heb ik variaties uitgeprobeerd met
Code:
ActiveWorkbook.SaveAs
in combinatie met
Code:
Application.FileDialog(msoFileDialogSaveAs)
. Bij deze combinaties opent het dialoogvenster meerdere keren. Dit komt natuurlijk omdat ik het venster zelf aanroep in de sub "Workbook_BeforeSave"....maar ja,.. wat doe je daar aan?:eek:
 
Je hoeft niet steeds de naam van de helper te vermelden, tenzij je alleen door edmoor geholpen wilt worden natuurlijk. In dat geval kun je hem beter een PM sturen :).
 
Ik noemde telkens de naam zodat het duidelijk is op wie ik reageer, maar dat is in dit geval inderdaad een beetje overdone.:confused:
Dus iedereen die iets bij wil dragen,... laat je niet tegenhouden. :d
 
Bv.

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
With Application.FileDialog(msoFileDialogSaveAs)
       .InitialFileName = ThisWorkbook.Path & "\vul hier iets anders in"
       .Title = "Opslaan als"
       .FilterIndex = 2           '1 =.xlsx, 2 =.xlsm, 3 =.xlsb
    If .Show Then .Execute
   End With
End Sub
 
Zet in het sjabloon:

Code:
Private Sub Workbook_Open()
 If ThisWorkbook.Path = "" Then ThisWorkbook.SaveAs "voorbeeld.xlsm", 52
End Sub
 
Dag Harry,

Ik heb jouw code in ThisWorkbook geplakt, en het bestand opgeslagen als xltm onder "persoonlijke sjablonen", maar dat werkt niet.
Als ik klik op "opslaan als", verschijnt het venster "opslaan-als" 3x achter elkaar.
1e keer: opslaan als xlsm
2e keer: opslaan als xlsm
3e keer: opslaan als xlsx

Ik had graag een test-bestandje bijgevoegd, maar xlmt-bestanden mogen blijkbaar niet worden geüpload. Ik gebruik office 365.
 
Dag Snb,

Als ik jouw code onder ThisWorkbook plak, wil het xltm-bestand gelijk na het openen al opslaan.
Het dialoogvenster "opslaan-als" wordt dan niet getoond.
Ik heb nog enkele variaties op jouw code uitgeprobeerd, maar ook die werkten niet.
 
Waarom zou je een sjabloon steeds opnieuw opslaan?

Voor de fun.
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI = False Then
With Application.FileDialog(msoFileDialogSaveAs)
       .InitialFileName = ThisWorkbook.Path & "\vul hier iets anders in"
       .Title = "Opslaan als"
       .FilterIndex = 9    'xltm
       .Show
   End With
 End If
End Sub
 
Kijk eens naar de titel van deze draad.
Blijkens jouw reaktie in #13 doet mijn code dat meteen (niet gelijk) bij het openen van het bestand.
Is dat niet fraai ? en in overeenstemming met je vraag ?
Niets meer veranderen aan de code dus, zou ik zeggen.
 
Laatst bewerkt:
Dag Harry,

Als ik jouw code gebruik werkt "opslaan als " inderdaad zoals ik wil.
Maar als ik daarna het opgeslagen xlsm-bestand open en opnieuw opsla (dus zonder opslaan als), dan wordt een nieuwe bestandnaam voorgesteld i.p.v. opgeslagen.
De voorgestelde bestandsnaam is dan samengesteld uit dit gedeelte van de code.
Code:
.Path & "\vul hier iets anders in"
 
Laatst bewerkt:
Waarom zou je anders gebruik willen maken van.
Code:
Application.FileDialog(msoFileDialogSaveAs)
 
Dag Harry

Ik zou een verschil verwachten tussen "Save As" en "Save".
Bij Save verwacht ik hooguit een zandloper. Dus niet een invoervenster zoals bij Save As.
 
Ik heb voorlopig een oplossing gevonden. Wanneer een werkmap met onderstaande code wordt opgeslagen, staat standaard xlsm geselecteerd.
Nadeel: Ik heb met ctrl-alt-del een vastloper gesimuleerd tijdens het opslaan en vervolgens excel opnieuw opgestart.
Daarna bleek onder "opties/opslaan/bestanden opslaan in deze indeling/ ..." de standaard bestandextensie gewijzigd te zijn in xlsm, omdat de 2e code niet kon worden uitgevoerd.


Code:
Private Sub Workbook_Activate()
If Me.Path = "" Then Application.DefaultSaveFormat = xlOpenXMLWorkbookMacroEnabled
End Sub

Private Sub Workbook_Deactivate()
If Me.Path <> "" Then Application.DefaultSaveFormat = xlOpenXMLWorkbook
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan