Страницы: 1 2 След.
RSS
Как вернуть при сохранении к 100% масштаб отображения?
 
Купил на свою голову iMac 27, теперь при открытии файлов каждый раз вручную увеличиваю до 150% масштаб.
С этим разобрался благодаря макросу с этого форума. Но, теперь все мои коллеги вынуждены при открытии уменьшать масштаб до 100% обратно. Это отнимает время теперь у них )))
Вопрос: как дописать макрос, что бы при закрытии файла (сохранении) масштаб сбрасывался до 100% ?
Помогите люди добрые коллегам моим ))
Код
'объявляем переменную нужного типа с поддержкой событий
Public WithEvents appALEX As Application
 
'при открытии файла Personal (=запуске excel) присваиваем этой переменной ссылку на приложение
Private Sub Workbook_Open()
  Set appALEX = Application
End Sub
 
'процедура, обрабатывающая событие открытия книги
Private Sub appALEX_WorkbookOpen(ByVal Wb As Workbook)
Dim str As String
 
str = Wb.Name
 
  If (str <> "PERSONAL.XLSB") Then
    &#39;MsgBox ("Открытие книги")
    &#39;MsgBox (str)
    Range("A1").Select
    Wb.Windows(1).Zoom = 75
  End If
End Sub
 
ActiveWindow.Zoom = 100
«Бритва Оккама» или «Принцип Калашникова»?
 
Так логично же - использовать событие appALEX_WorkbookBeforeClose, только вероятно с проверкой на сохранение. Что-то вроде(из простого):
Код
    If Wb.Saved Then
        Wb.Windows(1).Zoom = 100
    End If
ну или привлечь еще и appALEX_WorkbookBeforeSave, чтобы понимать, сохранялась ли вообще книга.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Я туповат )
Куда это записать? В тот же код?
 
Цитата
Сергей Жуков написал:
Куда это записать?
тогда читайте: Как отследить событие(например выделение ячеек) в любой книге?
там наглядно показано где искать разные события для своей appALEX
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Я строительство занимаюсь, для меня это совсем сложно.  
 
В модуль книги ("ЭтаКнига")
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ThisWorkbook.Activate
ActiveWindow.Zoom = 100
End Sub
«Бритва Оккама» или «Принцип Калашникова»?
 
Спасибо, попробую
 
Можно еще и так, 100% масштаба для активного окна (листа) в документе.
В документе может быть несколько листов. Если нужно все листы по 100% масштаба, нужно пройтись по ним циклом.
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ThisWorkbook.Windows(1).Zoom = 100
End Sub
«Бритва Оккама» или «Принцип Калашникова»?
 
Я бы все же к BeforeClose привязался. Иначе при каждом сохранении будет сбрасываться масштаб, что явно будет неудобно в работе. Что-то вроде:
Код
Private Sub appALEX_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
    Wb.Windows(1).Zoom = 100
End Sub
свойство Zoom не нуждается в сохранении и будет сохранено именно перед закрытием и при следующем открытии должно остаться таким, каким мы его задали в коде.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
будет сохранено именно перед закрытием
Дмитрий, похоже, что так не сработает. У вас не сохраняется 100% формат, а сохранять надо.
А вот так точно работает
Код
Option Explicit
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
    Dim meProp As CustomProperty
    For Each meProp In ThisWorkbook.Worksheets(1).CustomProperties
        If meProp.Name = "Zoom_Save" Then ThisWorkbook.Windows(1).Zoom = meProp: meProp.Delete
    Next
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    ThisWorkbook.Worksheets(1).CustomProperties.Add "Zoom_Save", ThisWorkbook.Windows(1).Zoom
    ThisWorkbook.Windows(1).Zoom = 100
End Sub
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
У вас не сохраняется 100% формат,
специально попробовал - сохранился. Сам сначала думал, что он не сохраняется. Наверное, от версии Excel зависит. Тогда уж так(заготовка все равно осталась):
Код
Dim IsClose As Boolean

Private Sub appALEX_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
    If Wb.Saved Then
        Wb.Windows(1).Zoom = 100
        IsClose = True
        Application.EnableEvents = 0
        Wb.Save
        Application.EnableEvents = 1
    End If
End Sub

Private Sub appALEX_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If IsClose Then
        Wb.Windows(1).Zoom = 100
    End If
    IsClose = False
End Sub

а вот событие AfterSave есть далеко не у всех :)
Изменено: Дмитрий(The_Prist) Щербаков - 13.11.2020 13:32:42
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
А может кто то написать общий код??
при открытии увеличение на 150 а при сохранении возврат на 100 процентов.
или просто ниже скопировать надо?
 
