Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 20.05.2008, 17:07   #51
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Ребята!!!
Я SAS888 уже замучал, вроде все у меня получилось, не пойму только, почему если разкоментирую строку(в аттаче синим шрифтом) перестает работать ....
With Sh.Range("I10:I15").Offset(iCount& * 48)
.FormulaR1C1 = "=IF(COUNTIF(НАКЛ!R2C255:R619C2 55,R[-7]C)>0,R[-7]C,0)"
'.Value = .Value
End With

З. Ы.
SAS888
Заработало, когда я заменил
If Sheets(.).Cells(i, "I") <> "" And Sheets(.).Cells(i, "I") <> 0 _
на
If Sh.Cells(i, "I") <> "" And Sh.Cells(i, "I") <> 0 _

Фу, все заработало, нужно было
.Value = .Value
поставить в самом конце кода поиска от SAS888
Но меня терзают смутные сомнения, что Тема, будет иметь продолжения!!

Последний раз редактировалось valerij; 20.05.2008 в 23:26.
valerij вне форума
Старый 21.05.2008, 05:40   #52
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Желаю удачи.
Но вообще-то, не рационально с помощью VBA в ячейку листа вставлять формулу (Cells(x, y).FormulaR1C1=...), затем использовать результат ее выполнения, а саму формулу уничтожать (.Value=.Value). Вы это часто применяете в своем коде.
Не лучше ли сразу в VBA вычислять все, что требуется и результат вставлять в нужную ячейку? Например, Cells(x, y) = Application.CountIf(...)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 21.05.2008, 13:30   #53
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Но вообще-то, не рационально с помощью VBA в ячейку листа вставлять формулу (Cells(x, y).FormulaR1C1=...), затем использовать результат ее выполнения, а саму формулу уничтожать (.Value=.Value). Вы это часто применяете в своем коде.
Не лучше ли сразу в VBA вычислять все, что требуется и результат вставлять в нужную ячейку? Например, Cells(x, y) = Application.CountIf(...)
SAS888!
Это для меня, пока, темень, но обязательно начну разбираться!
Огромаднейшее, С П А С И Б О!
valerij вне форума
Старый 22.05.2008, 10:31   #54
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Желаю удачи.
Но вообще-то, не рационально с помощью VBA в ячейку листа вставлять формулу (Cells(x, y).FormulaR1C1=...), затем использовать результат ее выполнения, а саму формулу уничтожать (.Value=.Value). Вы это часто применяете в своем коде.
Не лучше ли сразу в VBA вычислять все, что требуется и результат вставлять в нужную ячейку? Например, Cells(x, y) = Application.CountIf(...)
SAS888
А мона реальный, рабочий пример, не знаю с какого бока подойти.

Кстати, (.Value=.Value), мне пришлось убрать, т. к. вычисления суммы найденных № накл. происходят только в одном числе, а предыдущее значение, сбрасывается в ноль.
Я думал, что (.Value=.Value) это скрытие формул?
valerij вне форума
Старый 22.05.2008, 11:22   #55
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Например,
Код:
Range("D5").Value = Range("D5").Value
эквивалентно тому, что скопировать ячейку "D5" и при помощи "специальной вставки" в эту же ячейку вставить только значение. В результате, если ячейка содержала формулу (ссылку, связь и т.п.), то она удалится, а в ячейке останется только значение.
Теперь по поводу использования формул листа.
Пусть, например, требуется подсчитать количество ячеек в диапазоне "A1:A20", содержащих число "12345" и результат поместить в ячейку "D3".
Вы используете
Код:
Range("D3").Select
    ActiveCell.FormulaR1C1 = "=COUNTIF(R[-2]C[-3]:R[17]C[-3],12345)"
    Range("D3").Value = Range("D3").Value
Т.е. выбираете ячейку "D3" (метод Select по-возможности лучше не использовать), затем вставляете в эту ячейку формулу рабочего листа (СЧЕТЕСЛИ...), а затем, получив результат вычисления, удаляете из ячейки "D3" формулу, оставляя полученное значение.
Рациональнее сделать так:
Код:
Range("D3") = Application.CountIf(Range("A1:A20"), "12345")
P.S. В предложенном мной коде (см. пост №43), как Вы, наверное, заметили, как раз используется условие "если ячейка содержит формулу". Это я сделал для того, чтобы отличать данные введенные вручную от данных, полученных в результате поиска по Вашим формулам (извините, но Ваш исходный файл был построен именно таким образом). Поэтому, после того, как Вы применяете .Value=.Value, мой макрос ничего не находит (формул-то нет). И теперь, если Вы будете "выбрасывать" формулы из рабочего диапазона, то потребуется изменить и условие поиска в макросе "Sum".
Успехов!
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 22.05.2008, 17:22   #56
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

