2013-10-15 209 views
1

嗨,我是Excel VBA的新手,需要別人的幫助。以下是我所期待的:Excel VBA表格複選框

如果某個無關聯(表)複選框(?topleftcell)如下它選中,那麼 一定的複選框(.offset?)將被檢查過(如果它們還沒有)

我無法使用單元格名稱,因爲上面的相同代碼將應用於一堆列。

這是我有什麼樣的

Set aaa = ActiveSheet.CheckBoxes(Application.Caller) 
With aaa.TopLeftCell 
    If aaa.Value = 1 Then 
     rsp = MsgBox("Check boxes below?", 4) 
     If rsp = vbYes Then 
      certain checkboxes(.offset?) below will be unchecked & 
      .offset(0,0).value= "na" 
+0

使用'.topleftcell'是不可靠的,因爲如果行/列縮小/增長,那麼你的代碼將失敗。 1列中有多少個複選框? –

+0

實際上,如果列增長或縮小,它不會影響上面模塊鏈接到的複選框的位置。該複選框將始終位於頂部。現在,我有15列,但只希望某些檢查頂部最複選框檢查 – Joe

+0

如果行增長/收縮? –

回答

0

比方說,您的複選框被放在如下圖所示的形象。我故意沒有調整它們。

enter image description here

確定這裏是一個小把戲,我們將使用。點擊column 1中的所有複選框,然後點擊Format Control。接下來轉到Alt Text選項卡並鍵入1。對於第2列複選框,請在Alt text中鍵入2。對所有15列重複此操作。

enter image description here

現在,將下面的宏所有的頂級複選框。現在

Sub CheckBox_Click() 
    Dim shp As Shape, MainShp As Shape 
    Dim Alttext As String 

    '~~> Get the checkbox which called the macro 
    Set MainShp = ActiveSheet.Shapes(Application.Caller) 
    '~~> Get it's alternate text 
    Alttext = MainShp.AlternativeText 

    '~~> Loop through all checkboxes except the checkbox which called it 
    '~~> and check for their alt text 
    For Each shp In ActiveSheet.Shapes 
     If shp.Name <> MainShp.Name And shp.AlternativeText = Alttext Then 
      '~~> If the top checkbox is checked then set the rest as checked 
      If MainShp.OLEFormat.Object.Value = 1 Then 
       shp.OLEFormat.Object.Value = 1 
      Else 
       shp.OLEFormat.Object.Value = 0 
      End If 
     End If 
    Next 
End Sub 

當你點擊最上面的複選框,然後將檢查以下所有具有相同Alt text作爲頂部的複選框的複選框。

+0

我真的很感激你的時間。我很擔心,因爲正如我所提到的,我並沒有把所有的複選框都鎖定在下面。只有「某些」的。儘管你的方法可行,但我仍然希望能夠繼續使用我的代碼,並且可能會沿用使用intersect,topleftcell.offset的某種方式。在這裏可以簡單地使用.offset而不鏈接到我的單元格,或者如何使用包含chekbox的單元格的左側,頂部,高度和重量。 – Joe

+0

'我沒有把所有的細胞都放在下面檢查。「細胞?或複選框? –

+0

如果沒有,我可以繼續使用你的代碼,但它需要工作,所以只有特定的定義複選框沒有被選中。例如,如果頂部複選框被選中,那麼3和5複選框也需要被選中。再次感謝 – Joe