• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Save As met vooraf bepaalde nieuwe naam

Status
Niet open voor verdere reacties.

Tom30

Gebruiker
Lid geworden
17 jan 2007
Berichten
110
Hallo Excellisten,

Ik heb een formulier met de naam Formulier A.
Via onderstaande macro slaat hij het bestand tijdelijk op met een andere bestandsnaam die hij vervolgens in een mailscherm zet waarmee ik het kan emailen. Dat werkt perfect.

Wat ik nu graag zou willen is dat wanneer ik op een knop in het formulier druk, er een Save As schermpje komt waarin ik de locatie kan opgeven waar ik het bestand wil opslaan, waarbij bij de bestandsnaam dezelfde naam komt te staan als de tijdelijke bestandsnaam als hierboven in de macro beschreven.

Ik zie in het forum heel veel verschillende manieren van opslaan maar ik denk dat de manier die ik graag zou willen met een tempbestand moet werken. En dat kom ik dus niet echt tegen.

Weten jullie raad?

Alvast bedankt weer!!!

Groeten, Tom



Code:
Sub Mail_ActiveSheet()
'Working in 2000-2007
    Dim FileExtStr As String
    Dim FileFormatNum As Long
    Dim Sourcewb As Workbook
    Dim Destwb As Workbook
    Dim TempFilePath As String
    Dim TempFileName As String
    Dim OutApp As Object
    Dim OutMail As Object
 
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With
 
    Set Sourcewb = ActiveWorkbook
 
    'Copy the sheet to a new workbook
    ActiveSheet.Copy
    Set Destwb = ActiveWorkbook
 
    'Determine the Excel version and file extension/format
    With Destwb
        If Val(Application.Version) < 12 Then
            'You use Excel 2000-2003
            FileExtStr = ".xls": FileFormatNum = -4143
        Else
            'You use Excel 2007
            'We exit the sub when your answer is NO in the security dialog that you only
            'see  when you copy a sheet from a xlsm file with macro's disabled.
            If Sourcewb.Name = .Name Then
                With Application
                    .ScreenUpdating = True
                    .EnableEvents = True
                End With
                MsgBox "Your answer is NO in the security dialog"
                Exit Sub
            Else
                Select Case Sourcewb.FileFormat
                Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
                Case 52:
                    If .HasVBProject Then
                        FileExtStr = ".xlsm": FileFormatNum = 52
                    Else
                        FileExtStr = ".xlsx": FileFormatNum = 51
                    End If
                Case 56: FileExtStr = ".xls": FileFormatNum = 56
                Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
                End Select
            End If
        End If
    End With
 
    '    'Change all cells in the worksheet to values if you want
    '    With Destwb.Sheets(1).UsedRange
    '        .Cells.Copy
    '        .Cells.PasteSpecial xlPasteValues
    '        .Cells(1).Select
    '    End With
    '    Application.CutCopyMode = False
 
    'Save the new workbook/Mail it/Delete it
    TempFilePath = Environ$("temp") & "\"
    TempFileName = " " & Sourcewb.Name & " " & Format(Now, "dd-mm-yy h-mm") & " " & Range("F7").Value
 
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    Set OutMail = OutApp.CreateItem(0)
 
    With Destwb
        .SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
        On Error Resume Next
        With OutMail
            .To = ""
            .CC = ""
            .BCC = ""
            .Subject = "Observatieformulier van " & Range("F7").Value
            .Body = Range("B76").Value & vbNewLine & Range("B77").Value & vbNewLine & Range("B78").Value & Range("B80").Value & vbNewLine & vbNewLine & Range("B81").Value & vbNewLine & vbNewLine & Range("B82").Value & vbNewLine & vbNewLine & Range("B83").Value & Range("B84").Value
            
            
            .Attachments.Add Destwb.FullName
            'You can add other files also like this
            '.Attachments.Add ("C:\test.txt")
            .Display
            
        End With
        On Error GoTo 0
        .Close SaveChanges:=False
    End With
 
    'Delete the file you have send
    Kill TempFilePath & TempFileName & FileExtStr
 
    Set OutMail = Nothing
    Set OutApp = Nothing
 
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
End Sub
 
Onderstaande code toont het SaveAs menu.