SAS888
Новая проблема, вкл. защиту листов, предварительно в формате-защита снял галки с ячеек где выводятся № и сумма, только ввел №, пишет:
"Run-time error '1004'
Ячейка или диаграмма защищена от изменений.
Чтобы изменить защищенную ячейку или диаграмму, снимите защиту при помощи команды "Снять защиту листа" (меню "Сервис", подменю "Защита"). Может потребоваться ввод пароля."
И желтым цветом указывает на
Sh.Cells(b + 1, "I") = Summa

Без защиты все ОК, но защита мне нужна, а че?
valerij вне форума
Старый 23.05.2008, 05:47   #57
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Возможно, причина в следующем:
При защите листа, Вы применяете UserInterfaceOnly:=True. Это позволяет макросу вносить изменения в защищенные ячейки листа, в то время как пользователь такой возможности не имеет. Все правильно. Но у этого метода есть одна тонкость: эта возможность не сохраняется, т.е. UserInterfaceOnly:=True необходимо повторять при каждом открытии файла.
Проверить, так это или нет, можно следующим образом: откройте файл, запустите ту процедуру, которая приводит к возникновению описанной Вами ошибке (просто, убедимся, что она возникает). Теперь снимите защиту со всех листов (с помощью имеющегося у Вас макроса) и установите заново (опять же макросом, который использует UserInterfaceOnly:=True). Запустите "проблемную" процедуру снова. Повторяется ошибка?
Если причина в этом, то по событию открытия книги нужно снимать и вновь устанавливать защиту листов. При применении UserInterfaceOnly:=True обычно так и делается.

P.S. Это то, что касается работы макроса. Но я так и не понял, что происходит. Вы говорите, что
Цитата:
только ввел №, пишет:...
А затем:
Цитата:
желтым цветом указывает на
Sh.Cells(b + 1, "I") = Summa
Так все-таки, когда возникает ошибка? При вводе с клавиатуры значения в ячейку (у которой снята защита при защищенном листе), или при работе макроса?
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 23.05.2008 в 06:02. Причина: Добавлено
SAS888 вне форума
Старый 23.05.2008, 15:11   #58
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Но у этого метода есть одна тонкость: эта возможность не сохраняется, т.е. UserInterfaceOnly:=True необходимо повторять при каждом открытии файла.
Все именно, так, фух отпала эта проблема.
SAS888
Сегодня пробовал на офисном ПК -1.8 х 384озу(на моем 2-х яд. все летает), выявилось вот, что
Идут тормоза, когда ввожу данные, я понимаю, что выполняется также поиск ...., я же Ваш макрос вставил в свой, основной, я беру его и закомментирую(а когда он мне будет нужен, разкоментирую)скорость сразу возросла, но формула "ЕСЛИ(СЧЁТЕСЛИ..." то остается и она все равно работает, так же?

А если сделать как в Вашем первоначальном, варианте, через отдельный модуль, в этом будет выигрыш?
Хотелось бы что бы Ваш макрос начинал работать, только тогда, когда я начинаю вводить № накладных или так просто не возможно?
valerij вне форума
Старый 23.05.2008, 15:45   #59
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

valerij, Вы с SAS888 так общаетесь, что вроде как неудобно влазить в ваш разговор. Но раз уж Вы сами сказали
Цитата:
Ребята!!!
Я SAS888 уже замучал
Проблему с тормозами частично можно решить, если прописать
Код:
    With Application
         .ScreenUpdating = False						
         .Calculation = xlManual
‘’’’’’’’’’’’’’’’’’’’’’
‘’’’’’’’’’’’’’’’’’’’’’
         .Calculation = xlAutomatic
         .ScreenUpdating = True
    End With
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума
Старый 23.05.2008, 16:11   #60
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от VictorM Посмотреть сообщение
неудобно влазить в ваш разговор. Проблему с тормозами частично можно решить, если прописать
.ScreenUpdating = False
.Calculation = xlManual
‘’’’’’’’’’’’’’’’’’’’’’
‘’’’’’’’’’’’’’’’’’’’’’
.Calculation = xlAutomatic
.ScreenUpdating = True
End With[/CODE]
Да нет, напротив.

ScreenUpdating = False
У меня вообще отключено ибо сильно дергается экран, особенно на офисном ПК.
.Calculation = xlManual
Вообще не знаю, что это такое
Я с Excel-ем всего пол года, так, что........ламер
valerij вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление громкостью Jupiter Общие вопросы Delphi 2 29.06.2008 15:43
Управление голосом prizrak1390 Общие вопросы Delphi 2 24.06.2008 21:04
управление CD ROMom Cricket2007 Помощь студентам 4 16.06.2008 16:01
Управление приложениями voron29 Общие вопросы Delphi 1 14.03.2008 12:38
вопрос - проблема с форматированием prickly Microsoft Office Excel 2 14.11.2006 10:14