|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
14.01.2009, 22:17 | #1 |
Форумчанин
Регистрация: 30.07.2008
Сообщений: 125
|
Работа программы при изменении
Добрый день!!!
Подскажите пож.. почему код выполнянтся долго Private Sub Worksheet_Change(ByVal Target As Range) Dim r As String Dim a, b, x, m, h, c As Variant r = Target.Row If r < 4 Then Exit Sub m = 0: h = 0: c = 0 For m = 6 To 17 h = h + Cells(r, m) Next If h = 0 Then h = "" Cells(r, 18) = h c = Cells(r, 18) - Cells(r, 6) If c = 0 Then c = "" Cells(r, 20) = c a = 0: b = 0: x = 0 If Cells(r, 3) = "" Or Cells(r, 3) = 0 Then x = "": GoTo m1 a = Cells(r, 3) / 7 b = Cells(r, 18) / a If b > 14 Then x = "": GoTo m1 x = (15 - b) * a m1: Cells(r, 19) = x Cells(r, 21) = Cells(r, 18) * Cells(r, 23) * Cells(r, 24) Cells(r, 22) = Cells(r, 6) * Cells(r, 23) * Cells(r, 24) почему процедура невыполняется вся сразу и один раз,... а сначала одна его часть потом End Sub и заново еще другая его часть и т.д. и по этому кажется что процедура выполняется до бесконечности! Я думаю что цик м можно заменить какой нить функцией которая бы считала диапозон но я не знаю какой! Последний раз редактировалось Rom1k06; 14.01.2009 в 22:30. |
14.01.2009, 22:35 | #2 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
А это изменение запускает эту же процедуру снова, и т.д. до бесконечности... Попробуйте такой вариант: Код:
Цикл For m = 6 To 17: h = h + Cells(r, m): Next можно заменить на h=Application.WorksheetFunction.Sum (target.EntireRow.Cells(6).Resize(, 11)) или, что то же самое, на h=Application.WorksheetFunction.Sum (Cells(r, 6).Resize(, 11)) Там ещё много чего можно заменить. Вообще, большую часть макроса (если не весь) можно убрать, производя нужные вычисления на листе при помощи формул.
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
Макросы любой сложности на заказ. Мониторинг цен конкурентов Последний раз редактировалось EducatedFool; 14.01.2009 в 22:50. |
|
14.01.2009, 22:45 | #3 |
Форумчанин
Регистрация: 30.07.2008
Сообщений: 125
|
Спасибо за оперативность!
А то если я прописываю Selection_chenge то это не дает приимуществ а только добавляет гемор... приходится каждый раз возвращатся на ячейку для ее расчета... Я еще плохо умею распределять переменные но всеже String - это строка, по этому я и присвоил r как Srting. Еще вопрос зачем отключать обработку событий? и почему из-зи имени переменной все так тормозит? |
14.01.2009, 22:55 | #4 | ||||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
Он просто не работает... Ошибка возникает при вызове функции Cells(r, m), которой Вы в качестве параметра подсовываете текст вместо числа. Цитата:
Я же объяснил: Цитата:
Отключая события, Вы говорите Excel-ю НЕ ЗАПУСКАТЬ макрос Worksheet_Change (и другие подобные макросы, срабатывающие по событиям) до тех пор, пока не будет снова включена обработка событий. В этом случае макрос выполнится только один раз - как то и требовалось. Но проще переложить все вычисления на формулы. Цитата:
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
Макросы любой сложности на заказ. Мониторинг цен конкурентов Последний раз редактировалось EducatedFool; 14.01.2009 в 23:03. |
||||
15.01.2009, 19:17 | #5 |
Форумчанин
Регистрация: 30.07.2008
Сообщений: 125
|
Ок. Спасибо за объяснение!
В таблице были формулы но в ней работаю не только я Эта книга работает в общем доступе.. И те кто плохо валадеет Excel-ем постоянно боятся что чтото удалят и несмогут восстановить фомулы по этому я и убрал с таблици все формулы. |
15.01.2009, 19:29 | #6 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
Можно заблокировать отдельные ячейки с формулами, и т.п. Можно установить пароль на изменение диапазонов ячеек. В Вашем случае это будет наиболее оптимальным решением. А потом пусть ОНИ пробуют удалить формулы... |
|
18.01.2009, 18:14 | #7 |
Форумчанин
Регистрация: 30.07.2008
Сообщений: 125
|
Да безусловно существуе защита листа!!
Но при том что работа постоянно ведется в общем доступе я немогу его сначала распоролить (на началовыполнения макроса а потом опять запоролить! К томуже необходимо установить пароль на часть листа т.к. в другой части необходимо заносить данные, и необходимо еще разрешить группировку! Точнее распоролить получается Unprotect(123456789), а вот запоролить неполучается пишу Protect(123456789)- выдает ощибку! Как можно исправить? Я даже уверен что можно, может подскажещь? Последний раз редактировалось Rom1k06; 18.01.2009 в 18:16. |
18.01.2009, 18:47 | #8 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
К сожалению, с книгами в общем доступе ни разу не работал, так что посоветовать ничего не могу. Я, как только разрешил общий дjступ к книге, потерял доступ к коду VBA (сообщение Project is unviewable)... У метода Protect есть множество параметров - может, имеет смысл поэкспериментировать с ними... Будем ждать советов профессионалов. |
|
18.01.2009, 19:05 | #9 |
Форумчанин
Регистрация: 30.07.2008
Сообщений: 125
|
Доступ к коду теряется! Но зачем в нем копатся когда программа рабочая... Я сделал подругому,.. один файл для общего доступа а в другом отлаживал код по перым замечаниям и просто заменял модуль! Я видел довно на том форуме подобное соощение но найти его не смог!
Может стоит создать отдельную тему для обсуждения данной проблемы? Думаю не мне обному интерестны подобные проблемы! |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
При изменении размера шрифта в IE появляются линии | Константин_VRN | HTML и CSS | 7 | 12.01.2009 16:42 |
Как изменять размеры шрифта при изменении размеров canvas? | SkAndrew | Мультимедиа в Delphi | 2 | 07.12.2008 23:02 |
Текст при изменении размеров окна | Dj_smart | HTML и CSS | 2 | 25.11.2008 23:23 |
Мерцание окна при изменении размера | zaqer | Win Api | 2 | 30.07.2008 23:39 |
Потеря данных при изменении рамера раздела | Drandulet | Софт | 5 | 06.07.2008 07:52 |