Цитата
Сергей Жуков написал:
А может кто то написать общий код??
конечно кто-то может. но надо учиться делать вещи самостоятельно, раз собрались ими пользоваться и нет под рукой специалиста, который по первому требованию будет все огрехи исправлять. Так хоть какое-то понимание процесса будет.
Мой код можете просто вставить после строки:
Код
Public WithEvents appALEX As Application
оставив все остальные имеющиеся
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий, если используя ваш код, сохранить файл, а потом выйти без сохранения, сохранится ли 100% масштаба? По-моему IsClose не даст сохранить.
Цитата
Дмитрий(The_Prist) Щербаков написал:
AfterSave есть далеко не у всех
а где его нет?
Цитата
Дмитрий(The_Prist) Щербаков написал:
Мой код можете просто вставить после строки:
мой так же.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
а где его нет?
например, в Excel 2010...Если мне не изменяет память, то событие Workbook_AfterSave появилось начиная с 2016, но не раньше.
Цитата
bedvit написал:
По-моему IsClose не даст сохранить
почему? Он просто определяет происходит ли сохранение именно перед закрытием. Если сохранения перед закрытием не было - очевидно, что и масштаб менять нет смысла, т.к. он не сохранится без сохранения книги. А сохранять принудительно в коде не очень правильно. Если же на момент закрытия книга была уже ранее сохранена - то в BoforeColse применится масштаб и книга после этого будет сохранена(ибо она и так сохранена и это не будет некорректным).
Цитата
bedvit написал:
мой так же.
но надо аккуратнее - не все так же :) в одном надо не копировать строку Option Explicit.
Изменено: Дмитрий(The_Prist) Щербаков - 13.11.2020 14:35:59
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
например, в Excel 2010...Если мне не изменяет память, то событие Workbook_AfterSave появилось начиная с 2016, но не раньше.
есть и в 2010
Цитата
Дмитрий(The_Prist) Щербаков написал:
почему?
потому, что IsClose = True только при закрытии книги. Я сохраняю книгу IsClose не срабатываеш, масштаб не равен 100%, далее закрываю книгу и на вопрос сохранить ли, говорю нет. И книга остается с предыдущем сохранением и с масштабом не равным 100%. Выходит условия задачи не выполняются.
Цитата
Дмитрий(The_Prist) Щербаков написал:
надо не копировать строку Option Explicit.
Это верно. Она нужна в одном экземпляре.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
IsClose = True только при закрытии книги
ну да. А как должно-то быть? :) Человек же пишет - делает масштаб больше ДЛЯ СЕБЯ, т.к. на своем ПК удобнее с большим масштабом. Значит не надо перед каждым сохранением масштаб менять - надо только перед закрытием. Об этом написано.
Цитата
bedvit написал:
закрываю книгу и на вопрос сохранить ли, говорю нет
ну а тут я уже написал - по мне, так все логично. Если нажали "Не сохранять" - то зачем менять масштаб? Ведь поменяв масштаб - мы должны и книгу потом сохранить, чтобы при открытии это изменение тоже сохранилось. Но пользователь же не просто так "Нет" нажал, верно? Он не хочет сохранять внесенные изменения(вдруг где накосячил и сохранение ну никак не нужно), а мы ему такую падлянку кидаем, сохраняя все равно все изменения, но зато и масштаб выставляя. Молодцы какие :) Что по мне - это не правильно.

В общем не хочу больше спорить именно об этом - у Вас своя позиция, у меня своя. Я Вас не заставляю использовать мой код - есть автор, пусть решает как ему надо. Я просто привел примеры, рассказал некоторых нюансы и все. А так нюансов по сути там куда больше и кода должно быть больше.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
bedvit написал:
есть и в 2010
Был не прав. Возможно, зависит от сборки или обновлений. Потому что в моем 2010(который раньше был установлен) не было этого события точно, но я его и не обновлял ни разу в жизни :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
А как должно-то быть?  
должно быть при сохранении, при закрытии книги масштаб не меняется.
Цитата
Дмитрий(The_Prist) Щербаков написал:
надо только перед закрытием.
перед закрытием может книга не сохранятся.
Цитата
Дмитрий(The_Prist) Щербаков написал:
Если нажали "Не сохранять" - то зачем менять масштаб?
он УЖЕ сохранился, при первом сохранении.
Цитата
Дмитрий(The_Prist) Щербаков написал:
сохраняя все равно все изменения, но зато и масштаб выставляя. Молодцы какие  Что по мне - это не правильно.
здесь не понял вашу мысль. Я как раз и говорю, при закрытии книги он не захочет сохранять данные, и останется масштаб от первого сохранения, когда он нажал просто сохранить, а не закрыть книгу.

