大家好,今天我準(zhǔn)備給大家分享一個(gè)關(guān)于在PowerPoint放映時(shí)ActiveX控件背景透明的問題,也許很多朋友很說,這有何難?設(shè)置其屬性不就得了。比如可以通過下面常規(guī)的方法進(jìn)行設(shè)置。
方法一:通過屬性窗口設(shè)置

圖1 通過屬性窗口設(shè)置ActiveX控件背景透明
方法二:通過后臺代碼的形式

圖2 通過后臺代碼形式設(shè)置ActiveX控件背景透明
上面的操作,從道理上講是沒錯(cuò)的,但是我指的是誰PPT放映時(shí),是否能夠絕對保證根據(jù)ActiveX控件背景之前設(shè)置的透明屬性呈現(xiàn)ActiveX控件背景透明效果呢?其實(shí),不然。根據(jù)我的嘗試,雖然可以事前對ActiveX控件背景進(jìn)行透明屬性設(shè)置,但往往放映時(shí),這個(gè)ActiveX控件背景依然存在。
怎么辦呢?根據(jù)我個(gè)人的探索嘗試,可以借助動(dòng)態(tài)獲取ActiveX控件所在的幻燈片背景色,讓這個(gè)背景色去填充ActiveX控件背景的形式,從“效果”上達(dá)到ActiveX控件背景透明的效果。
下面,我們就來講講如何實(shí)現(xiàn)吧!
一、在PPT中插入幾個(gè)ActiveX控件的界面布局

圖3 PPT中插入的ActiveX控件
二、從VBA后臺實(shí)現(xiàn)ActiveX控件背景透明的功能代碼
模塊1中的代碼:
Public Control_Original_BackColor_Value 'Control_Original_BackColor_Value--控件的原始背景色
Public Control_Original_ForeColor_Value 'Control_Original_ForeColor_Value_Value--控件的原始前景色
Sub OnSlideShowPageChange() '演示文檔放映時(shí)即刻觸發(fā)的事件
'如果當(dāng)前播放的演示文檔的幻燈片顯示窗口的預(yù)覽下,當(dāng)前的顯示定位為第一張幻燈片時(shí),做一次初始化試題工作(這樣就避免了每張幻燈 _
片跳變都要執(zhí)行無謂的浪費(fèi)資源式的初始化工作)
Set_ForeColor_Value = ActivePresentation.SlideMaster.Shapes(1).Fill.ForeColor.RGB '控件文字即將被設(shè)置的顏色為母版文字顏色
If ActivePresentation.SlideShowWindow.View.CurrentShowPosition = 1 Then
Dim ctr_single As Shape 'ctr_single為ActiveX控件(特別注意的是:PowerPoint幻燈片上面的控件皆作為圖形的形式訪問,要訪問這 _
些“圖形”式的ActiveX控件的屬性必須采用“圖形對象.OLEFormat.Object.屬性”的形式進(jìn)行)
Set ctr = Slide1.Shapes(1)
Control_Original_BackColor_Value = ctr.OLEFormat.Object.BackColor '存儲原始背景色
Control_Original_ForeColor_Value = ctr.OLEFormat.Object.ForeColor '存儲原始前景色
ControlType_Arr = Array("Label", "OptionButton", "CheckBox")
ControlName_Arr = Array("標(biāo)簽", "單選鈕", "復(fù)選框")
c = Slide1.Background.Fill.ForeColor.RGB '提取當(dāng)前幻燈片的背景色,存入臨時(shí)變量c中
For i = 1 To Slide1.Shapes.Count '由Slide1.Shapes.Count統(tǒng)計(jì)圖形的形式簡潔統(tǒng)計(jì)出多少個(gè)控件
Set ctr = Slide1.Shapes(i)
tn = TypeName(ctr.OLEFormat.Object)
p = Pos_In_A_Array(tn, ControlType_Arr)
If p <> -1 Then
Control_Prompt_Str = "第" & i & "個(gè)ActiveX控件“" & ControlName_Arr(p) & "”,類型[" & tn & "]" & Chr(10) & "背景色將被設(shè)為與所在幻燈片顏色同色(即控件背景色形式上的“透明”效果)"
MsgBox Control_Prompt_Str, vbInformation, "設(shè)置提示"
ctr.OLEFormat.Object.BackColor = c '設(shè)置控件的背景色為當(dāng)前幻燈片的背景色(即形成表面上的“背景透明”效果)
ctr.OLEFormat.Object.ForeColor = Set_ForeColor_Value '設(shè)置控件的文字顏色自適應(yīng)為幻燈片母版文字顏色
End If
Next
End If
End Sub
Sub OnSlideShowTerminate() '幻燈片終止放映后觸發(fā)恢復(fù)控件原有顏色的效果
Dim ctr_single As Shape 'ctr_single為ActiveX控件(特別注意的是:PowerPoint幻燈片上面的控件皆作為圖形的形式訪問,要訪問這 _
些“圖形”式的ActiveX控件的屬性必須采用“圖形對象.OLEFormat.Object.屬性”的形式進(jìn)行)
For i = 1 To Slide1.Shapes.Count
Set ctr = Slide1.Shapes(i)
ctr.OLEFormat.Object.BackColor = Control_Original_BackColor_Value
ctr.OLEFormat.Object.ForeColor = Control_Original_ForeColor_Value
Next
End Sub
Function Pos_In_A_Array(Type_Name, ControlType_Arr) As Variant '定位給定的類型名字在數(shù)組中選找到的位置,如果-1表示不存在該位置
For i = 0 To UBound(ControlType_Arr)
If Type_Name = ControlType_Arr(i) Then
Pos_In_A_Array = i
Exit For
End If
If i > UBound(ControlType_Arr) Then
Pos_In_A_Array = -1
End If
Next
End Function
三、測試實(shí)現(xiàn)ActiveX控件背景透明“效果”的展示
按<F5>鍵放映,可以看到如下效果

圖4 單選鈕控件背景設(shè)置顯示提示

圖5 點(diǎn)擊<確定>后的單選鈕控件背景透明展示及復(fù)選框控件背景設(shè)置顯示提示

圖6 點(diǎn)擊<確定>后的復(fù)選框控件背景透明展示及標(biāo)簽控件背景設(shè)置顯示提示

圖7 點(diǎn)擊<確定>后的標(biāo)簽控件背景透明展示

圖8 按<Esc>結(jié)束演示文檔放映后,單選鈕、復(fù)選框、標(biāo)簽控件背景恢復(fù)原色
四、技術(shù)小結(jié)
(一)我們充分運(yùn)用了獲取所在幻燈片的背景色的方式。如下代碼截圖

圖9 獲取當(dāng)前控件所在幻燈片的背景色
(二)同時(shí),立即用該背景色填充ActiveX控件背景的形式實(shí)現(xiàn)其背景在“效果”上透明的目的。如下代碼截圖

圖10 用幻燈片背景色填充控件背景色
好了,我們的分析就到這里,謝謝大家的關(guān)注(頭條號:跟我學(xué)office高級辦公)、推廣和點(diǎn)評哦,更感謝大家持續(xù)關(guān)注我后期退出的頭條原創(chuàng)作品!