2017-10-10 76 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

相关问题