Цитата
Дмитрий(The_Prist) Щербаков написал:
у Вас своя позиция, у меня своя.
позиция здесь не причем, я говорю что при вашем коде, пользователь откроет книгу с масштабом 150%
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
должно быть при сохранении, при закрытии книги масштаб не меняется
это уже Вы сами придумали :) Автор это просил:
Цитата
Сергей Жуков написал:
как дописать макрос, что бы при закрытии файла (сохранении) масштаб сбрасывался до 100% ?
сохранение в скобках, т.е. закрытие явно в приоритете или вообще имеется ввиду сохранение только при закрытии :)
Даже чисто логически представим. Вы для себя любимого сделали макрос, который при открытии файла делает удобный Вам масштаб, в данном случае 150%. Т.е. Вам работать в книге с ним УДОБНО. Если следовать Вашей логике, то при каждом сохранении книги в процессе работы с ней мы будем сбрасывать масштаб. Я вот часто сохраняю файл в процессе работы с ними, а не только перед закрытием...И что получим? Сохранили файл - изменился масштаб на 100%. Надо опять выставлять на 150%, чтобы удобно продолжать работать. В чем оптимизация процесса?
Но. Я уже сказал - автору решать. Может он сохраняет файл всего один раз перед закрытием.

Цитата
bedvit написал:
здесь не понял вашу мысль
ну чессслово. Ну читайте свои вопросы и мои ответы. Это был ответ на вот что:
Цитата
bedvit написал:
Я сохраняю книгу IsClose не срабатываеш, масштаб не равен 100%, далее закрываю книгу и на вопрос сохранить ли, говорю нет. И книга остается с предыдущем сохранением и с масштабом не равным 100%. Выходит условия задачи не выполняются
так понятнее? Если опять же логическую цепочку вопрос-ответ сохранить? Я написал, почему у меня не сохраняется. Потому что я считаю неправильным сохранять книгу, если нажато было не сохранять. Да, есть недостатки в этом. Но я этого и не отрицал.
Но что-то Вы явно делаете не так. Если сначала сохранить книгу, а потом без изменений закрыть - то мой код выставит 100% масштаб. За это отвечает блок:
Код
    If Wb.Saved Then
        Wb.Windows(1).Zoom = 100
        IsClose = True
        Application.EnableEvents = 0
        Wb.Save
        Application.EnableEvents = 1
    End If
Wb.Saved - будет true, если книга не нуждается в сохранении. А если оно false - значит в книге после последнего сохранения были внесены изменения. А т.к. у Вас появляется запрос на сохранение после сохранения - значит были какие-то изменения(возможно, есть какие-то имена или летучие функции).
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий, я когда пишу обычно тестирую код.
Ваш тестировал тоже, а вы мой?
Цитата
Дмитрий(The_Prist) Щербаков написал:
И что получим? Сохранили файл - изменился масштаб на 100%. Надо опять выставлять на 150%, чтобы удобно продолжать работать.
посмотрите мой код внимательнее, там ничего не надо делать вручную. Перед сохранение выставляется 100%, после сохранения, тот который был раньше (150%)
Цитата
Дмитрий(The_Prist) Щербаков написал:
Я написал, почему у меня не сохраняется. Потому что я считаю неправильным сохранять книгу, если нажато было не сохранять.
Дмитрий, ну почитайте внимательнее, я об этом же тоже пишу.
Цитата
Дмитрий(The_Prist) Щербаков написал:
Если сначала сохранить книгу, а потом без изменений закрыть - то мой код выставит 100%
пробовал - выставляет 150%, поэтому и написал. Протестируйте сами.
Цитата
Дмитрий(The_Prist) Щербаков написал:
За это отвечает блок:
этот блок запускается только при ЗАКРЫТИИ книга, а не при СОХРАНЕНИИ, поэтому IsClose = False и сохраняется книга со 150%, а потом закрывается без сохранения и остается 150%

Что делаю по шагам:
1. Открываю файл
2. Вставляю ваш код
Скрытый текст

3. Выставляю масштаб 150%
4. Сохраняю файл
5. Печатаю текст в любой ячейке
6. Закрываю файл без сохранения
7. Открываю файл - масштаб 150% а должно быть 100%

Что делаю не так?
«Бритва Оккама» или «Принцип Калашникова»?
 
Ребята, ну не спорьте! Предмет спора не определен по причине разных версий и обновлений, ТС на этот счет молчит, видимо хочет один универсальный вариант для всего... возможно он в сетке в качестве пользователя сидит, а админ его не пускает, чтобы все не поломать..   а ТС не вникает как что и откуда берется и не прилагает своих усилий... ему нужно
Цитата
Сергей Жуков написал:
просто ниже скопировать надо
возможно это результат ЕГЭ у ТС? А с учетом того, что
Цитата
Сергей Жуков написал:
Я строительство занимаюсь, для меня это совсем сложно
когда-то он применит код, не понимая что этот код делает, и... Хорошо, если он тротуарную плитку перекладывает, а не собирается многоэтажные дома строить...Не замечали, что на форуме в последнее время очень часто ищут готовые решения, а не знания и пути к решению задач? ;)
P.S. Масштаб изображения - не очень крутая проблема для пользователей, в соц.сетях фотки увеличивают, скачивают и пр... :)
Изменено: _Igor_61 - 13.11.2020 16:03:29
 
