2015-04-08 6 views
2

Я нашел этот фрагмент кода онлайн, который открывает диалог сохранения в качестве места на диске и позволяет пользователю сохранить файл. Когда вы нажимаете «сохранить», файл не сохраняется. Я понятия не имею, что я делаю неправильно здесь. Помогите?сохранить как диалог excel code

Вот код в вопросе:

Dim varResult As Variant 
     'displays the save file dialog 
     varResult = Application.GetSaveAsFilename(FileFilter:= _ 
       "Excel Files (*.xlsx), *.xlsx", Title:="Save PO", _ 
       InitialFileName:="\\showdog\service\Service_job_PO\") 
     'checks to make sure the user hasn't canceled the dialog 
     If varResult <> False Then 
     Exit Sub 
     End If 
+0

Этот код получает только имя файла. Затем вам нужно вызвать «Сохранить», используя это имя файла «Если varResult <> False». –

ответ

5

Вы должны фактически явно указать Excel, чтобы сохранить книгу.

Sub Mac2() 
     Dim varResult As Variant 
     Dim ActBook As Workbook 

     'displays the save file dialog 
     varResult = Application.GetSaveAsFilename(FileFilter:= _ 
       "Excel Files (*.xlsx), *.xlsx", Title:="Save PO", _ 
       InitialFileName:="\\showdog\service\Service_job_PO\") 

     'checks to make sure the user hasn't canceled the dialog 
     If varResult <> False Then 
      ActiveWorkbook.SaveAs Filename:=varResult, _ 
      FileFormat:=xlWorkbookNormal 
      Exit Sub 
     End If 
End Sub 

Использование GetSaveAsFilename получает только путь к файлу для сохранения, в то время как метод SaveAs фактически сохраняет книгу.

После некоторого рассмотрения, я могу предложить использовать метод SaveCopyAs вместо просто SaveAs. Как следует из названия, это оставит вашу оригинальную книгу в такте и сохранит копию. Сделать это довольно просто.

Вы бы заменить

ActiveWorkbook.SaveAs Filename:=varResult, _ 
FileFormat:=xlWorkbookNormal 

С

ActiveWorkbook.SaveCopyAs Filename:=varResult 

Одно последнее соображение, я хотел бы добавить, что если вы сохраните с поддержкой макросов рабочей книги в качестве формата XLSX (либо SaveAs или SaveCopyAs) то вы потеряете макросы в исходной книге, если вы используете SaveAs или в копии, которая сохраняется, если вы используете SaveCopyAs. Я бы предпочел сохранить файл как .xlsm вместо этого, если вам нужны макросы.

+0

Спасибо! Он отлично работает! – Rick

1

У меня были тем же самый вопрос, но предпочитает использовать самый короткий код:

Application.Dialogs(xlDialogSaveAs).Show ("c:\my_folder\") 

Это стандартная Excel сохранить диалог.

Он имеет несколько Params (не названы), вам может понадобиться Em:

Dim strFilename As String: strFilename = "report1" 
    Dim strFolder As String: strFolder = "C:\temp\" 'initial directory - NOTE: Only works if file has not yet been saved! 
    Dim xlfFileFormat As XlFileFormat: xlfFileFormat = XlFileFormat.xlOpenXMLWorkbook 'or replace by other XlFileFormat 
    Dim strPassword As String: 'strPassword = "password" 'The password with which to protect the file - if any 
    Dim booBackup As Boolean: 'booBackup = True '(Whether to create a backup of the file.) 
    Dim strWriteReservationPassword As String: 'strWriteReservationPassword = "password2" ' (The write-reservation password of the file.) 
    Dim booReadOnlyRecommendation As Boolean: booReadOnlyRecommendation = False '(Whether to recommend to the user that the file be opened in read-only mode.) 
    Dim booWorkbookSaved As Boolean ' true if file saved, false if dialog canceled 
    If Len(strFolder) > 0 Then ChDir strFolder 
    booWorkbookSaved = Application.Dialogs(xlDialogSaveAs).Show(Arg1:=strFilename, Arg2:=xlfFileFormat, Arg3:=strPassword, _ 
      Arg4:=booBackup, Arg5:=strWriteReservationPassword, Arg6:=booReadOnlyRecommendation)