#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. Если вы предпримете действие в своем обработчике событий, которое может повторно запустить обработчик или другой обработчик (который, например, затем повторно запускает себя или исходный обработчик), вы можете застрять в бесконечном цикле. Отключение событий предотвращает это: вам просто нужно быть осторожным, чтобы повторно включить события, когда вы закончите (обычно вы добавляете обработчик ошибок, чтобы убедиться)