Сбой VBA — Excel при очистке значений вертикального диапазона

#excel #vba

#excel #vba

Вопрос:

У меня возникает проблема, когда я пытаюсь очистить определенный диапазон, Excel полностью выходит из строя.

Сначала немного предыстории, у меня уже есть некоторый запущенный код для запуска этого макроса при изменении значения в определенной ячейке, которая содержит формулу (C13). Поэтому у меня есть следующий код в

  • Модуль
 Option Explicit 

Public TargetValue As Variant
Private Const cTarget As String = "C13"

Sub TargetCalc(ws As Worksheet)
    If ws.Range(cTarget) <> TargetValue Then
        MacroRuns
        TargetValue = ws.Range(cTarget).Value
    End If
End Sub

Sub TargetStart()
    TargetValue = Sheet3.Range(cTarget).Value
End Sub

Sub MacroRuns()

Select Case Range("C13").Value
Dim producten As Variant
    Case "Bosbroek bv"
        producten = Array("aardbei bakje", "rode bes bakje", "banaan stuk", "blauwe bes bakje", "braambes bakje", "kiwi groen stuk", "framboos bakje", "jonagold stuk", "clementine kilo", "ananas stuk")
        ThisWorkbook.Sheets("Factuur").Range("B22:B31").Value = Application.Transpose(producten)
        ThisWorkbook.Sheets("Factuur").Range("B32: B138").Value = ""
    
End Select

 
  • Конкретный лист с именем «Factuur»
     Private Sub Worksheet_Calculate() 
    TargetCalc Me
    End Sub
 
  • Эта рабочая тетрадь
 Option Explicit
Private Sub Workbook_Open()

 TargetStart 

End Sub

 

Сбой Excel при запуске MacroRuns (), и я пытаюсь очистить значения с помощью этого кода (в модуле): ThisWorkbook.Sheets("Factuur").Range("B32: B138").Value = ""

Когда я запускаю эту строку вне этой полной структуры, она работает.

Надеясь, что кто-нибудь сможет мне помочь, я немного застрял на данный момент.

Комментарии:

1. Какие-нибудь другие обработчики событий? Попробуйте отключить события при очистке диапазонов.

2. В статье Statements или labels invalid между Select Case и first Case в первом предложении говорится You can place nothing but a comment between the Select Case statement and the first Case clause. , что, хотя эти утверждения отчасти противоречивы, и это может не иметь никакого отношения к вашему случаю, стоило бы поместить объявление Dim producten As Variant в «правильное» место: в первом Case или перед Select .

3. @TimWilliams, это сработало для меня! Большое спасибо. Не могли бы вы объяснить мне, почему это могло решить проблему?

4. Если вы предпримете действие в своем обработчике событий, которое может повторно запустить обработчик или другой обработчик (который, например, затем повторно запускает себя или исходный обработчик), вы можете застрять в бесконечном цикле. Отключение событий предотвращает это: вам просто нужно быть осторожным, чтобы повторно включить события, когда вы закончите (обычно вы добавляете обработчик ошибок, чтобы убедиться)