У меня есть рабочая книга, которая используется для организации ежедневных заказов для многих клиентов на одном листе.Информация, введенная в этот лист, затем используется для создания счетов для клиентов.Эта книга работала без ошибок в течение нескольких месяцев.Однако недавно он начал выкидывать ошибку.Я не припоминаю, чтобы менялся какой-либо код, который мог вызвать эту ошибку.
Я пытался выяснить это сам, однако у меня заканчиваются идеи, вот несколько вещей, которые я обнаружил:
- Ошибка ВСЕГДА появляется на 7-й итерации цикла ниже (т. Е. Когда x = 27).
- Ошибка ТОЛЬКО имеет проблему с флажком
(CheckBox " & x + 10)
.Я попытался запустить цикл, избегая проверки значения этого конкретного флажка, и он работает для всех других флажков. - Я прочитал в другом посте, что это может быть проблема с использованием страшного
.Select
.Поэтому я избавился от этого отовсюду, чтобы он мог использоваться.
Мой код
With ThisWorkbook.Worksheets("Invoice")
For x = 21 To 35
If .Shapes("Check Box " & x + 10).ControlFormat.Value = 1 And .Shapes("Check Box " & x + 25).ControlFormat.Value = 1 Then
MsgBox "Please only select one from the options (Return OR Discount)"
Exit Sub
Else
End If
Next x
End With
Из того, что я понимаю, эта ошибка возникает, когда объект, которым я являюсьработа с не поддерживает свойство, с которым я пытаюсь работать.Я не понимаю, почему одни и те же строки кода работают «для 90%» цикла (т. Е. Объект того же типа поддерживает это свойство для 90% цикла), но не для одного объектатого же типа.
Для полноты приведенный ниже код используется для повторной вставки флажков при каждом использовании рабочей книги.Это сделано, поскольку другой процесс может удалить целые строки в книге, нарушая функциональность флажков.Таким образом, это гарантирует, что флажок с правильным именем находится в правильной ячейке:
Sub CheckBoxes()
ThisWorkbook.Worksheets("Invoice").CheckBoxes.Delete
With ThisWorkbook.Worksheets("Invoice")
For x = 5 To 19
Set cb = .CheckBoxes.Add(.Cells(x, "J").Left, .Cells(x, "J").Top, 4, 10)
With cb
.Name = "Check Box " & x + 26
.Caption = ""
.Display3DShading = False
End With
Set cb2 = .CheckBoxes.Add(.Cells(x, "K").Left, .Cells(x, "K").Top, 4, 10)
With cb2
.Name = "Check Box " & x + 41
.Caption = ""
.Display3DShading = False
End With
Next x
End With
End Sub
Любая помощь или руководство в правильном направлении будет принята с благодарностью!