Я хочу поместить прозрачную метку поверх листа в Excel, чтобы я мог использовать событие MouseMove метки для «рисования ячеек» (также изменив их цвет заливки и т. Д.) Щелчком мыши/перетаскиванием/и т. д. - так как я не могу сделать это в самих камерах.Как сделать ярлык Excel ActiveX прозрачным ... во время выполнения?
Теперь все работает отлично, за исключением того, что я не могу сделать ярлык прозрачным во время выполнения (ака в VBA) ... в то время как, делая то же самое в режиме разработки, работает так, как ожидалось. В частности, у меня есть код (более или менее):
Dim MapLabel As OLEObject
On Error Resume Next
Sheet2.OLEObjects("MapLabel").Delete
Set MapLabel = Sheet2.OLEObjects.Add("Forms.Label.1")
MapLabel.name = "MapLabel"
MapLabel.Placement = xlMoveAndSize
MapLabel.Object.Caption = ""
' Problem line below
MapLabel.Object.BackStyle = fmBackStyleTransparent
' Problem line above
MapLabel.Left = Sheet2.cells(2, 6).Left
MapLabel.Top = Sheet2.cells(2, 6).Top
MapLabel.Width = Sheet2.cells(2,6).Width * 10
MapLabel.Height = Sheet2.cells(2,6).Height * 10
Так, в словах, я сначала удалить ярлык с именем «MapLabel», а затем воссоздать его (приведенный выше код переходит в «INIT» Sub). Все строки кода, кроме отмеченного, дают желаемый результат. Маркированный один делает, устанавливает свойство BackStyle метки на fmBackStyleTransparent ... но он не действительно делает метку прозрачной. Это разочаровывает, потому что это тот же подход, который работает безупречно во время разработки!
У вас есть решение этой проблемы? Я читал о решении подобных проблем, объявляя метку как MsForms.Label или как Control, но объект листа не имеет этих свойств, плюс, есть гораздо больше свойств ярлыков, которые можно установить с помощью OLEObject, чем с помощью MsForms .Label или Control.
Почему вы его удаляете и воссоздаете? как тест он отлично работает для меня с лейблом ACTIVEX, во время выполнения он изменяется от прозрачного до непрозрачного с помощью 'Private Sub Worksheet_SelectionChange (ByVal Target As Range) Если Label1.BackStyle = fmBackStyleOpaque Тогда Label1.BackStyle = fmBackStyleTransparent Else Label1.BackStyle = fmBackStyleOpaque End If End Sub ' –
@StevenMartin Я удалить его в случае, если какой-либо из его свойств было изменено пользователем в последний раз при работе с книгой. Эти свойства необходимы для того, что я хочу достичь (например, прозрачность, положение и т. Д.). Воссоздать его, чтобы я мог использовать его снова, очевидно. Что касается вашего теста, вы не сможете получить доступ к событию SelectionChange для ячеек, поскольку эта метка будет охватывать указанные ячейки (чтобы я мог использовать MouseMove, событие MouseDown _ в пространстве_ этих ячеек (а не в самих ячейках) ... если вы знаете, что я имею в виду. –
@StevenMartin О, и еще одно: как я сказал в своем сообщении, свойство Backstyle метки ** уже есть ** fmBackStyleTransparent. Просто это ярлык не прозрачен, поскольку свойство указывает, что это должно быть. –