powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excell VBA Сохранить файл
13 сообщений из 13, страница 1 из 1
Excell VBA Сохранить файл
    #39629060
guzel09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Мне нужно чтобы при нажатии пользователем "Сохранить как" предлагалось нужное имя файла и диалоговое окно не высвечивалось два раза. Подскажите пожалуйста как это сделать.
...
Рейтинг: 0 / 0
Excell VBA Сохранить файл
    #39629071
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Workbook.BeforeSave Event
...
Рейтинг: 0 / 0
Excell VBA Сохранить файл
    #39629077
guzel09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Как раз туда и пишу. Все хорошо выводит. А потом во второй раз диалоговое окно выводит. Если Cancel=true, то вообще не сохраняет.
...
Рейтинг: 0 / 0
Excell VBA Сохранить файл
    #39629124
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guzel09А потом во второй раз диалоговое окно выводит.А описание ВСЕХ параметров обработчика прочитать не судьба?
...
Рейтинг: 0 / 0
Excell VBA Сохранить файл
    #39629244
guzel09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Excell VBA Сохранить файл
    #39629262
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Excell VBA Сохранить файл
    #39629268
guzel09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist, Спасибо

Теперь не три раза выходит диалоговое окно, а два. Что еще может вызывать его?
...
Рейтинг: 0 / 0
Excell VBA Сохранить файл
    #39629272
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guzel09Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' ...
ThisWorkbook.SaveAs fname
End SubГениально! а просто запихать введённое значение в Workbook.Name и дать методу Save отработать как положено - не?
...
Рейтинг: 0 / 0
Excell VBA Сохранить файл
    #39629274
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaWorkbook.Namereadonly
...
Рейтинг: 0 / 0
Excell VBA Сохранить файл
    #39629294
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Excell VBA Сохранить файл
    #39629302
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist , вот сижу и думаю, что правильнее - Dim IsNoEvents уровня модуля или Static IsNoEvents уровня процедуры...
...
Рейтинг: 0 / 0
Excell VBA Сохранить файл
    #39629330
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Excell VBA Сохранить файл
    #39629601
guzel09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist, Спасибо за помощь. Все работает.
Я думала SaveAsUI = False не дает вывести встроенное диалоговое окно.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excell VBA Сохранить файл
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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