#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:
У меня это сработало с двумя небольшими изменениями:
-
Вставьте этот код в обычный модуль, а не в
ThisWorkbook
модуль. -
Добавьте строку, которая устанавливает значение
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