Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!! / 12 сообщений из 12, страница 1 из 1
28.04.2008, 14:16
    #35283548
Помощник
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
нужно повесить набор действий на собитий - изменение в ячейке данных
пишу
Private Sub Exam(N As Integer)
[D1].Value = 100
[D2].Value = 100
Range("D1:D2").Select
Selection.Font.ColorIndex = N
Selection.Font.Bold = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Range("A1")
Select Case r
Case 0
Exam (10)
Case 1
Exam (30)
Case 2
Exam (55)
Case Else
MsgBox "Нерабочие цифры"
End Select
End Sub
при этом происходит бесконечное зацикливание
вопрос мне казалось что строки
Set r = Range("A1")
достато для того что бы отслеживалось изменение только в заданной ячейки
но раз зацикливает значит не достаточно
что надо сделать, что бы отслеживалось изменения данных только в заданной ячейке?
...
Рейтинг: 0 / 0
28.04.2008, 14:18
    #35283550
Помощник
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
при всем при том
если пишу
Private Sub Exam(N As Integer)
[G1].Value = 100
Range("G1").Select
Selection.Font.ColorIndex = N
Selection.Font.Bold = True
End Sub
то зацикливание не происходит...
я не понимаю это глюк??? или что????
...
Рейтинг: 0 / 0
28.04.2008, 16:40
    #35284045
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo myerr
    Application.EnableEvents = False
    ...
    Application.EnableEvents = True
    Exit Sub
myerr:
    Application.EnableEvents = True
End Sub
...
Рейтинг: 0 / 0
28.04.2008, 16:45
    #35284054
Помощник
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
спасибо, но вообще это глюк???
или таки должно быть ?
...
Рейтинг: 0 / 0
28.04.2008, 18:08
    #35284253
ДмиДми
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
Конечно, так оно и должно быть.
Exam() изменяет значение ячеек d1 и d2, что немедленно вызывает новое обращение к Worksheet_Change(), причём с тем же значением в a1.
...
Рейтинг: 0 / 0
28.04.2008, 18:17
    #35284265
ДмиДми
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
Кстати, а что мешало поставить точку останова на первый же в Worksheet_Change() оператор
Set r = Range("A1")
и самостоятельно всё пройти по шагам , нажимая F8 ?
...
Рейтинг: 0 / 0
28.04.2008, 18:20
    #35284270
Помощник
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
заработало (в смысле бесконечный цикл больше не получается)
НО... вот листинг
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo myerr
       Application.EnableEvents = False
       Dim r As Range
       Set r = Range("A35")
       If r =  1  Then Proba 'вызов подпрограммы экон. расчета 
       If r =  0  Then Clear  'вызов подпрограммы отчистки
       Application.EnableEvents = True
    Exit Sub
myerr:
    Application.EnableEvents = True
End Sub  
Помощник
что надо сделать, что бы отслеживалось изменения данных только в заданной ячейке?
т.е. сейчас расчет запускается если А35=1 при любом изменении на листе,
а неообходимо, что бы расчет запускался только, если в ячейке А35 произошли изменения
...
Рейтинг: 0 / 0
28.04.2008, 18:32
    #35284290
Помощник
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
ДмиДмиКонечно, так оно и должно быть.
Exam() изменяет значение ячеек d1 и d2, что немедленно вызывает новое обращение к Worksheet_Change(), причём с тем же значением в a1.
нет я не понимаю почему, если я меняю значения только в одной ячейке
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub Exam(N As Integer)
[D2].Value =  100 
'[D3].Value = 200
Range("D2:D4").Select
Selection.Font.ColorIndex = N
Selection.Font.Bold = True
End Sub
то зацикливания не происходит
а при добавлении еще одного значения уже кирдык.. бесконечный (типа зациклило)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub Exam(N As Integer)
[D2].Value =  100 
[D3].Value =  200 
Range("D2:D4").Select
Selection.Font.ColorIndex = N
Selection.Font.Bold = True
End Sub
тута никакой F8 мне лично не помогает
...
Рейтинг: 0 / 0
28.04.2008, 18:42
    #35284303
ДмиДми
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
Помощниктута никакой F8 мне лично не помогает
(Устало.)
Оба файла - в студию, плииз. И тот, который циклит, и другой, который не циклит.
Команду "Файл -- Сохранить как", надеюсь, описывать не надо.
...
Рейтинг: 0 / 0
28.04.2008, 19:19
    #35284350
Помощник
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
ДмиДми(Устало.)
Оба файла - в студию, плииз. И тот, который циклит, и другой, который не циклит.
Команду "Файл -- Сохранить как", надеюсь, описывать не надо.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Range("A1")
Select Case r
Case  0 
Exam ( 10 )
Case  1 
Exam ( 30 )
Case  2 
Exam ( 55 )
Case Else
MsgBox "Нерабочие цифры"
End Select
End Sub
обработка событий одинаковая
отличается процедура Exam()
не глючный вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub Exam(N As Integer)
[D2].Value =  100 
'[D3].Value = 200
Range("D2:D4").Select
Selection.Font.ColorIndex = N
Selection.Font.Bold = True
End Sub
глючный вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub Exam(N As Integer)
[D2].Value =  100 
[D3].Value =  200 
Range("D2:D4").Select
Selection.Font.ColorIndex = N
Selection.Font.Bold = True
End Sub
а че листинги никак?
выкладываю 1 файл.. ибо комментарий сами удалить сможете.. ИМХО
...
Рейтинг: 0 / 0
28.04.2008, 22:46
    #35284563
Помощник
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
гы гы , а все гениальное просто.. как всегда....
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Private Sub Exam(N As Integer)
[D2].Value =  100 
[D3].Value =  200 
[D4].Value =  300 
Range("D2:D4").Select
Selection.Font.ColorIndex = N
Selection.Font.Bold = True
[A1].Value =  0  'Поворачиваем выключатель в положение выкл :-)
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Range("A1")
Select Case r
Case  0  'Выключатель 
Exit Sub
Case  1 
Exam ( 7 )
Case  2 
Exam ( 4 )
Case  3 
Exam ( 5 )
Case Else
MsgBox "Game Over"
End Select
End Sub
З.Ы. спасибо всем за помощь
узнала как обрабатывать ошибки в VBA
и отдельное спасибо ДмиДми, его комментприи послужили толчком ... к правильному решению
...
Рейтинг: 0 / 0
30.04.2008, 12:11
    #35288187
Помощник
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
Помощник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Range("A1")
Select Case r
Case  0 
Exam ( 10 )
Case  1 
Exam ( 30 )
Case  2 
Exam ( 55 )
Case Else
MsgBox "Нерабочие цифры"
End Select
End Sub
обработка событий одинаковая
отличается процедура Exam()
не глючный вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub Exam(N As Integer)
[D2].Value =  100 
'[D3].Value = 200
Range("D2:D4").Select
Selection.Font.ColorIndex = N
Selection.Font.Bold = True
End Sub
глючный вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub Exam(N As Integer)
[D2].Value =  100 
[D3].Value =  200 
Range("D2:D4").Select
Selection.Font.ColorIndex = N
Selection.Font.Bold = True
End Sub

практический вопрос решен, но все же осталось не понятным почему возникает цикл
только если 2 строки добавлять (см. глючный вариант)?
по идее зацикливание должно происходить и при внесении 1 изменнения на лист, но не происходит..
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!! / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]