2017-10-10 84 views
0

我試圖讓宏發送msgbox,以防活動表(ActiveX)的任何複選框被選中。Excel - 如果所有複選框(ActiveX)未選中,發送msgbox

我不知道爲什麼,但是當我運行宏它的跳線「X = X + 1」即使我有一個複選框選中...

有人能幫助我嗎?

Private Sub adecoagrobox1_Click() 


If adecoagrobox1.Value = True Then 
    On Error Resume Next 
    ThisWorkbook.Sheets("Comps_pivot").PivotTables("compspivot1").AddDataField Sheets("Comps_pivot").PivotTables(_ 
    "compspivot1").PivotFields("Adecoagro"), "Adecoagro ", xlSum 
Else 
    On Error Resume Next 
    ThisWorkbook.Sheets("Comps_pivot").PivotTables("compspivot1").PivotFields("Adecoagro "). _ 
    Orientation = xlHidden 

End If 

Dim control as OLEObject 
Dim x as integer 
x = x + 1 

    For Each control In ActiveSheet.OLEObjects 
If TypeName(control.Object) = "Checkbox" And control.Object.Value = 1 Then 
x = x + 1 
End If 
Next control 

If x = 0 Then 
MsgBox ("You must select at least one option") 
On Error Resume Next 
adecoagrobox1.Value = True 
ThisWorkbook.Sheets("Comps_pivot").PivotTables("compspivot1").AddDataField Sheets("Comps_pivot").PivotTables(_ 
    "compspivot1").PivotFields("Adecoagro"), "Adecoagro ", xlSum 

End If 


End Sub 

非常感謝提前!

+1

刪除'上的錯誤恢復Next'報表,看看有什麼錯誤您遇到 – YowE3K

+0

並注意您的測試FO r'如果x = 0那麼''是沒有意義的,因爲在Dim x as integer後緊跟着一個'x = x + 1'(hmmm,爲什麼不是'integer'中的'i'大寫 - IDE應該自動改變這個?!?!),這意味着'x'將始終至少爲'1'。 – YowE3K

+0

嗨!感謝你及時的答覆! 當我運行宏時,它總是跳轉到x = x + 1 ...因此x總是等於0. 當複選框被選中時,它不會被讀取... x = 0表示沒有選中複選框,它應該顯示msgbox –

回答

1

這裏是發生了什麼

Dim x as integer 

的整數的默認值是0,所以X被設置爲0。

x = x + 1 

馬上你遞增並將其設置爲1

If x = 0 Then 
MsgBox ("You must select at least one option") 

所以上述條件永遠不會滿足

刪除行X = X + 1只是聲明之後,然後嘗試

+0

嘿!感謝你及時的答覆!我的意圖是,如果有任何複選框被檢查在activesheet(總共9),x應該高於零。 如果沒有複選框被選中,x應該是零,它應該發送一個msgbox。 問題是,即使當我檢查複選框時,它讀取的x爲0. –

0

這是一個非常愚蠢的錯誤......

代替CheckBox的B的必須是大寫字母......所以複選框而在同一行1

兩個錯誤,而不是複選框

也是如此,而不是

+0

但這仍然不能解釋爲什麼第一個'x = x + 1'被忽略。 – YowE3K

+0

@Leonardo Marcondes,如果這解決了您的問題,您是否能夠接受您的答案,以便該線程被標記爲「已解決」,而其他人不會花費時間來解決您的問題!謝謝。 –

+0

@BharatAnand問題是,這**不**解決問題。有** **兩行代碼因某些原因被跳過,並且在此答案中提出的更改只解釋了**一行**被跳過的原因。 – YowE3K