2009-06-17 72 views
1

繼我之前的問題。通過VBA檢測對複選框的更改

客戶的要求是在報表上有複選框來禁用另一張表上的信息行。行被定義爲命名範圍,由P_XXXXXX格式化。 XXXXXX是一個唯一的標識符,也是行中的一個字段,所以我可以輕鬆地生成範圍名稱。

我遇到的問題是:

  • 點擊項目,然後關閉窗體後Excel詢問,如果我們想保存。這是不可取的。

我需要註冊發生在我生成的複選框上的更改事件。所以如果一個或多個更改可以通過並隱藏/取消隱藏相關範圍。

我添加的複選框的代碼如下所示:

 ' For each row... 

     ' check box in column 17(=Q). 
     Dim lCenter As Long 
     lCenter = rngCurrent.Width/4 ' not actual centre but close enough 
     With ActiveSheet.CheckBoxes.Add(rngCurrent.Left + lCenter, rngCurrent.Top - 2, rngCurrent.Width, rngCurrent.Height) 
      .Interior.ColorIndex = xlNone 
      .Caption = "" 
     End With 

那麼,你如何鏈接一個複選框的更改與子/功能?

回答

6

將複選框對象的OnAction屬性設置爲您希望在複選框處於選中狀態或未選中狀態時運行的子對象的名稱。

Sub MakeCB() 

    With ActiveSheet.CheckBoxes.Add(ActiveCell.Left + 0, ActiveCell.Top - 2, ActiveCell.Width, ActiveCell.Height) 
     .Interior.ColorIndex = xlNone 
     .Caption = "" 
     .OnAction = "CheckboxChange" 
    End With 

End Sub 

Sub CheckboxChange() 

    MsgBox "change" 

End Sub
+0

我把CheckboxChange()模塊和片材代碼隱藏在二者但兩者給我的錯誤「無法運行宏‘ent_cc_new_pb.xls!CheckboxChange’宏可能無法在此工作簿或所有可用宏可能被禁用'但是在打開工作簿時,它使我可以選擇啓用我同意的宏任何想法 – 2009-06-18 08:35:05

1

我不認爲有Excel.Checkbox控件可用的任何事件。嘗試使用MSForms複選框。你需要一個對「Microsoft Forms 2.0 Object Library」的引用 - 它不可再分發,但如果你使用的是VBA,那就沒問題。

然後你可以做這樣的事情,並處理以通常的方式活動:

''class level 
Private WithEvents m_Checkbox as MSForms.CheckBox 

Public Sub MakeCheckbox() 
    Set m_Checkbox = Activesheet.OLEObjects.Add("Forms.Checkbox.1") 
End Sub 

Private Sub m_Checkbox_Click() 
    ''Do stuff 
End Sub 

很明顯,你只能夠處理的複選框集數這樣 - 我建議創建一個容納每個複選框的類。