2016-07-31 78 views
1

我想在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」的標籤,然後重新創建它(上面的代碼進入一個「初始化」子)。除了標記的代碼行之外的所有代碼行都會產生所需的結果。標記爲確實設置標籤的BackStyle屬性爲fmBackStyleTransparent ...但它不是實際上使標籤透明。這是令人沮喪的,因爲它是在設計時完美無缺的相同方法!

您有解決方案嗎?我通過將標籤聲明爲MsForms.Label或Control來解決類似的問題,但是表單對象沒有這些屬性,另外,有更多的標籤屬性可以使用OLEObject設置,而不是使用MsForms 。標籤或控件。

+0

你爲什麼要刪除它並重新創建它?作爲測試它工作正常,我使用ActiveX標籤,它從透明變爲不透明使用'私人小組Worksheet_SelectionChange(BYVAL目標作爲範圍)運行時 如果Label1.BackStyle = fmBackStyleOpaque然後 Label1.BackStyle = fmBackStyleTransparent Else Label1。BACKSTYLE = fmBackStyleOpaque 結束如果 結束小組 ' –

+0

@StevenMartin我刪除它在任何情況下,其性能已通過用戶與工作簿工作時改變了最後一次。這些屬性對於我想實現的目標是必不可少的(例如透明度,位置等)。重新創建它,以便我可以再次使用它,顯然。關於您的測試,您將無法訪問單元格的SelectionChange事件,因爲標籤將覆蓋所述單元格(以便我可以在這些單元格的space_上使用MouseMove,MouseDown事件(而不是單元格本身) ...如果你知道我的意思 –

+0

@StevenMartin哦,還有一件事:正如我在我的文章中所說的,標籤**的Backstyle屬性已經是** fmBackStyleTransparent。它只是標籤不透明,作爲屬性表明它應該是 –

回答

0

該行後面所有需要做的事:

MapLabel.Object.BackStyle = fmBackStyleTransparent

將這個行:

ActiveSheet.Shapes(MapLabel.Name).Fill.Transparency = 1

我希望幫助。

P.S.如果你需要解釋,我會編輯我的答案。

+0

我在我的問題的簡化示例中測試了這個它的工作,但只有當沒有點擊標籤的表面。然而,在我的實際代碼中,我已經解決了這個問題,從一開始,用Private Sub MapLabel_Click() Sheet2.MapLabel.Visible = False Sheet2.MapLabel.Visible = True End Sub,所以我會標記這是一個答案,因爲它確實是我想要的。唯一不方便的是答案遲了一點,但後來比以前好得多。謝謝。 –

+0

首先歡迎您。是的,你是對的,當你點擊對象時你失去了透明度。而您的解決方案是刷新對象的最佳方式。 –

-1

我和你有同樣的問題,但在Word中。對我來說,解決辦法是做到以下幾點:

在設計模式:

  1. 在對象上右鍵單擊
  2. 導航到Switch to automatic form/Image>Wrapping>In front of the text
  3. 空圖片添加到您的標籤
+0

感謝您分享您的解決方案 - 也許它可以幫助其他人。不幸的是,在我的情況下,問題出現在Excel中,並試圖以編程方式在代碼中執行。正如我上面所說的,當在設計模式下做事時 - 即使在Excel中 - 它完美無瑕。不是在代碼中,但... –

+0

是的,我試圖做到這一點,對不起..它不適用於Excel。文本框OLEObject的屬性沒有設置背景圖像的選項:c(我在GIMP中做了一個透明png,但沒有將它加載到表單的地方) – Reverus