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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2013, 15:59   #1
4anae6
 
Регистрация: 25.03.2013
Сообщений: 7
По умолчанию в данном примере проблема в Function или Sub?

Добрый день. Решил поэкспериментировать с функциями и зашел в тупик. В данном примере после того, как я пробую активировать функцию, вылазит ошибка. Нажимаю Debug - Эксель перегружаетя. Где я совершил ошибку? Буду признателен если наставите "чайника" на путь истинный

Код:
Private Sub Worksheet_Change(ByVal target As Range)
Set target = Range("A1")
If Not Cells(1, 1) Is Nothing Then
If Cells(1, 1).Value = 1 Then
Cells(4, 3) = First
Cells(5, 3).Value = ""
Else
Cells(5, 3) = Second
Cells(4, 3).Value = ""
End If
End If
End Sub

Function First()
Dim a
Dim b
a = Cells(4, 1)
b = Cells(4, 2)
First = a * b
End Function

Function Second()
Dim c
Dim d
c = Cells(5, 1)
d = Cells(5, 2)
Second = c * d
End Function


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 18.04.2013 в 16:13.
4anae6 вне форума Ответить с цитированием
Старый 18.04.2013, 16:14   #2
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

4anae6, вот это зачем делаете:
Код:
Set target = Range("A1")
Скрипт вне форума Ответить с цитированием
Старый 18.04.2013, 16:17   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы внутри макроса, назначеного на изменение данных, изменяете данные.
Рискну предположить, что при этом макросы вызывается рекурсивно, пока и глохнет в бесконечном цикле вызовов..

попробуйте отключить события вначале макроса и включить в конце..
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False

  ... тут ваш код, изменяющий ячейки...

  Application.EnableEvents = True
End Sub
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.04.2013, 16:40   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
Private Sub Worksheet_Change(ByVal target As Range)
  If Not Intersect(target, [A1]) Is Nothing Then
    [C4] = IIf([A1] = 1, First, "")
    [C5] = IIf([A1] = 1, "", Second)
  End If
End Sub

Function First()
  First = [A4*B4]
End Function

Function Second()
  Second = [A5*B5]
End Function
в код страницы

Цитата:
Рискну предположить, что при этом макросы вызывается рекурсивно, пока и глохнет в бесконечном цикле вызовов..
Серж,
там банально идет присвоение параметру функции типа ByVal - т.е. readonly
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 19.04.2013, 20:46   #5
4anae6
 
Регистрация: 25.03.2013
Сообщений: 7
По умолчанию

Скрипт и Serge_Bliznykov,
это, как оказалось, то самое, что мне и требовалось

DiemonStar,
Ваш вариант я тоже попробую

Спасибо за ответы
4anae6 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема, или с кодировкой, или фиг знает с чем.. bagabuga Работа с сетью в Delphi 7 09.06.2012 09:03
проблема верстки с IE8 на примере johny_03 HTML и CSS 0 17.11.2011 19:46
Как перейти от Junit3 к Junit4 в данном примере? neearen Помощь студентам 0 02.12.2010 00:48
Оптимизация PHP-скрипта: Что быстрее function или include? Виталий Желтяков PHP 18 08.07.2010 22:35
Бага или фича функции Replace Function (VBA)? Alkaline Microsoft Office Excel 3 27.12.2007 11:26