почему Worksheet_Change вызывается 217 раз?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
saint_shade
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 16.07.2008 (Ср) 14:22

почему Worksheet_Change вызывается 217 раз?

Сообщение saint_shade » 16.07.2008 (Ср) 14:36

подскажите пожалуйста как бороться с сабжем.
создаю новую книгу в экселе.
ячейка (1,1) изначально пуста.
на чистую страницу цепляю ивент:

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Cells(1, 1).Value2 = ActiveSheet.Cells(1, 1).Value2 + 1
End Sub


при изменении значения любой ячейки в (1,1) прибавляется 217.

з.ы. сорри, если вопрос был уже, но в поиске не нашел.
vivere militare est.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 16.07.2008 (Ср) 15:02

Код: Выделить всё
ActiveSheet.Cells(1, 1).Value2 = ActiveSheet.Cells(1, 1).Value2 + 1
Провоцирует возникновение события Worksheet_Change. Получается зацикливание.
А я все практикую лечение травами...

saint_shade
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 16.07.2008 (Ср) 14:22

Сообщение saint_shade » 16.07.2008 (Ср) 15:17

а как его избежать, если в обработке нужно обращаться к каким-то заданным ячейкам?
vivere militare est.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 16.07.2008 (Ср) 15:25

saint_shade писал(а):а как его избежать, если в обработке нужно обращаться к каким-то заданным ячейкам?
Зачем в событии изменения ячейки менять ее еще раз? Вот тебе и зацикливание. Что-то с логикой работы программы не то.
З.Ы. Теме самое место в VBA, перенес бы кто... а то правов нет.
Весь мир матрица, а мы в нем потоки байтов!

saint_shade
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 16.07.2008 (Ср) 14:22

Сообщение saint_shade » 16.07.2008 (Ср) 15:30

такая задача
в книге есть три листа. на одном вводятся данные.
на другом справочники
на третьем шаблон для дальнейшей выгрузки в бд.

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

(вб первый раз увидел три дня назад, многого еще попросту не знаю, если есть проще метод - буду благодарен за подсказку)
vivere militare est.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 17.07.2008 (Чт) 6:39

Решается элементарно, нужно включать "серые клеточки":

Код: Выделить всё
Dim bNoChange as Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
if bNoChange then exit sub
bNoChange = true
ActiveSheet.Cells(1, 1).Value2 = ActiveSheet.Cells(1, 1).Value2 + 1
bNoChange = false
End Sub
А я все практикую лечение травами...

saint_shade
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 16.07.2008 (Ср) 14:22

Сообщение saint_shade » 17.07.2008 (Чт) 10:36

спасибо за помощь.
на счет серых клеточек Вы правы, я действительно протупил.
vivere militare est.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 12

    TopList  
cron