Страницы: 1
RSS
Проблемы с макросом сохранения книги, запущенного с панели быстрого доступа
 
У меня есть макрос сохранения книги с именем из ячейки, с выводом диалогового окна. Макрос нормально работает и сохраняет, если его запускать из вкладки "макросы". Мне нужно, чтобы этот макрос располагался на панели быстрого доступа, т.к. листов много и делать на каждый лист кнопку сохранения не есть хорошо. Вот тут то и начинаются проблемы. При нажатии кнопки макроса на панели быстрого доступа, выходит диалоговое окно с подставленным именем из ячейки, а при нажатии сохранить появляется еще одна книга и так каждый раз. Не могу понять в чем может быть дело...
Код
Sub MySaveName1()
    Dim sName As Variant
    sName = Application.GetSaveAsFilename(ThisWorkbook.Path & "\" & Range("b2") & ".xlsm", "Excel files (*.xlsm),*.xlsm")
    On Error Resume Next
    If sName <> False Then ThisWorkbook.SaveAs sName
End Sub
 
Не много уточню. При первом нажатии на кнопку сохранения, на панели быстрого доступа, книга сохраняется нормально, с новым именем. При последующем нажатии на кнопку, книга сохраняется и открывается книга, из которой было произведено последнее сохранение.
Пример: Предположим есть книга с названием "1.xlsm". В ней нажимаю кнопку и документ сохраняется с новым названием "2.xlsm", при этом книга "1.xlsm" как и положено, закрывается.
Далее нажимаю кнопку, уже в книге "2.xlsm", и при этом открывается книга "1.xlsm". Возможно сумбурно объяснил, но как то так...)
 
ThisWorkbook - это книга, где располагается макрос.

А где находится ваш макрос, который привязан к кнопке
на панели быстрого доступа?
 
Посмотрите здесь, может быть поможет http://excelvba.ru/code/SaveActiveSheet
Почему это я ничего не могу? Я могу быть плохим примером...  ;)
 
Просто замените ThisWorkbook на ActiveWorkbook
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Макрос находится в модуле, в этой же книге(не в персональной книге!). Пробовал менять ThisWorkbook на ActiveWorkbook, еще до того как вы написали, результат точно такой же, как я описал выше. В выложенном файле, если есть желание, можете сами убедиться(хотя утверждать не могу, может быть у меня что нибудь не то с екселем).
То Дмитрий Синицын: Там уже был.., только вот мне нужно сохранить всю книгу, с именем на определенном листе, а там сохранение конкретного листа... Вообще где только уже не был..), Хотел было использовать: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean), но есть трудности с тем, что окно сохранения выскакивает два раза.. Короче ниче понять не могу..)
Изменено: SANA555 - 26.02.2013 22:37:54
 
А Вы на ПБД хотите вынести кнопку, вызывающую макрос, находящейся только в какой-то конкретной книге, а не во всегда открытой Personal?
А что тогда кнопка будет делать, когда книга, к макросу которой она прицеплена, не открыта? Ошибку выдавать?
Да и при обращении к диапазону из стандартного модуля нужно ещё и лист, где этот диапазон находится, указывать.
Так что, наверное, макрос для кнопки нужно засовывать в модуль книги Personal и записывать его так (у меня 2003-й, но ведь не принципиально):
Код
Sub MySaveName1()
   Dim sName
   sName = Application.GetSaveAsFilename(ActiveWorkbook.Path & "\" & ActiveWorkbook.Worksheets(1).Range("b2") & ".xls")
   If VarType(sName) = vbBoolean Then Exit Sub
   ActiveWorkbook.SaveAs sName
End Sub
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Я новичок, многое не знаю...) Да, логично, что то я не подумал. Поместил в Personal, все заработало, спасибо. Но, данная книга будет использоваться на других компьютерах тоже, если макрос будет в Personal, то на других ведь компьютерах она не будет работать, как тогда быть?
Может как нибудь в виде надстройки, но никогда их не делал, т.е. сохранить как надстройка то знаю, ума большого не надо, формат файла выбрать...), а вот как сделать чтобы кнопочка обращалась к макросу в надстройке(на уме только одно - Кал, ну в смысле call...), только не знаю как применить), тут нет опыта... Или это не выход?
Изменено: SANA555 - 28.02.2013 14:24:11
 
Вот тем-то 2003-й и хорош и многие, как и я, на нём до сих пор содят, что там можно достаточно просто программно создавать кнопки на панелях управления, например, по событию Workbook_Open и удалять их по событию Workbook_BeforeClose.
А в этом гнусном риббон-интерфейсе, насильно везде внедряемом начиная с офиса-2007, программно кнопки создаются только в одном месте - в группе "Надстройки"  на вкладке "Разработчик".
НЕНАВИЖУ мелко-мягких с их риббон-интерфейсом, в котором ничего толком программно настроить нельзя!
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Страницы: 1
Читают тему
Наверх