2016-06-15 2 views
0

Я пытаюсь создать макрос, но когда он запускается сам, excel не справляется с ним и падает.Сбой макроса VBA

Вот макрос:

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim i As Integer 
Dim sous As Integer 
If Not IsEmpty(Cells(4, 2)) And IsNumeric(Cells(4, 2).Value) And Not IsEmpty(Cells(4, 3)) And IsNumeric(Cells(4, 3).Value) Then 
    For i = Cells(4, 3).Value To Cells(4, 2).Value 
     sous = i - Cells(4, 3).Value 
     Cells(5 + sous, 4).Value = i 
    Next i 
MsgBox "Yataaaah" 
End If 
End Sub 

Проблема заключается линия Cells(5 + sous, 4).Value = i, потому что если я положил его на комментарий, это работает.

У кого-нибудь есть идеи, почему Excel не справится с этим?

спасибо. Пс: Я нахожусь на mac, и я использую Excel 15.19.1

+2

Какая ошибка вы получаете? Подтвердили ли вы, что 'sous' и' i' никогда не могут превышать предел VBA Integer (32767)? Не видя примеров данных, с которыми вы работаете, или даже с ошибкой, которую вы получаете, довольно сложно предоставить значимую помощь. – Dave

+0

Я вхожу в обе ячейки 50 и 40, и я взял машину с ведьмой - это макс и ведьма - это мин. , поэтому они не могут быть вне пределов. Произошла ошибка: «Мы закрыли Excel, потому что встретили проблему. Извините за неудобство. Excel попытается вернуть вашу работу несохраненной, но она может быть потеряна». (что-то вроде этого) Нет номера ошибки или чего-то подобного. – Victor

+0

предоставьте [mcve] – Mafii

ответ

3

Вы должны отключить события. Причина сбоя Excel заключается в том, что событие изменения выбора изменяет значение, которое вызывает событие изменения выбора. Он застрял в бесконечном цикле.

Private Sub Worksheet_Change(ByVal Target As Range) 
    Application.EnableEvents = False 
    Dim i As Integer 
    Dim sous As Integer 
    If Not IsEmpty(Cells(4, 2)) And IsNumeric(Cells(4, 2).Value) And Not IsEmpty(Cells(4, 3)) And IsNumeric(Cells(4, 3).Value) Then 
     For i = Cells(4, 3).Value To Cells(4, 2).Value 
      sous = i - Cells(4, 3).Value 
      Cells(5 + sous, 4).Value = i 
     Next i 
     MsgBox "Yataaaah" 
    End If 

    Application.EnableEvents = True 
End Sub 
+0

Он работает, спасибо вам большое. – Victor

+0

Также может быть хорошей идеей проверить, действительно ли имело место изменение, т. Е. Если оно было в ячейках (4,3), ячейках (4,2) или столбце (4) (строка 5+) – arcadeprecinct

Смежные вопросы