Я пытаюсь создать кнопку вращения через VBA в Excel, но это выдает мне «ошибку автоматизации, катастрофический сбой»?

#excel #vba

#excel #vba

Вопрос:

 Sub Test()
    Dim spinButton As Object
    Set spinButton = ActiveSheet.OLEObjects.Add(ClassType:="Forms.SpinButton.1", Link:=False, DisplayAsIcon:=False, Left:=276, Top:=58.5, Width:=12.75, Height:=25.5)
    spinButton.Object.Min = 1
    spinButton.Object.Max = 100
    spinButton.LinkedCell = "B2"
End Sub
  

Моя цель с помощью приведенного выше кода VBA — создать простую кнопку вращения, которая изменяет значение ячейки «B2» на 1.

Когда я запускаю код как макрос, он выдает мне это предупреждение об ошибке:

ошибка

о чем они пишут здесь на веб-сайте MS.

Дело в том, что мой код работает. Как и в, он создает кнопку вращения в нужном месте, добавляет правильные свойства и изменяет значение ячейки B2, когда я нажимаю кнопку вращения.

Я использую совершенно новый файл, в котором ничего нет. Никаких других макросов / модулей и полностью пустой электронной таблицы. Я использую свой код VBA в «ThisWorkbook», если это имеет какие-либо различия:

сбой

Ответ №1:

 spinButton.Object.Min = 1 
spinButton.Object.Max = 100
spinButton.LinkedCell = "B2"
  

Вы получаете эту ошибку, потому что вы заранее устанавливаете минимальное значение как 1 , а затем ссылаетесь на ячейку без значения. Если вы сделаете наоборот, то это сработает

 spinButton.LinkedCell = "B2"

spinButton.Object.Min = 1
spinButton.Object.Max = 100
  

Ответ №2:

У меня это сработало с двумя небольшими изменениями:

  1. Вставьте этот код в обычный модуль, а не в ThisWorkbook модуль.

  2. Добавьте строку, которая устанавливает значение B2 равным 1, прежде чем привязывать к нему кнопку вращения (предполагая, что это то, каким вы хотите, чтобы было начальное значение, но вы могли бы так же легко установить его на 100 или что-нибудь среднее).


 Sub Test()
    Dim spinButton As Object
    Set spinButton = ActiveSheet.OLEObjects.Add(ClassType:="Forms.SpinButton.1", _
        Link:=False, DisplayAsIcon:=False, Left:=276, Top:=58.5, Width:=12.75, Height:=25.5)

    spinButton.Object.Min = 1
    spinButton.Object.Max = 100

    ActiveSheet.Range("B2").Value = 1
    spinButton.LinkedCell = "B2"
End Sub