Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   макрос "Сохранить как..." (http://forum.oszone.net/showthread.php?t=304731)

who 31-08-2015 16:17 2547921

макрос "Сохранить как..."
 
в моей книге-расчёте есть кнопка
на неё повешен макрос:

Код:

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 2547987

Проверил на Win 8.1 64 и Excel 64. Всё работает. При нажатии на кнопку предлагается сохранить документ. При нажатии Отмена выдается messageBox.

who 01-09-2015 08:25 2548123

Цитата:

Цитата corbis
Excel 64 »

Т.е. нужно ставить 64 битный excel? или у Вас другого года Office?

corbis 01-09-2015 14:11 2548258

Точно, забыл версию указать. У меня Office 2013. Попробуйте на виртуалке затестить разные версии и посмотреть, как будет работать.

who 27-05-2016 09:40 2638009

Может кому пригодится
сам методом проб и ошибок получил такой вариант:

Код:

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 2638123

Цитата:

Цитата who
видимо в OS Win 8.1 как-то по иному обзываются данные диалоговые окна »

Точно так же.
Цитата:

Const xlDialogSaveAs = 5

Member of Excel.XlBuiltInDialog

who 30-05-2016 08:17 2638655

Цитата:

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

честно говоря я совсем не понял, что именно вы тут написали... :)

Iska 30-05-2016 11:49 2638716

То, что константа «xlDialogSaveAs» — это и есть «5» в Вашем последнем коде .

who 30-05-2016 14:52 2638774

Охотно верю, но в текстовом виде почему-то VBA не воспринимает у меня
Код:

Application.Dialogs(xlDialogSaveAs).Show(wbName & "_" & today & ".xlsm")
:(

Iska 30-05-2016 18:38 2638860

who, упакуйте Вашу Рабочую книгу, содержащую данный проект, в архив и приложите к сообщению.

who 31-05-2016 08:16 2639024

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

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

Iska 31-05-2016 15:22 2639136

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


Время: 23:00.

Время: 23:00.
© OSzone.net 2001-