powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
12 сообщений из 12, страница 1 из 1
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
    #35283548
Помощник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нужно повесить набор действий на собитий - изменение в ячейке данных
пишу
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
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
    #35283550
Помощник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
при всем при том
если пишу
Private Sub Exam(N As Integer)
[G1].Value = 100
Range("G1").Select
Selection.Font.ColorIndex = N
Selection.Font.Bold = True
End Sub
то зацикливание не происходит...
я не понимаю это глюк??? или что????
...
Рейтинг: 0 / 0
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
    #35284045
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
    #35284054
Помощник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, но вообще это глюк???
или таки должно быть ?
...
Рейтинг: 0 / 0
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
    #35284253
Фотография ДмиДми
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно, так оно и должно быть.
Exam() изменяет значение ячеек d1 и d2, что немедленно вызывает новое обращение к Worksheet_Change(), причём с тем же значением в a1.
...
Рейтинг: 0 / 0
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
    #35284265
Фотография ДмиДми
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а что мешало поставить точку останова на первый же в Worksheet_Change() оператор
Set r = Range("A1")
и самостоятельно всё пройти по шагам , нажимая F8 ?
...
Рейтинг: 0 / 0
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
    #35284270
Помощник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
заработало (в смысле бесконечный цикл больше не получается)
НО... вот листинг
Код: 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
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
    #35284290
Помощник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДмиДмиКонечно, так оно и должно быть.
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
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
    #35284303
Фотография ДмиДми
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помощниктута никакой F8 мне лично не помогает
(Устало.)
Оба файла - в студию, плииз. И тот, который циклит, и другой, который не циклит.
Команду "Файл -- Сохранить как", надеюсь, описывать не надо.
...
Рейтинг: 0 / 0
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
    #35284350
Помощник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДмиДми(Устало.)
Оба файла - в студию, плииз. И тот, который циклит, и другой, который не циклит.
Команду "Файл -- Сохранить как", надеюсь, описывать не надо.

Код: 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
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
    #35284563
Помощник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
гы гы , а все гениальное просто.. как всегда....
Код: 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
Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
    #35288187
Помощник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помощник
Код: 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
12 сообщений из 12, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Private Sub Worksheet_Change(ByVal Target As Range) помощи плиз!!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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