Войти

Показать полную графическую версию : макрос "Сохранить как..."


who
31-08-2015, 16:17
в моей книге-расчёте есть кнопка
на неё повешен макрос:


Private Sub CommandButton35_Click()
Dim wb As Workbook, wbName, wbPath, today As String
Set wb = Excel.Application.ActiveWorkbook
wbName = Sheets(1).Cells(2, 2)
today = Date
ttime = Format(Time, "hh-mm")
wbPath = wb.Path
Sheets(1).Cells(3, 1) = wbPath & "\" & wbName & "_" & today & "_" & ttime & ".xlsm"
If Not Application.Dialogs(xlDialogSaveAs).Show(wbName & "_" & today & ".xlsm") Then
MsgBox "Сохранение отменено!", vbExclamation
End If
End Sub
При пошаговом выполнении пропускается именно выдача диалогового окна без всякой ругани на ошибки, причём даже если опустить в строке:

If Not Application.Dialogs(xlDialogSaveAs).Show(wbName & "_" & today & ".xlsm") Then

это:

(wbName & "_" & today & ".xlsm").

Не работает именно

If Not Application.Dialogs(xlDialogSaveAs).Show

раньше был комп win7 x32 и там всё отлично работало:
выдавалось диалоговое окно "Сохранить как..." и в случае нажатия "Отмена" выдавалось сообщение "Сохранение отменено!"
теперь комп поменяли стоит win8.1 x64 и данный макрос просто выдаёт сообщение "Сохранение отменено!" и ничего не сохраняется
может нужно куда подключить какие-нибудь дополнительные библиотеки?

PS: офис был и остался тот же MS Office 2007 из того же самого дистрибутива.

corbis
31-08-2015, 19:25
Проверил на Win 8.1 64 и Excel 64. Всё работает. При нажатии на кнопку предлагается сохранить документ. При нажатии Отмена выдается messageBox.

who
01-09-2015, 08:25
Excel 64 »
Т.е. нужно ставить 64 битный excel? или у Вас другого года Office?

corbis
01-09-2015, 14:11
Точно, забыл версию указать. У меня Office 2013. Попробуйте на виртуалке затестить разные версии и посмотреть, как будет работать.

who
27-05-2016, 09:40
Может кому пригодится
сам методом проб и ошибок получил такой вариант:

Private Sub CommandButton35_Click()
Dim wb As Workbook, wbName, wbPath, today As String
Set wb = Excel.Application.ActiveWorkbook
wbName = Sheets(1).Cells(2, 2)
today = Date
ttime = Format(Time, "hh-mm")
wbPath = wb.Path
Sheets(1).Cells(3, 1) = wbPath & "\" & wbName & "_" & today & "_" & ttime & ".xlsm"
If Not Application.Dialogs(5).Show(wbName & "_" & today & ".xlsm") Then
MsgBox "Сохранение отменено!", vbExclamation
End If
End Sub

видимо в OS Win 8.1 как-то по иному обзываются данные диалоговые окна и нужна какая-нибудь заплатка для VBA 2007 года

Iska
27-05-2016, 17:44
видимо в OS Win 8.1 как-то по иному обзываются данные диалоговые окна »
Точно так же.
Const xlDialogSaveAs = 5

Member of Excel.XlBuiltInDialog

who
30-05-2016, 08:17
Цитата who:
видимо в OS Win 8.1 как-то по иному обзываются данные диалоговые окна »
Точно так же.
Цитата:
Const xlDialogSaveAs = 5
Member of Excel.XlBuiltInDialog »
честно говоря я совсем не понял, что именно вы тут написали... :)

Iska
30-05-2016, 11:49
То, что константа «xlDialogSaveAs» — это и есть «5» в Вашем последнем коде .

who
30-05-2016, 14:52
Охотно верю, но в текстовом виде почему-то VBA не воспринимает у меня
Application.Dialogs(xlDialogSaveAs).Show(wbName & "_" & today & ".xlsm")

:(

Iska
30-05-2016, 18:38
who, упакуйте Вашу Рабочую книгу, содержащую данный проект, в архив и приложите к сообщению.

who
31-05-2016, 08:16
как бы странно это не было, но после очередной замены "(5)" на "(xlDialogSaveAs)" всё заработало...
и ведь я не набираю "xlDialogSaveAs" ручками, а подставляю то что предлагает редактор
может были проблемы с содержимым "(wbName & "_" & today & ".xlsm")" и диалоговое окно просто не могло их отобразить...

извините за отнятое время...

Iska
31-05-2016, 15:22
who, трудно сказать, что было. Константа определена в объектной библиотеки самого Excel, в зависимостях эту библиотеку даже нельзя отключить «ручками» (чтобы имя константы не работало)… Ну, заработало — вот и славненько.




© OSzone.net 2001-2012