2016-09-10 40 views
0

我正在一個龐大的Excel文件,我需要插入多個單元格複選框,我需要那些盒子附加到他們出現的單元格結束,我需要輸出結果來說「現在」或「」現在他們說「真」或「假」的經文。到目前爲止,我有以下代碼來批量生成單元格,但現在我需要調整此代碼以將輸出更改爲「清除」或「」經文「True」或「False」。Excel VBA腳本插入多個複選框鏈接到單元格與是和否而不是真假

Sub AddCheckBoxes() 

Dim cb As CheckBox 
Dim myRange As Range, cel As Range 
Dim wks As Worksheet 

Set wks = Sheets("Sheet1") 

Set myRange = wks.Range("A1:A1000") 

For Each cel In myRange 

    Set cb = wks.CheckBoxes.Add(cel.Left, cel.Top, 30, 6) 


    With cb 

     .Caption = "" 
     .LinkedCell = cel.Address 

    End With 

Next 

End Sub 

任何人都可以幫我弄清楚這一點嗎?

+0

您可以使用條件格式和/或自定義格式http://superuser.com/questions/893412/how-to-get-text-instead-of-truefalse-in-excel – Slai

+0

使用複選框標題屬性 – NuWin

+0

我將有多個複選框列,這些列將需要不同的True/False值。例如在列A中,我需要標題說「是」或「否」而不是真/假,但是在B列中,我需要標題說「清除」或「」(又名空白)而不是真/假。所以在這種情況下不能使用條件格式。 – ReigningData

回答

0

enter image description here

Sub AddCheckBoxes() 

    Dim cb As CheckBox 
    Dim myRange As Range, cel As Range 
    Dim wks As Worksheet 

    Set wks = Sheets("Sheet1") 

    Set myRange = wks.Range("A1:A1000") 

    For Each cel In myRange 

     Set cb = wks.CheckBoxes.Add(cel.Left, cel.Top, 30, 6) 

     With cb 
      .Caption = "" 
      .OnAction = "ProcessCheckBox" 
     End With 

    Next 

End Sub 

Sub ProcessCheckBox() 
    Dim cb As CheckBox 
    With Sheets("Sheet1") 
     Set cb = .CheckBoxes(Application.Caller) 
     If Not cb Is Nothing Then cb.TopLeftCell = IIf(cb.Value = 1, "Cleared", "") 
    End With 
End Sub 

重要:ProcessCheckBox()模塊是一個標準模塊中。如果它是一個工作表模塊,您將收到此消息:

enter image description here

如果使代碼更靈活,你可以使用組合框的索引或名稱在Select Case語句來對你的最終決定輸出將是。


Sub ProcessCheckBox() 
    Dim cb As CheckBox 

    With Sheets("Sheet1") 

     Set cb = .CheckBoxes(Application.Caller) 
     If Not cb Is Nothing Then 

      Select Case cb.Index 
      Case 1, 2, 4 
       cb.TopLeftCell = IIf(cb.Value = 1, "Cleared", "") 
      Case 3, 5, 7 
       cb.TopLeftCell = IIf(cb.Value = 1, 1, 0) 
      Case Else 
       cb.TopLeftCell = IIf(cb.Value = 1, True, False) 
      End Select 

     End If 

    End With 
End Sub 
+0

ProcessCheckBox宏正在生成一條錯誤消息「無法運行宏'Book1!ProcessCheckBox'。該宏可能在此工作簿中不可用或者所有宏可能被禁用。我嘗試進入選項 - >信任中心 - >信任中心設置 - >宏設置 - >,並選擇信任訪問VBA項目對象模型和啓用所有宏(不推薦;潛在危險的代碼可以運行)任何建議? – ReigningData

+0

@ReigningData查看我更新後的修復答案。 –

+0

你真棒!這工作完美! – ReigningData

0

隱藏與真/假柱中,並用一個IF式插入另一列旁邊引用真/假(= IF(B1,「清除」,「不清零」))

Sub AddCheckBoxes() 

Dim cb As CheckBox 
Dim myRange As Range, cel As Range 
Dim wks As Worksheet 

Set wks = Sheets("Sheet1") 

Set myRange = wks.Range("A1:A1000") 

For Each cel In myRange 

    Set cb = wks.CheckBoxes.Add(cel.Left, cel.Top, 30, 6) 


    With cb 

     .Caption = "" 
     .LinkedCell = cel.Address 

    End With 

    cel.Offset(0, 1).FormulaR1C1 = "=IF(RC[-1],""Cleared"",""Not cleared"")" 

Next 

wks.Range("A:A").EntireColumn.Hidden = True 

End Sub 

您可能想調整列寬和文本對齊,因爲現在框與文本重疊。

1

,你可以採取Shapes方法類似如下:

Option Explicit 

Sub AddCheckBoxes()   
    With Sheets("Sheet1") 
     AddRangeCheckBoxes .Range("A1:A2"), "|YES\NO" 
     AddRangeCheckBoxes .Range("B1:B2"), "|Cleared\" 
    End With 
End Sub 

Sub AddRangeCheckBoxes(rng As Range, outputs As String) 
    Dim cel As Range 

    With rng.Parent 
     For Each cel In rng 
      With .Shapes.AddFormControl(xlCheckBox, cel.Left, cel.Top, 30, 6) 
       .TextFrame.Characters.Text = "" 
       .AlternativeText = cel.Address(False, False) & outputs 
       .OnAction = "UpdateCheckBox" 
      End With 
     Next cel 
    End With 
End Sub 

Sub UpdateCheckBox() 
    Dim cellAddr As String 
    Dim val As String 

    With Worksheets("Sheet1") 
     With .Shapes(Application.Caller) 
      cellAddr = Split(.AlternativeText, "|")(0) 
      val = Split(Split(.AlternativeText, "|")(1), "\")(IIf(.OLEFormat.Object.Value = 1, 0, 1)) 
     End With 
     .Range(cellAddr).Value = val 
    End With 
End Sub 
+0

我覺得我剽竊你的答案。我認爲如果我一直在玩[ScreenToGif](http://screentogif.codeplex.com/),我們會同時發佈。 –

+0

@ThomasInzina我的解決方案更通用,因爲您可以通過'Shape'對象的'AlternativeText'屬性爲不同的範圍複選框分配不同的輸出對,而無需編寫儘可能多的'UpdateCheckBox()'子目錄。我的第一個(也是更早的)解決方案與您的解決方案相同,但我感到不滿意,它只適用於與默認的「False/True」不同的固定輸出對。所以我在相當一段時間裏玩了一段時間,找到了不同的複選框的方式和_tag_不同的輸出值,好像OP對這樣一個更通用的解決方案不感興趣 – user3598756

+0

嘿,抱歉,我忘了給你+1。我喜歡你的解決方案,但我實際上更容易修改,因爲你可以在創建控件後進行修改。如果你願意,我可以追加一個可以模仿你的輸出的替代子。這樣你可以比較兩種方法。 –

相關問題