Страницы: 1
RSS
Процедура VBA для выполнения Save As
 
Понадобилось сделать процедуру для выполнения Save As...  
Решил её сделать не через обращение к элементам панелей управления (не люблю я это...), а просто написал в стандартном модуле процедурку:  
Sub FileSaveAs()  
  With Application.FileDialog(msoFileDialogSaveAs)  
     If .Show = 0 Then Exit Sub  
     ActiveWorkbook.SaveAs Filename:=.SelectedItems(1)  
  End With  
End Sub  
 
Вроде, всё работает... Но при указании имени уже существующего в директории файла два раза предупреждает о наличии файла:  
- первый раз этот вопрос задаёт FileDialog(msoFileDialogSaveAs)  
- второй раз - ActiveWorkbook.SaveAs  
 
Пришлось "давить" сообщения:  
Sub FileSaveAs()  
  With Application.FileDialog(msoFileDialogSaveAs)  
     If .Show = 0 Then Exit Sub  
     Application.DisplayAlerts = False  
     ActiveWorkbook.SaveAs Filename:=.SelectedItems(1)  
     Application.DisplayAlerts = True  
  End With  
End Sub  
 
Но как-то "грубо это" давить сообщения, а потом их разрешать...    
Может, есть какой-нибудь аргумент для метода SaveAs ? Поискал... Не нашёл.  
 
И ещё: а как методу SaveAs передавать из msoFileDialogSaveAs другие параметры сохранения: FileFormatl, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
ну попробуйте не saveas ,а filepicker
Живи и дай жить..
 
попробуйте ещё встроенное в Excel диалоговое окно - application.GetSaveAsFilename    
 
Вбейте в поиск слово GetSaveAsFilename - найдёте кучу примеров.
 
{quote}{login=Alex_ST}{date=28.10.2010 01:51}{thema=Процедура VBA для выполнения Save As}{post}Но как-то "грубо это" давить сообщения, а потом их разрешать... {/post}{/quote}  
Алекс, а что же здесь грубого? Ведь не смущает, например, Application.ScreenUpdating = False, а перед завершением процедуры возвращать в True?
 
Ух ты...  
Сколькими разными методами оказывается можно сделать одно и то же - получить полный путь с именем файла для его сохранения:  
Application.FileDialog(msoFileDialogSaveAs)  
Application.FileDialog(msoFileDialogFilePicker)  
Application.GetSaveAsFilename  
Спасибо, мужики!  
Ща поюзаем, покрутим, выясним, что удобнее и короче кодом...
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Да, совсем коротко если учесть, что юзверг может в любой момент нажать "Отмена", не получается.  
Но всё равно, есть из чего выбирать:  
Sub FileSaveAs1()  
  Dim Filename  
  Filename = Application.GetSaveAsFilename  
  On Error Resume Next  
  If Filename <> False Then ActiveWorkbook.SaveAs Filename:=Filename  
End Sub  
Sub FileSaveAs2()  
  With Application.FileDialog(msoFileDialogFilePicker)  
     If .Show = 0 Then Exit Sub  
     On Error Resume Next  
     ActiveWorkbook.SaveAs Filename:=.SelectedItems(1)  
  End With  
End Sub  
Sub FileSaveAs3()  
  With Application.FileDialog(msoFileDialogSaveAs)  
     If .Show = 0 Then Exit Sub  
     Application.DisplayAlerts = False  
     ActiveWorkbook.SaveAs Filename:=.SelectedItems(1)  
     Application.DisplayAlerts = True  
  End With  
End Sub
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Учитель Йодо как всегда на высоте: самый короткий код получается с предложенным им GetSaveAsFilename  
 
Было бы совсем коротко написать вообще всего одну строку:  
ActiveWorkbook.SaveAs Filename:=Application.GetSaveAsFilename  
но, к сожалению, если пользователь нажмёт "Отмена" когда ему скажут, что файл уже существует, он всё равно сохранится, но под именем FALSE.xls...
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Страницы: 1
Читают тему
Наверх