零基礎學Excel VBA-WE017「VBA 冷門的複選框應用」

一、簡單演示

零基礎學Excel VBA-WE017「VBA 冷門的複選框應用」

零基礎學Excel VBA-WE017「VBA 冷門的複選框應用」

零基礎學Excel VBA-WE017「VBA 冷門的複選框應用」

二、關鍵對象/方法的分析

OLEObject

包括 ActiveX 控件,一個鏈接式或內嵌 OLE 對象。我們這期只涉及 ActiveX控件。

什麼是 ActiveX 控件呢?其實就是 開發工具 菜單這裡,我們今天的主角 複選框,就在這裡。

零基礎學Excel VBA-WE017「VBA 冷門的複選框應用」

這些控件,用一個叫程序設計標識符的代號來標識,程序設計標識符的縮寫為 ProgID, 是一串沒有空格的字符串:

零基礎學Excel VBA-WE017「VBA 冷門的複選框應用」

ActiveX 控件的屬性非常多,包括 Shape 常見的一些屬性,它都有,比如:

  • Left,左側距離
  • Top,頂端距離
  • Width,寬度
  • Height,高度
  • TopLeftCell,左上角所在的單元格

Placement,與所在的單元格之間的附屬關係

此外,它還有些比較少見的屬性,比如:

  • MousePointer,鼠標指針的樣式
  • TripleState,僅對複選框或切換按鈕有效,增加第三種選擇狀態
  • SpecialEffect,改變樣式
  • Caption,標題
  • GroupName,組別
  • LinkedCell,與控件關聯的單元格

等等,還有很多。

但還好,這些控件可用的方法很少,基本上,我們把這些控件創建出來,調整好需要的樣式,使用就可以了。

三、用法展示及說明

1. 用宏生成複選框,並定義屬性

為了方便,我們用宏自動生成所需要的複選框。

這個表格,我們先把複選框都刪掉。

我們看一下這個刪除的宏,其實就一個 For Each 語句。

後面這個取值,把答案區域還原,只是方便測試用。

刪除完了,我們再創建一次,創建出來的複選框,位置是固定的,左鍵右鍵都拉不動。

複選框,在菜單這裡,也可以手動進行插入,而且有兩種不同的複選框:

第一種,在插入菜單這裡——

零基礎學Excel VBA-WE017「VBA 冷門的複選框應用」

第二種,在開發工具這裡——

零基礎學Excel VBA-WE017「VBA 冷門的複選框應用」

注意,我們手動插入這些控件以後, WPS 會自動進入設計模式,這個模式下,所有控件都是可以移動的。

把設計模式關掉,現在再試試——

在 插入 菜單中的複選框,通過右鍵選中後,是可以進行移動的。

而在 開發工具 菜單中的複選框,跟我們宏所生成的,是一樣的,位置固定的。

我們再試試 刪除複選框 這個按鈕,有意思的是,插入 菜單中的複選框,並沒有被刪掉。為什麼呢?

我們刪除的宏,是對 OLEObject 進行選擇,但在 插入 菜單這裡的控件,都不屬於 OLEObject。

比如說,我們常用的這個按鈕,它屬於 Button。而這個複選框,它屬於 CheckBoxes,如果要選擇它們,可以用下面的語句:

For Each cb In ActiveSheet.CheckBoxes

cb.Delete

Next

插入 菜單這裡的控件,可以理解為是經過了簡化和美化的,屬性非常少,適合簡單使用場景。

而 開發工具 菜單這裡的,則有非常多的屬性,跟宏搭配使用,更加合適。

好,再次生成複選框,手動刪掉添加的這個,繼續看我們的宏語句。

這裡,又用到了 rmax,這個變量我非常喜歡用,這樣子,我們在工作表中增減新的行,宏也不用動了,一勞永逸,懶人,總得想些懶招。

接著下一句,Forms.checkbox.1 就是複選框的標識符,然後前面加個 With,這樣,創建以後,可以非常方便的指定一系列的屬性。

Height,試幾個數字以後,選個大小最合適的就可以了。

Width,Left 和 Top 這裡,用到了對應單元格的寬度和高度,還有一些簡單公式,讓生成的複選框,可以自動適配單元格。

接著的後面這些,就是對複選框的一些設置,注意個地方,就是 .Object,有的屬性不要加這個,有的屬於又需要,至於什麼標準,幫助說明也沒有提,而且最過分的是,插入 菜單中的複選框,跟我們現在宏這裡創建的複選框,命令的用法也不一樣。具體什麼區別,有興趣的朋友可以自己試試——沒興趣就算了,反正試出來也沒多大用處。

另外還有一個,就是 TripleState 這個屬性,設置為 True 以後,複選框在現在打勾和空白兩種狀態的基礎上,再添加一種淺色打勾的狀態。

2. 結果輸出為PDF

我們來到另外一個子過程 CheckAnswer() 。比較簡單的一個子過程,就是把 Excel 另存為 PDF 格式,基本是些格式化的語句了,不囉嗦。

好了,本期的內容就這樣,本期的宏代碼,並不實用,但希望通過本期的介紹,能為大家增添一種新的做表格的元素。而且,也是後面將會介紹的用戶窗體的基礎。


分享到:


相關文章: