Объект не поддерживает это свойство / метод в операторе IF в цикле - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть рабочая книга, которая используется для организации ежедневных заказов для многих клиентов на одном листе.Информация, введенная в этот лист, затем используется для создания счетов для клиентов.Эта книга работала без ошибок в течение нескольких месяцев.Однако недавно он начал выкидывать ошибку.Я не припоминаю, чтобы менялся какой-либо код, который мог вызвать эту ошибку.

Я пытался выяснить это сам, однако у меня заканчиваются идеи, вот несколько вещей, которые я обнаружил:

  • Ошибка ВСЕГДА появляется на 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

Любая помощь или руководство в правильном направлении будет принята с благодарностью!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...