Het bestand wordt opgeslagen met de naam Help als suggestie.
Uiteraard kan je dat nog aanpassen. (ook tijdens run-time).
Tijdens het runnen kan je aangeven waar je het bestand wilt opslaan.

Code:
Dim vNaam As Variant
Naam = Application.GetSaveAsFilename(InitialFileName:="Help", fileFilter:="Excelbestanden (*.xls), *.xls")

Idem als bovenstaande maar de naam is flexibel.
Code:
Dim vNaam As Variant
Dim vSugg As Variant
vSugg = "Help"
Naam = Application.GetSaveAsFilename(InitialFileName:=vSugg, fileFilter:="Excelbestanden (*.xls), *.xls")

Met vriendelijke groet,


Roncancio
 
Laatst bewerkt:
Hoi Roncancio,

Na aanleiding van jou tip maakte ik deze code:
Code:
Sub OpslaanAls()
    
Range("B1").Select
Dim vNaam As Variant
Dim vSugg As Variant
vSugg = "Observatie " & Range("L7").Value & " " & Range("F7").Value & " " & Range("F13").Value
Naam = Application.GetSaveAsFilename(InitialFileName:=vSugg, fileFilter:="Excelbestanden (*.xls), *.xls")
    
End Sub

en dat werkte perfect. Is het echter ook mogelijk om dat ook voor het pad te doen? Dus dat hij als suggestie al aangeeftt dat het in G:\Projecten\Maastricht\Tom opgeslagen gaat worden?

Thanks weer!!!!

Groeten, Tom
 
Tuurlijk.
Dat zou er dan zo uit zien:
Code:
Sub OpslaanAls()