Цитата
bedvit написал:
5. Печатаю текст в любой ячейке
6. Закрываю файл без сохранения
:D  прям улыбнули
блин, ну вот угадайте что делаете неправильно? Читаете по диагонали  :D Я же написал - ДА(это уже третий раз ДА), что это так задумано, ибо после последнего сохранения были внесены еще изменения, а файл не был сохранен. А в этом случае у меня ЗАВЕДОМО не меняется масштаб. Ну я не знаю как еще-то написать, чтобы Вы уже прочитали именно то, что написано, а не то, что Вы хотите чтобы было там написано. Посты 18 и 21. Ну серьезно, там два раза написано что так и должно быть с моими кодами.

Ваши коды смотрел. Да, все с ними хорошо. Только если у автора версия Excel, в которой есть событие AfterSave...Без него Ваш код просто изменит масштаб и не вернет прежний. Об этом речь. Или я чего-то не увидел, что это опровергает?
Поэтому и ждем автора, ибо у него все козыри на руках.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
.Без него Ваш код просто изменит масштаб и не вернет прежний. Об этом речь. Или я чего-то не увидел, что это опровергает?
Все верно, но я не работал в версии Excel, где нет AfterSave. Такой возможности не исключаю, но как по мне это редкость.
Цитата
Дмитрий(The_Prist) Щербаков написал:
так задумано, ибо после последнего сохранения были внесены еще изменения, а файл не был сохранен. А в этом случае у меня ЗАВЕДОМО не меняется масштаб.
Ясно, всегда сохраняем масштаб 150% а далее, в одном случае меняем на 100%, а в другом под шкаф кладем (оставляем 150%)? Ну если так задумано, то ОК. :) Может ТС так и нужно. Я подумал, что нужно всегда 100%, так и сделал.
Разобрались и предложили ТС два варианта, пусть выбирает. Ну и научится немного разбиратся в своих макросах ему пожелаю, потому как _Igor_61, правильно отметил, что не зная, можно много чего нагородить.
Изменено: bedvit - 13.11.2020 16:27:12
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
как по мне это редкость
ох, я занимаюсь разработкой приложений и слова Ваши да Богу бы в уши  :D  На деле у очень многих компаний до сих пор 2007. Вот так вот...
Благо, у нас тут один человек и как я понял он делает для себя, поэтому у него есть из чего выбирать. Ваш вариант да - предпочтительнее. Вопрос только в совместимости.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
На деле у очень многих компаний до сих пор 2007
!!! И даже 2003 хоть и редко...но есть... И считают, и он работает.... Да, а когда "инженер,работающий в строительстве" рассчитает фундамент дома, не понимая, как его (фундамент) нужно рассчитывать кто ответит? Этот "Инженер"? Или "Microsoft"? Или провайдер сети? Подумаешь - сбой связи произошел, а расчеты в облаке производились... Никто не виноват, только облако...Но дом (или самолет) упал.., Возможно, я не прав, но в нашей стране (пусть будет не в стране а территории) почему-то кто-то запретил применять знания... Я не о политике, а о специалистах
 
Ради объективности все же отмечу, что данная задача не связана напрямую с профильными расчетами ТС. Возможно свой функционал специалист ведет со знанием, а на всякие свистелки и пер.. удобства не связанные со специализацией забивает сильно не вникает по причини не критичности (самолет не упадет, и дом стоять будет). Хотя нам, как помогающим, всегда желателен ТС-профи и в Excel, VBA
«Бритва Оккама» или «Принцип Калашникова»?
 
Добрый день, коллеги! Премьера события AfterSave состоялась в Excel 2010.
Владимир
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Dim IsClose As Boolean Private Sub appALEX_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)    If Wb.Saved Then        Wb.Windows(1).Zoom = 100        IsClose = True        Application.EnableEvents = 0        Wb.Save        Application.EnableEvents = 1    End IfEnd Sub Private Sub appALEX_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)    If IsClose Then        Wb.Windows(1).Zoom = 100    End If    IsClose = FalseEnd Sub
Скопировал как вы сказали. Теперь перестало увеличиваться при открытии до 150%. Вобще весь смысл потерялся.
Спасибо!
Страницы: 1 2 След.
Наверх