2016-04-06 12 views
1

Ich versuche, eine .xls-Datei an einem fest codierten Speicherort im XLSX-Dateiformat automatisch zu speichern. Ich möchte, dass das SaveAs-Dialogfeld den fest codierten Speicherort und den Dateinamen anzeigt, der im Feld "Dateiname:" codiert wurde. Dies ist so, dass ich nur auf die Schaltfläche Speichern klicken muss.Excel VBA XLDialogSaveAs Funktion funktioniert nicht

Der SaveAs-Dialog wird jedoch immer C-Laufwerk anzeigen, wenn ich meine Datei im H-Laufwerk speichern möchte.

Die folgenden sind meine Codes:

Option Explicit 

Sub externalRatingChangeFile() 

    'Declare the data type of the variables 
    Dim wks As Worksheet 
    Dim sFilename As String 

    'Set wks to the current active worksheet 
    Set wks = ActiveWorkbook.ActiveSheet 

    'Set the location to save the file to a variable 
    sFilename = "H:\testing file" 

    'Save as .xlsx file in the specific location stated earlier 
    'If there are errors in the code, set wks to nothing and end the process 
    On Error GoTo err_handler 
    ChDrive sFilename 
    ChDir sFilename 
    Application.Dialogs(xlDialogSaveAs).Show (sFilename & "\TestingFile - " & Format(Date, "YYYYMMDD") & ".xlsx") 

    'System to/not display alerts to notify Users that they are replacing an existing file. 
    Application.DisplayAlerts = True 

    err_handler: 
    'Set Wks to its default value 
    Set wks = Nothing 

End Sub 
+2

Versuchen Sie, die Arbeitsmappe oder das Arbeitsblatt zu speichern? Die 'Dialoge (xlDialogSaveAs)' werden nur in einem Anfangsordner gestartet, wenn das Arbeitsbuch nicht zuvor gespeichert wurde. – Jeeped

+0

Ich versuche, die Arbeitsmappe zu speichern. Die Arbeitsmappe wird aus einer Onlinequelle exportiert und wurde nicht zuvor in einem Ordner gespeichert. Ist das der Grund, warum der SaveAs-Dialog mir stattdessen das C-Laufwerk zeigt? – JJ2015

Antwort

2

Während ich die Application.GetSaveAsFilename method bevorzugen (siehe this) Das Festlegen des ursprünglichen Ordners auf einem xlDialogSaveAs sollte kein Problem sein, vorausgesetzt, dass die ursprüngliche Arbeitsmappe nicht zuvor gespeichert wurde.

Sub externalRatingChangeFile() 
    Dim bSaved As Boolean 
    Dim xlsxFileFormat As XlFileFormat 

    'Declare the data type of the variables 
    Dim wks As Worksheet 
    Dim sFilename As String 

    'Set wks to the current active worksheet 
    Set wks = ActiveWorkbook.ActiveSheet 

    'Set the location to save the file to a variable 
    sFilename = "H:\testing file" 
    xlsxFileFormat = XlFileFormat.xlOpenXMLWorkbook 

    'Save as .xlsx file in the specific location stated earlier 
    On Error GoTo err_handler 
    bSaved = Application.Dialogs(xlDialogSaveAs).Show(Arg1:=sFilename & "\TestingFile - " & Format(Date, "YYYYMMDD"), _ 
                 arg2:=xlsxFileFormat) 

    'System to/not display alerts to notify Users that they are replacing an existing file. 
    Application.DisplayAlerts = True 

err_handler: 
    'Set Wks to its default value 
    Set wks = Nothing 

End Sub 
+0

Das gleiche Problem bleibt bestehen, immer noch auf C Drive zurückgesetzt ... – JJ2015

+2

@ JJ2015 existiert Ihr Ordnerpfad. Diese Methode funktionierte für mich, erfordert aber, dass der Pfad vor dem Speichern tatsächlich existiert. Andernfalls wird der Standardpfad wiederhergestellt. – TsTeaTime

+1

Ich lief das tatsächlich zu meinem T: Laufwerk (eine SD-Karte in meinem Laptop) und es kam gut aus, so lange es eine neue Arbeitsmappe war. Sind Sie sicher, dass der Ordner 'H: \ testing file' existiert? Wenn dies nicht der Fall ist, wird es standardmäßig auf C: zurückgesetzt. – Jeeped

3

Anstatt das Dialogfeld Speichern unter zeigen, nur direkt in den Ordner speichern.

Application.DisplayAlerts = False 
    wks.SaveAs (sFilename + "\TestingFile - " + Format(Date, "YYYYMMDD") + ".xlsx") 
    Application.DisplayAlerts = True 

oder

Application.DisplayAlerts = False 
    wks.SaveCopyAs (sFilename + "\TestingFile - " + Format(Date, "YYYYMMDD") + ".xlsx") 
    Application.DisplayAlerts = True 

Schließlich könnten Sie Ihr eigenes Dialogfeld erstellen, um sicherzustellen, dass Sie an der richtigen Stelle sparen:

'Result = 2 is Cancel 
'Result = 1 is Ok 
result = MsgBox("Would You Like To Save in the Following Location: " + "H:\Test File....", vbOKCancel, "Save As") 
+0

Hallo Tyler, ich möchte sehen, dass ich die Datei an der richtigen Stelle mit dem richtigen Dateinamen speichern, bevor ich speichere. Gibt es eine andere Möglichkeit, das Dialogfeld anzuzeigen? – JJ2015

+0

Sie könnten stattdessen eine msgbox verwenden. Dies könnte als ein Dialogfeld fungieren. – TsTeaTime

+0

@Jeeped hat eine Lösung darunter, die für Sie arbeiten sollte. – TsTeaTime

Verwandte Themen