Dim vNaam As Variant
Dim vSugg As Variant
[B]    ChDir ("G:\Projecten\Maastricht\Tom\")[/B]
    vSugg = "Observatie " & Range("L7").Value & " " & Range("F7").Value & " " & Range("F13").Value
    Naam = Application.GetSaveAsFilename(InitialFileName:=vSugg, fileFilter:="Excelbestanden (*.xls), *.xls")
    
End Sub
Je hoeft geen cel te selecteren. Liever niet zelfs.

Met vriendelijke groet,


Roncancio
 
Tuurlijk.
Dat zou er dan zo uit zien:
Code:
Sub OpslaanAls()

Dim vNaam As Variant
Dim vSugg As Variant
[B]    ChDir ("G:\Projecten\Maastricht\Tom\")[/B]
    vSugg = "Observatie " & Range("L7").Value & " " & Range("F7").Value & " " & Range("F13").Value
    Naam = Application.GetSaveAsFilename(InitialFileName:=vSugg, fileFilter:="Excelbestanden (*.xls), *.xls")
    
End Sub
Je hoeft geen cel te selecteren. Liever niet zelfs.

Met vriendelijke groet,


Roncancio

Roncancio, dit werkt SUPER !!!!

Thanks! :thumb:
 
Hoi Roncancio,

Ik was toch een beetje voorbarig. :-(

Het lijkt erop dat het helemaal goed gaat. Hij suggereert het juiste pad én de juiste filename. Ik hoef dan alleen maar op save te drukken. Dan gaat ie zoals gebruikelijk terug naar het werkblad, echter slaat hij het niet op..(???)
Ik krijg geen foutmelding of niks, het lijkt alsof hij het gewoon doet. Ga ik echter in die map kijken, zie ik niks.
Ik zie ook niet linksonder staan "saving file.....", hetgeen ik wel zie als ik gewoon save as gebruik onder het file menu.

Weet jij wat er aan de hand zou kunnen zijn?

Thanks alvast !

Grtz, Tom
 
Het vetgedrukte regel was ik vergeten.

Code:
Sub OpslaanAls()

Dim vNaam As Variant
Dim vSugg As Variant
    ChDir ("G:Projecten\Maastricht\Tom\")
    vSugg = "Observatie " & Range("L7").Value & " " & Range("F7").Value & " " & Range("F13").Value
    naam = Application.GetSaveAsFilename(InitialFileName:=vSugg, fileFilter:="Excelbestanden (*.xls), *.xls")
[B]    ActiveWorkbook.SaveCopyAs Filename:=naam[/B]
End Sub

Met vriendelijke groet,


Roncancio
 
Hoi,

Ik heb er dit van gemaakt:.
Code:
Sub OpslaanAls()
    Range("B1").Select
Dim vNaam As Variant
Dim vSugg As Variant
ChDir ("G:\Tom\fff\")
vSugg = "" & Range("L7").Value & " " & Range("F7").Value & " " & Range("F13").Value
naam = Application.GetSaveAsFilename(InitialFileName:=vSugg, fileFilter:="Excelbestanden (*.xls), *.xls")
ActiveWorkbook.SaveCopyAs Filename:=naam

End Sub

en dan werkt dat inderdaad prima! Thanks.

Maarrrrrrr.... (:D)...... Om de gebruiker van het formulier er zeker van te laten zijn dat hij het op de juiste manier heeft opgeslagen, krijgt hij een msg box als hij op het kruisje drukt:

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Msg, Style, Title, Response
Msg = "Is het formulier op de juiste manier opgeslagen op de G-Drive?"
Style = vbYesNo + vbDefaultButton2 + vbCritical
Title = "Afsluiten? Let op:"
Response = MsgBox(Msg, Style, Title)
If Response = vbYes Then
End
Else
Call OpslaanAls
End If
End Sub

Als hij op Yes drukt, sluit excel gewoon af. Als hij op nee drukt, roept hij eerdergenoemde macro aan om het alsnog op te slaan. Echter, wanneer ik dan op save druk, slaat hij het ook niet op. Excel sluit daarna wel af. Dus het lijt alsof hij jouw vetgedrukte regel dan niet meeneemt.

Das raar, toch?

Alvast bedankt weer!!! :thumb:
 
Hoi,

Ik heb er dit van gemaakt:.
Code:
Sub OpslaanAls()
    Range("B1").Select
Dim vNaam As Variant
Dim vSugg As Variant
ChDir ("G:\Tom\fff\")
vSugg = "" & Range("L7").Value & " " & Range("F7").Value & " " & Range("F13").Value
naam = Application.GetSaveAsFilename(InitialFileName:=vSugg, fileFilter:="Excelbestanden (*.xls), *.xls")
ActiveWorkbook.SaveCopyAs Filename:=naam

End Sub

en dan werkt dat inderdaad prima! Thanks.

Maarrrrrrr.... (:D)...... Om de gebruiker van het formulier er zeker van te laten zijn dat hij het op de juiste manier heeft opgeslagen, krijgt hij een msg box als hij op het kruisje drukt:

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Msg, Style, Title, Response
Msg = "Is het formulier op de juiste manier opgeslagen op de G-Drive?"
Style = vbYesNo + vbDefaultButton2 + vbCritical
Title = "Afsluiten? Let op:"
Response = MsgBox(Msg, Style, Title)
If Response = vbYes Then
End
Else
Call OpslaanAls
End If
End Sub

Als hij op Yes drukt, sluit excel gewoon af. Als hij op nee drukt, roept hij eerdergenoemde macro aan om het alsnog op te slaan. Echter, wanneer ik dan op save druk, slaat hij het ook niet op. Excel sluit daarna wel af. Dus het lijt alsof hij jouw vetgedrukte regel dan niet meeneemt.

Das raar, toch?

Alvast bedankt weer!!! :thumb:

Als ik beide codes gebruik in mijn applicatie werkt het gewoon.
Het bestand wordt opgeslagen (kopie?) in de directory.
Alleen krijg ik wel de melding of het (oorspronkelijke) bestand moet worden opgeslagen.

Met vriendelijke groet,


Roncancio
 
Het oorspronkelijke bestand hoeft eigenlijk nooit opgeslagen te worden. Dat moet altijd zo blijven omdat het het orgineel is.

Ik heb mijn projectje bijgeloten, dan zie je misschien waar het mis gaat. :D


Wederom bedankt!!!!


Groeten, Tom
 

Bijlagen

Als ik op het pictogram klikt om te bewaren, start de macro om op te slaan. het bestand wordt opgeslagen.
Ook als ik het bestand afsluit en de vraag negatief beantwoord of het bestand al is opgeslagen, krijg ik de mogelijkheid om het bestand op te slaan.
In beide gevallen wordt het programma daadwerkelijk opgeslagen onder de genoemde naam.

Code:
Sub OpslaanAls()
Dim sNaam As String
Dim vSugg As Variant
    ChDir ("G:\Tom\fff\")
    vSugg = "" & Range("L7").Value & " " & Range("F7").Value & " " & Range("F13").Value
    While sNaam = False
        sNaam = Application.GetSaveAsFilename(InitialFileName:=vSugg, fileFilter:="Excelbestanden (*.xls), *.xls")
    Wend
    ActiveWorkbook.SaveCopyAs Filename:=sNaam

End Sub

Ik ben zo vrij geweest om de code aan te passen zodat de gebruiker niet uit de macro komt zonder dat het bestand is opgeslagen.

Met vriendelijke groet,


Roncancio
 
Als ik op het pictogram klikt om te bewaren, start de macro om op te slaan. het bestand wordt opgeslagen.
Ook als ik het bestand afsluit en de vraag negatief beantwoord of het bestand al is opgeslagen, krijg ik de mogelijkheid om het bestand op te slaan.
In beide gevallen wordt het programma daadwerkelijk opgeslagen onder de genoemde naam.

Code:
Sub OpslaanAls()
Dim sNaam As String
Dim vSugg As Variant
    ChDir ("G:\Tom\fff\")
    vSugg = "" & Range("L7").Value & " " & Range("F7").Value & " " & Range("F13").Value
    While sNaam = False
        sNaam = Application.GetSaveAsFilename(InitialFileName:=vSugg, fileFilter:="Excelbestanden (*.xls), *.xls")
    Wend
    ActiveWorkbook.SaveCopyAs Filename:=sNaam

End Sub

Ik ben zo vrij geweest om de code aan te passen zodat de gebruiker niet uit de macro komt zonder dat het bestand is opgeslagen.

Met vriendelijke groet,


Roncancio


Dat is echt heel raar. Als ik het bestand open, vervolgens meteen op het rode kruis in het formulier druk, dan op No en dan op Save, slaat hij het niet op. Excel sluit wel af maar hij schrijft geen kopie naar de gesuggereerde map. Doet hij dat bij jou wel?
 
Dat is echt heel raar. Als ik het bestand open, vervolgens meteen op het rode kruis in het formulier druk, dan op No en dan op Save, slaat hij het niet op. Excel sluit wel af maar hij schrijft geen kopie naar de gesuggereerde map. Doet hij dat bij jou wel?


Ja. Ik heb precies de handelingen gedaan en het bestand wordt opgeslagen.

Verrichte handelingen:
- Ik open het bestand
- Sluit af door op het rode kruis te klikken.
- Op de melding kies ik voor No
- Ik toets een naam in
- Ik klik op bewaren om het bestand op te slaan.

En het bestand is opgeslagen onder de nieuwe naam.

Met vriendelijke groet,


Roncancio
 
Ja. Ik heb precies de handelingen gedaan en het bestand wordt opgeslagen.

Verrichte handelingen:
- Ik open het bestand
- Sluit af door op het rode kruis te klikken.
- Op de melding kies ik voor No
- Ik toets een naam in
- Ik klik op bewaren om het bestand op te slaan.

En het bestand is opgeslagen onder de nieuwe naam.

Met vriendelijke groet,


Roncancio

Hi,

In jou verrichte handelingen heb je waarschijnlijk op het rode kruis rechtsboven in het scherm gedrukt. Dan gaat het bij mij idd ook goed. Maar als je die handelingen uitvoert met het rode kruis in het formulier zelf, dan gaat het mis. Bij mij althans.
Is dat te verklaren? De macro aan het rode kruis is gewoon een Active.Workbook.close.


Groeten en bedankt!
 
Als je de macro Afsluiten aanpast, dan gaat het wel goed.

Code:
Sub Afsluiten()
    OpslaanAls
    ActiveWorkbook.Close
End Sub

2 opmerkingen:
- Je hoeft geen cel te selecteren. Dus geen Range("B1").Select
- Je hoeft geen Call te gebruiken om een macro aan te roepen. Slechts de naam is voldoende.

Met vriendelijke groet,


Roncancio
 
Roncancio,

Mijn dank is G R O O T !!!!
Het werkt perfect zo! Heel erg bedankt voor deze TOP ondersteuning. :thumb:


Groeten, Tom
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan