Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/В место формул макрос. нужен совет усовершенствования - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » В место формул макрос. нужен совет усовершенствования (Макросы/Sub)
В место формул макрос. нужен совет усовершенствования
lebensvoll Дата: Пятница, 05.04.2019, 07:26 | Сообщение № 1
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Доброе утро многоуважаемые форумчане!!!
Завершил я свою задумку чтоб не паролить лист от нерадивых, спрятать все формулы в код.
Цитата
Да многие скажут что нужно было тогда самим кодом производить вычисления (как примерно это сделал krosav4ig, в одной из моих тем My WebPage ) Но, увы!!! Я так не умею и как говорил Александр _Boroda_, Я только учусь (пусть и в натяжку но пытаюсь).

Ну так вот.
Я бы не сказал что это проблема но работа все равно (сам понимаю) не корректна в самой работе + есть ряд неудобных моментов.
Не которые коды начинают свою работу лишь после того если я произведу какие нибудь изменения
Вот к примеру если я начинаю изменять "Разрушающая нагрузка, кН" (столбец 11 в таблице) то я вынужден куда нибудь или где нибудь что изменить/сделать чтоб про извелись вычисления.
Также имеются небольшие зависания если я ввожу какое то либо значение в таблицу (как бы это сказать в обдумывании действии кода что ли)

Вот теперь прошу вас подскажите как лучше усовершенствовать!?
Возможно мне нужно формулы прописать не на события на листе Worksheet_Change а на Worksheet_Calculate. Как вы думаете!?
Заранее 1000 извинений и огромнейшее спасибо за подсказки или решение
К сообщению приложен файл: 8282419.xlsm (63.2 Kb)


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Пятница, 05.04.2019, 07:54
 
Ответить
СообщениеДоброе утро многоуважаемые форумчане!!!
Завершил я свою задумку чтоб не паролить лист от нерадивых, спрятать все формулы в код.
Цитата
Да многие скажут что нужно было тогда самим кодом производить вычисления (как примерно это сделал krosav4ig, в одной из моих тем My WebPage ) Но, увы!!! Я так не умею и как говорил Александр _Boroda_, Я только учусь (пусть и в натяжку но пытаюсь).

Ну так вот.
Я бы не сказал что это проблема но работа все равно (сам понимаю) не корректна в самой работе + есть ряд неудобных моментов.
Не которые коды начинают свою работу лишь после того если я произведу какие нибудь изменения
Вот к примеру если я начинаю изменять "Разрушающая нагрузка, кН" (столбец 11 в таблице) то я вынужден куда нибудь или где нибудь что изменить/сделать чтоб про извелись вычисления.
Также имеются небольшие зависания если я ввожу какое то либо значение в таблицу (как бы это сказать в обдумывании действии кода что ли)

Вот теперь прошу вас подскажите как лучше усовершенствовать!?
Возможно мне нужно формулы прописать не на события на листе Worksheet_Change а на Worksheet_Calculate. Как вы думаете!?
Заранее 1000 извинений и огромнейшее спасибо за подсказки или решение

Автор - lebensvoll
Дата добавления - 05.04.2019 в 07:26
nilem Дата: Пятница, 05.04.2019, 08:35 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
lebensvoll, привет!
Может, отказаться от формул?
Например, вместо этого
[vba]
Код
If Target.Address = "$B$14" Then
    With Range("$P$28")
        .FormulaR1C1 = _
        "=MID(R[-14]C[-14],SEARCH(""-"",R[-14]C[-14],1)+1,2)"
        .Value = .Value
    End With
End If
[/vba]
попробуйте так
[vba]
Код
With Target
    If .Address = "$B$14" Then Range("P28").Value = Mid(.Value, InStr(.Value, "-") + 1, 2)
End With
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеlebensvoll, привет!
Может, отказаться от формул?
Например, вместо этого
[vba]
Код
If Target.Address = "$B$14" Then
    With Range("$P$28")
        .FormulaR1C1 = _
        "=MID(R[-14]C[-14],SEARCH(""-"",R[-14]C[-14],1)+1,2)"
        .Value = .Value
    End With
End If
[/vba]
попробуйте так
[vba]
Код
With Target
    If .Address = "$B$14" Then Range("P28").Value = Mid(.Value, InStr(.Value, "-") + 1, 2)
End With
[/vba]

Автор - nilem
Дата добавления - 05.04.2019 в 08:35
lebensvoll Дата: Пятница, 05.04.2019, 09:21 | Сообщение № 3
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
nilem, Спасибо за ответ!!!
Так в том то и дело Вы сейчас в самом коде производите вычисления.
Как и предлагал мне krosav4ig,

Но для меня это пока что очень сложно в понимании. Да и потом есть ряд других более сложных формул которые я лично не смогу сам прописать также грамотно как и вы...
Поэтому и прошу подсказки возможные варианты чтоб в этом же духе оформления.
но за посыл спасибо я постараюсь в подобном образе осуществить прописание


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Пятница, 05.04.2019, 09:30
 
Ответить
Сообщениеnilem, Спасибо за ответ!!!
Так в том то и дело Вы сейчас в самом коде производите вычисления.
Как и предлагал мне krosav4ig,

Но для меня это пока что очень сложно в понимании. Да и потом есть ряд других более сложных формул которые я лично не смогу сам прописать также грамотно как и вы...
Поэтому и прошу подсказки возможные варианты чтоб в этом же духе оформления.
но за посыл спасибо я постараюсь в подобном образе осуществить прописание

Автор - lebensvoll
Дата добавления - 05.04.2019 в 09:21
_Boroda_ Дата: Пятница, 05.04.2019, 09:51 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16674
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Чтобы при открытии файла запускался пересчет макроса, можно в модуле книги написать что-то типа
[vba]
Код
Private Sub Workbook_Open()
    Sheets("Протокол").Cells(1) = Sheets("Протокол").Cells(1)
End Sub
[/vba]

Еще у Вас есть строка
[vba]
Код
If Target.Cells.Count > 1 Then Exit Sub
[/vba]
Она находится ДО кода с пересчетом формул. То есть если мы меняем 2 (или больше) ячейки сразу, то пересчет не запускается, а происходит выход из макроса. Убиваем эту строку

Отключение реакции на события Вы написали, а где отключение обновления экрана и автопересчета?
Вот так напишите
[vba]
Код
'Прячем формулы с глаз долой
Application.ScreenUpdating = 0
Application.Calculation = 3
Application.EnableEvents = 0
'при изменение "Нумерация протокола" возраст "суток" (бетона/раствора) меняется
...
...
Application.EnableEvents = 1
Application.Calculation = 1
Application.ScreenUpdating = 1
End Sub
[/vba]
Поскольку Вы меняете значения в ячейках, то именно в этих изменяемых ячейках пересчет все равно происходить будет. А во всем остальном - нет
К сообщению приложен файл: 8282419_2.xlsm (63.8 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЧтобы при открытии файла запускался пересчет макроса, можно в модуле книги написать что-то типа
[vba]
Код
Private Sub Workbook_Open()
    Sheets("Протокол").Cells(1) = Sheets("Протокол").Cells(1)
End Sub
[/vba]

Еще у Вас есть строка
[vba]
Код
If Target.Cells.Count > 1 Then Exit Sub
[/vba]
Она находится ДО кода с пересчетом формул. То есть если мы меняем 2 (или больше) ячейки сразу, то пересчет не запускается, а происходит выход из макроса. Убиваем эту строку

Отключение реакции на события Вы написали, а где отключение обновления экрана и автопересчета?
Вот так напишите
[vba]
Код
'Прячем формулы с глаз долой
Application.ScreenUpdating = 0
Application.Calculation = 3
Application.EnableEvents = 0
'при изменение "Нумерация протокола" возраст "суток" (бетона/раствора) меняется
...
...
Application.EnableEvents = 1
Application.Calculation = 1
Application.ScreenUpdating = 1
End Sub
[/vba]
Поскольку Вы меняете значения в ячейках, то именно в этих изменяемых ячейках пересчет все равно происходить будет. А во всем остальном - нет

Автор - _Boroda_
Дата добавления - 05.04.2019 в 09:51
lebensvoll Дата: Пятница, 05.04.2019, 11:29 | Сообщение № 5
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, :o да уж...
Цитата
Отключение реакции на события Вы написали, а где отключение обновления экрана и автопересчета?

Я и не думал о том что нужно еще дополнять к отключению события два других :'(
Не я бы так просто не смог бы тем более о предложении nilem, но я по мере возможности постараюсь осуществить это предложение...
Потому как я понимаю:
Что если данный файл кто то захочет как то приоброзить исправить таблицу (удалит строки или же добавит) то все мои макросы полетят
Ну а также самому попытаться еще глубже окунуться в познание vba
СПАСИБО ВАМ всем ОГРОМНЕЙШЕЕ!!!
И за отзывчивость и за подсказки и за посыл к учебе....


Кто бы ты ни был, мир в твоих руках
 
Ответить
Сообщение_Boroda_, :o да уж...
Цитата
Отключение реакции на события Вы написали, а где отключение обновления экрана и автопересчета?

Я и не думал о том что нужно еще дополнять к отключению события два других :'(
Не я бы так просто не смог бы тем более о предложении nilem, но я по мере возможности постараюсь осуществить это предложение...
Потому как я понимаю:
Что если данный файл кто то захочет как то приоброзить исправить таблицу (удалит строки или же добавит) то все мои макросы полетят
Ну а также самому попытаться еще глубже окунуться в познание vba
СПАСИБО ВАМ всем ОГРОМНЕЙШЕЕ!!!
И за отзывчивость и за подсказки и за посыл к учебе....

Автор - lebensvoll
Дата добавления - 05.04.2019 в 11:29
Мир MS Excel » Вопросы и решения » Вопросы по VBA » В место формул макрос. нужен совет усовершенствования (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!