Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
4 / 2 / 3
Регистрация: 08.09.2015
Сообщений: 28
1

Ошибка в Worksheet_Change()

22.09.2015, 22:32. Показов 1584. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго всем времени!
Вопрос по файлу во вложении: если открыть и перещелкнуть свойство "Род тока" во второй строке на первом листе возникает ошибка в процедуре Worksheet_Change().
Причем у меня и на компьютере и на ноутбуке все работает нормально. Ошибка у человека, которому я передал файл.
Может быть какая-то несовместимость версий (у меня Office 2013)? Или настройки? Куда копать, подскажите )
Вложения
Тип файла: rar Cable Selector.rar (261.1 Кб, 9 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2015, 22:32
Ответы с готовыми решениями:

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

Не работает worksheet_change
Здравствуйте! Уважаемые форумчане, подскажите, пожалуйста, почему не работает обработчик событий...

Задачка с событием Worksheet_Change
Код работает просто СУППЕР! Я его поместил в стандартный модуль Module1 с названием процедуры...

Worksheet_Change убивает пользовательские функции
Добрый вечер! Прошу помочь со следующей проблемой: В файле в приложении есть 2 функции в модуле...

15
Супер-Помогатор
1034 / 620 / 132
Регистрация: 26.12.2013
Сообщений: 1,975
22.09.2015, 23:22 2
А подсвечивает на какой строке кода?
Навскидку не глядя, можно предположить что проблема в разрядности офиса, хотя могу ошибаться.
0
4 / 2 / 3
Регистрация: 08.09.2015
Сообщений: 28
23.09.2015, 11:28  [ТС] 3
Тут
Миниатюры
Ошибка в Worksheet_Change()  
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
23.09.2015, 12:48 4
В референсах нет MISSING? Архив качать не могу...
0
4 / 2 / 3
Регистрация: 08.09.2015
Сообщений: 28
23.09.2015, 13:55  [ТС] 5
Hugo121, папа ты сейчас с кем разговаривал? )
Это моя первая программа. Референсы это где? И кто такие Missing?

Вот вся процедура:

Visual Basic
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    
    If IsNumeric(Target.Value) And Target.Value <> 0 Then
        If Not Intersect(Target, [a1].CurrentRegion) Is Nothing Then
            
            With Target
                If .Column = 2 Then
                    If .Cells(1, 11) = "3-ôàçíûé" Then .Cells(1, 2) = IrA3(.Value, .Cells(1, 3), .Cells(1, 4), .Cells(1, 5))
                    If .Cells(1, 11) = "1-ôàçíûé" Then .Cells(1, 2) = IrA1(.Value, .Cells(1, 3), .Cells(1, 4), .Cells(1, 5))
                 End If
                           
                If .Column = 3 Then
                    If .Cells(1, 10) = "3-ôàçíûé" Then .Cells(1, 0) = PnomkVt3(.Value, .Cells(1, 2), .Cells(1, 3), .Cells(1, 4))
                    If .Cells(1, 10) = "1-ôàçíûé" Then .Cells(1, 0) = PnomkVt1(.Value, .Cells(1, 2), .Cells(1, 3), .Cells(1, 4))
                    
                End If
                
                If .Column = 4 Then
                    If .Cells(1, 9) = "3-ôàçíûé" Then .Cells(1, 0) = IrA3(.Cells(1, -1), .Cells(1, 1), .Cells(1, 2), .Cells(1, 3))
                    If .Cells(1, 9) = "1-ôàçíûé" Then .Cells(1, 0) = IrA1(.Cells(1, -1), .Cells(1, 1), .Cells(1, 2), .Cells(1, 3))
                End If
                
                If .Column = 5 Then
                    If .Cells(1, 8) = "3-ôàçíûé" Then .Cells(1, -1) = IrA3(.Cells(1, -2), .Cells(1, 0), .Cells(1, 1), .Cells(1, 2))
                    If .Cells(1, 8) = "1-ôàçíûé" Then .Cells(1, -1) = IrA1(.Cells(1, -2), .Cells(1, 0), .Cells(1, 1), .Cells(1, 2))
                End If
                
                If .Column = 6 Then
                    If .Cells(1, 7) = "3-ôàçíûé" Then .Cells(1, -2) = IrA3(.Cells(1, -3), .Cells(1, -1), .Cells(1, 0), .Cells(1, 1))
                    If .Cells(1, 7) = "1-ôàçíûé" Then .Cells(1, -2) = IrA1(.Cells(1, -3), .Cells(1, -1), .Cells(1, 0), .Cells(1, 1))
                End If
                                               
            End With
       End If
    End If
    
    If Not Intersect(Target, [a1].CurrentRegion) Is Nothing Then
        With Target
                If .Column = 12 Then
                    If .Cells(1, 1) = "3-ôàçíûé" Then .Cells(1, -8) = IrA3(.Cells(1, -9), .Cells(1, -7), .Cells(1, -6), .Cells(1, -5))
                    If .Cells(1, 1) = "1-ôàçíûé" Then .Cells(1, -8) = IrA1(.Cells(1, -9), .Cells(1, -7), .Cells(1, -6), .Cells(1, -5))
                End If
        End With
    End If
    
