返回列表 上一主題 發帖

excel 產生多個核取方塊.

回復 8# GBKEE
回復 9# oobird

我用控制工具箱插入CheckBox1後,以右鍵選用出現的是「檢視程式碼」
我用oobird大9#的程式插入CheckBoxes後,以右鍵選用出現的是「指定巨集」
這是不一樣的物件嗎?

「檢視程式碼」與「指定巨集」的使用方式不一樣,請各位高手有沒有習慣性用那一種比較好用。

{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 9# oobird
回復 2# oobird

我用oobird超版2#的程式碼加上LinkedCell屬性也可以用來計算,但按右鍵選項中「指定巨集」就變成灰色不能選用。
OLEObjects.Add是否比CheckBoxes.Add使用上更有彈性?
  1. Sub 選取格_FormsCheckBox()
  2.     For Each C In Selection.Cells.SpecialCells(2)
  3.         Set b = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", _
  4.                                            Left:=C.Left, Top:=C.Top, Width:=C.Width, Height:=C.Height)
  5.         b.Object.Caption = C.Value
  6.         b.LinkedCell = C.Address '連結該位置以TRUE、FALSE表示,以利後續統計
  7.         'C.Value = False '起始值設定
  8.     Next
  9. End Sub
複製代碼
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 12# ML089


感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 stillfish00 於 2013-9-6 11:17 編輯

回復 12# ML089
翻了一下書,有寫到 Forms Control 和 ActiveX Control 各自優點,整理一下。

Forms Control :
    *可用在 Chart sheets,ActiveX Control 不能。
    *與工作表的結合較緊密,像"標籤"或"按鈕"可在公式列去參考,以動態地設定控制項文字。
        又如"清單方塊"可在其控制項的輸入範圍指定已定義的範圍名稱。
    *容易同時指定很多個控制項到同一個VBA程序,要達到同樣功能 ActiveX Control 需要比較複雜的物件類別的方法。
    *當使用多視窗或分割視窗時,ActiveX Control 只會作用在原視窗,Forms Control 會作用在任何視窗。

ActiveX Control :
    *ActiveX Control 控制項的外觀有較多屬性可以調整。
    *有比較多種類的控制項可使用。
    *可以回應控制項多種不同類型的事件,Forms Control 只能對應執行一個巨集。

TOP

回復 14# stillfish00
蠻不錯的詮釋,受教了!

TOP

回復 13# GBKEE
謝謝你,真是一圖勝百言,解說詳盡

回復 14# stillfish00
謝謝你,你這整理的資料可真寶貴,昨天在網路沒查詢到資料(應該是關鍵字沒用對)
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回報一下
4F GBKEE 大大的還是沒辦法使用..最後跳出小視窗顯示一個「 0 」
9F oobird 大大的可正常使用
但想請教額外問題,如果其中整行內的資料有變動,但不是全部.
如果我重新執行巨集的話,會蓋到前一次生成出來的核取方塊,造成兩個核取方塊重疊.
有辦法避免嗎??

TOP

回復 18# sworder12
最後跳出小視窗顯示一個「 0 」 請附檔看看
解決造成兩個核取方塊重疊.的程式碼
  1. Option Explicit
  2. Sub Ex()
  3.     Dim C As Variant, B As Object, I As Integer, Rng(1 To 2) As Range
  4.     With ActiveSheet
  5.         Set Rng(1) = .Range("A:A").SpecialCells(2)  '處裡 A欗有資料的文字的 CheckBoxe
  6.         If .CheckBoxes.Count > 1 Then
  7.             For Each C In .CheckBoxes
  8.                 If Not Intersect(C.TopLeftCell.Offset(, -1), Rng(1).EntireColumn) Is Nothing Then
  9.                     If C.TopLeftCell.Offset(, -1) = "" Then
  10.                         C.TopLeftCell.Offset(, 1) = ""
  11.                         C.Delete
  12.                     Else
  13.                         C.Characters.Text = C.TopLeftCell.Offset(, -1)
  14.                         If Rng(2) Is Nothing Then
  15.                             Set Rng(2) = C.TopLeftCell.Offset(, -1)
  16.                         Else
  17.                             Set Rng(2) = Union(Rng(2), C.TopLeftCell.Offset(, -1)) '.Offset(, -1)
  18.                         End If
  19.                     End If
  20.                 End If
  21.             Next
  22.         End If
  23.         For Each C In Rng(1)        'Rng(2): CheckBoxe 的TopLeftCell儲存格
  24.             If Rng(2) Is Nothing Then
  25.                 Set B = .CheckBoxes.Add(C(1, 2).Left, C.Top, C.Width, C.Height)
  26.                 B.Characters.Text = C
  27.                 B.LinkedCell = C.Offset(, 2).Address
  28.             ElseIf Intersect(C, Rng(2)) Is Nothing Then
  29.                 Set B = .CheckBoxes.Add(C(1, 2).Left, C.Top, C.Width, C.Height)
  30.                 B.Characters.Text = C
  31.                 B.LinkedCell = C.Offset(, 2).Address
  32.             End If
  33.         Next
  34.     End With
  35. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2013-9-9 06:09 編輯
回復  sworder12
最後跳出小視窗顯示一個「 0 」 請附檔看看
解決造成兩個核取方塊重疊.的程式碼
GBKEE 發表於 2013-9-8 13:56


97-2003版本以及2010版本我在家執行也一樣...


TOP

最後跳出小視窗顯示一個「 0 」 請附檔看看

活頁簿1.rar (6.26 KB)

另外在請教一個問題,如果如圖的格式跑掉,該往哪邊檢查?不知道google該怎麼搜尋...

TOP

        靜思自在 : 有多少力量就做多少事,不要心存等待,等待才會落空。
返回列表 上一主題