Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excell VBA Сохранить файл / 13 сообщений из 13, страница 1 из 1
12.04.2018, 13:09
    #39629060
guzel09
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excell VBA Сохранить файл
Здравствуйте.
Мне нужно чтобы при нажатии пользователем "Сохранить как" предлагалось нужное имя файла и диалоговое окно не высвечивалось два раза. Подскажите пожалуйста как это сделать.
...
Рейтинг: 0 / 0
12.04.2018, 13:19
    #39629071
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excell VBA Сохранить файл
Workbook.BeforeSave Event
...
Рейтинг: 0 / 0
12.04.2018, 13:23
    #39629077
guzel09
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excell VBA Сохранить файл
Akina,
Как раз туда и пишу. Все хорошо выводит. А потом во второй раз диалоговое окно выводит. Если Cancel=true, то вообще не сохраняет.
...
Рейтинг: 0 / 0
12.04.2018, 13:55
    #39629124
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excell VBA Сохранить файл
guzel09А потом во второй раз диалоговое окно выводит.А описание ВСЕХ параметров обработчика прочитать не судьба?
...
Рейтинг: 0 / 0
12.04.2018, 15:35
    #39629244
guzel09
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excell VBA Сохранить файл
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim fname As String
SaveAsUI = False
fname = Application.GetSaveAsFilename(CStr(Sheets(1).Range("A1").Value) & ".xls", "Excel Files (*.xls), *.xls")
ThisWorkbook.SaveAs fname
End Sub

Ну что я не правильно делаю? ((( Он все равно два диалогового окна выводит (с "моим" именем файла) и одно диалоговое окно (без имени файла вообще).
Заблудилась в трех соснах (((
...
Рейтинг: 0 / 0
12.04.2018, 15:54
    #39629262
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excell VBA Сохранить файл
guzel09ThisWorkbook.SaveAs fnameВот это вот вызывает повторно событие сохранить как. Вероятно, нужна доп.переменная. Попробуйте так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim IsNoEvents as boolean
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
if IsNoEvents then exit sub
Dim fname As String
SaveAsUI = False
fname = Application.GetSaveAsFilename(CStr(Sheets(1).Range("A1").Value) & ".xls", "Excel Files (*.xls), *.xls")
IsNoEvents = true
ThisWorkbook.SaveAs fname
IsNoEvents = false
End Sub
...
Рейтинг: 0 / 0
12.04.2018, 16:07
    #39629268
guzel09
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excell VBA Сохранить файл
The_Prist, Спасибо

Теперь не три раза выходит диалоговое окно, а два. Что еще может вызывать его?
...
Рейтинг: 0 / 0
12.04.2018, 16:13
    #39629272
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excell VBA Сохранить файл
guzel09Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' ...
ThisWorkbook.SaveAs fname
End SubГениально! а просто запихать введённое значение в Workbook.Name и дать методу Save отработать как положено - не?
...
Рейтинг: 0 / 0
12.04.2018, 16:13
    #39629274
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excell VBA Сохранить файл
AkinaWorkbook.Namereadonly
...
Рейтинг: 0 / 0
12.04.2018, 16:32
    #39629294
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excell VBA Сохранить файл
guzel09Теперь не три раза выходит диалоговое окно, а дваТак Вы сами второе показываете. Первое - встроенное. Второе - Ваше. Вы же первое не отменяете. Делайте так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim IsNoEvents As Boolean
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If IsNoEvents Then Exit Sub
Dim fname As String
SaveAsUI = False
fname = Application.GetSaveAsFilename(CStr(Sheets(1).Range("A1").Value) & ".xls", "Excel Files (*.xls), *.xls")
IsNoEvents = True
ThisWorkbook.SaveAs fname
Cancel = True
IsNoEvents = False
End Sub
...
Рейтинг: 0 / 0
12.04.2018, 16:37
    #39629302
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excell VBA Сохранить файл
The_Prist , вот сижу и думаю, что правильнее - Dim IsNoEvents уровня модуля или Static IsNoEvents уровня процедуры...
...
Рейтинг: 0 / 0
12.04.2018, 17:07
    #39629330
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excell VBA Сохранить файл
Akinaвот сижу и думаюВ данном конкретном случае, думаю, без разницы :) Но если будут еще процедуры, в которых надо будет применить - лучше уровня модуля.
Хотя опять в конкретно данном случае можно и без переменной вовсе:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim fname As String
SaveAsUI = False
fname = Application.GetSaveAsFilename(CStr(Sheets(1).Range("A1").Value) & ".xls", "Excel Files (*.xls), *.xls")
application.enableEvents = 0
ThisWorkbook.SaveAs fname
Cancel = True
application.enableEvents = 1
End Sub
...
Рейтинг: 0 / 0
13.04.2018, 08:42
    #39629601
guzel09
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excell VBA Сохранить файл
The_Prist, Спасибо за помощь. Все работает.
Я думала SaveAsUI = False не дает вывести встроенное диалоговое окно.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excell VBA Сохранить файл / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]