Ich möchte ein transparentes Etikett auf einem Blatt in Excel, so dass ich das MouseMove-Ereignis des Etiketts nutzen kann, um "Zellen" (aka ändern ihre Füllfarbe und so weiter) per Mausklick/ziehen/etc. - da kann ich das an den Zellen per se nicht machen.Wie mache ich ein Excel-ActiveX-Label transparent ... zur Laufzeit?
Jetzt funktioniert alles gut, außer dass ich das Label nicht zur Laufzeit transparent machen kann (aka in VBA) ... während genau das gleiche im Design Mode funktioniert wie erwartet. Insbesondere habe ich den Code (mehr oder weniger):
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
Also, in Worten, ich zum ersten Mal das Label löschen namens 'MapLabel', dann erstellen Sie es (der obige Code geht in einen "init" Sub). Alle Codezeilen, außer der markierten, ergeben das gewünschte Ergebnis. Die markierte tut setzen Sie die BackStyle-Eigenschaft des Etiketts auf fmBackStyleTransparent ... aber es nicht tatsächlich machen das Etikett transparent. Das ist frustrierend, denn es ist derselbe Ansatz, der zur Designzeit einwandfrei funktioniert!
Haben Sie eine Lösung? Ich lese über das Lösen ähnlicher Probleme, indem ich das Label als MsFormsLabel oder als Control deklariere, aber das Sheet-Objekt hat diese Eigenschaften nicht, außerdem gibt es weit mehr Label-Eigenschaften, die mit dem OLEObject als mit Hilfe von MsForms gesetzt werden können .Label oder Kontrolle.
Warum löschen Sie es und erstellen es neu? als Test funktioniert es für mich mit einem ActiveX-Label, zur Laufzeit aus transparent wechselt zu undurchsichtig mit 'Private Sub Worksheet_SelectionChange (ByVal Target As Range) Fein Wenn Label1.BackStyle = fmBackStyleOpaque Dann Label1.BackStyle = fmBackStyleTransparent Sonst Label1.Backstyle = fmBackStyleOpaque End If End Sub ' –
@StevenMartin ich es bei jeder seiner Eigenschaften bin Löschen durch den Benutzer das letzte Mal bei der Arbeit mit der Arbeitsmappe geändert. Diese Eigenschaften sind wesentlich für das, was ich erreichen möchte (z. B. Transparenz, Position usw.). Ich mache es neu, damit ich es wieder benutzen kann. In Bezug auf Ihren Test können Sie nicht auf das SelectionChange-Ereignis der Zellen zugreifen, da das Label die genannten Zellen abdeckt (so dass ich MouseMove, MouseDown-Ereignis _auf dem Raum_ dieser Zellen verwenden kann (nicht die Zellen an sich) ... wenn du weißt, was ich meine –
@StevenMartin Oh, und noch eins: wie ich in meinem Post gesagt habe, ist die Backstyle-Eigenschaft des Labels ** bereits ** fmBackStyleTransparent. Es ist nur, dass das Label nicht transparent ist, Wie die Eigenschaft zeigt, sollte es sein –