End Sub
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
23.09.2015, 16:19 6
References ищите в меню редактора кода, а там внутри ищите MISSING на той машине, где не работает. Если есть - или дать библиотеку, или снять галку.
1
-44 / 47 / 6
Регистрация: 28.04.2015
Сообщений: 160
Записей в блоге: 4
23.09.2015, 16:26 7
Цитата Сообщение от angel-fear Посмотреть сообщение
Референсы это где? И кто такие Missing?
Про референсы и миссинги посмотрите, например, здесь:
https://support.microsoft.com/ru-ru/kb/283806
http://www.cpearson.com/Excel/... ences.aspx
1
4 / 2 / 3
Регистрация: 08.09.2015
Сообщений: 28
23.09.2015, 17:30  [ТС] 8
Не знаю почему, но тупо помогла замена

Visual Basic
1
If Not Intersect(Target, [a1].CurrentRegion) Is Nothing Then
на

Visual Basic
1
If Not Intersect(Target, Cells(1, 1).CurrentRegion) Is Nothing Then
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
23.09.2015, 19:30 9
Скачал файл.
Тупо помогло отключение зацикливания:
Visual Basic
1
2
3
4
5
6
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    Application.EnableEvents = False
...
    Application.EnableEvents = True
End Sub
Добавлено через 1 минуту
Кстати, могли и указать текст ошибки, глядишь ещё днём был бы ответ...
1
4 / 2 / 3
Регистрация: 08.09.2015
Сообщений: 28
23.09.2015, 20:56  [ТС] 10
Hugo121, указал бы, конечно, если бы ошибка у меня возникала, а так ждал ответа.
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
23.09.2015, 21:01 11
Была ошибка переполнения стека:
Миниатюры
Ошибка в Worksheet_Change()  
1
4 / 2 / 3
Регистрация: 08.09.2015
Сообщений: 28
23.09.2015, 22:47  [ТС] 12
Разрешите еще один вопрос по этой процедурке.

Если несколько раз нажать кнопочку "+" и добавить несколько строк, после чего изменить один из функциональных параметров (Кс, cos, КПД или Род тока) и попытаться его расширить/скопировать на все остальные строки путем двойного щелчка по нижнему правому квадратику ячейки, то нифига не пересчитывается.
Видимо такое действие, в отличии от просто растягивания вниз не генерирует событие Change.
Как-нибудь можно спровоцировать Change программно в этом случае?
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
23.09.2015, 22:54 13
При двойном щелчке (как и при растягивании) думаю Target.Count будет > 1, так что событие генерится, но Вы сами его не используете.
1
4 / 2 / 3
Регистрация: 08.09.2015
Сообщений: 28
24.09.2015, 00:51  [ТС] 14
Понятно.
Но если убираю

Visual Basic
1
If Target.Count > 1 Then Exit Sub
сразу же тут вылетаю с ошибкой

Visual Basic
1
If IsNumeric(Target.Value) And Target.Value <> 0 Then
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
24.09.2015, 08:33 15
Ну понятно - если ячеек изменилось много, то Target.Value уже будет массивом. Или может быть вообще непонятно чем, если диапазон с разрывами.
Вообще думаю можно сделать так - если количество 1, то работает то, что уже написано, иначе
Visual Basic
1
2
3
for each cc in target.cells
call Worksheet_Change(cc)
next
1
4 / 2 / 3
Регистрация: 08.09.2015
Сообщений: 28
24.09.2015, 16:11  [ТС] 16
Hugo121, спасибо работает. Правда если удалить десяток строк придется долго ждать отвисания )

Добавлено через 2 часа 33 минуты
А как можно организовать форматирование при вставке? Или сохранение форматирования?

Попробовал просто копировать формат из шапки через PasteSpecial - фигня получается.
0
24.09.2015, 16:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.09.2015, 16:11
Помогаю со студенческими работами здесь

Worksheet_Change не позволяет выбрать Range составленный из переменных
Добрый вечер, Прошу подсказать почему вылезает ошибка 1004: При изменении ячейки в диапазоне...

Обработчик событий Worksheet_Change(ByVal Target As Range)
Привет всем у меня есть вопрос, хотя он уже поднимался, но я так и не нашёл На него однозначного...

Реакция макроса Worksheet_Change на изменение значения в ячейке
Здравствуйте. Подскажите насчет реакции макроса на изменившуюся ячейку . Эксель имеет такой...

Перестало срабатывать событие Worksheet_Change, как исправить проблему?
Добрый всем день, у меня такая вот не большая проблема. Не могу разобраться с кодом: Цель...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru