为多个复选框添加VBA-返回编译错误

时间:2018-10-01 20:40:44

标签: excel vba if-statement checkbox

我在一张纸上有70个复选框。

我想要每个复选框-单击以在该复选框周围填充一个矩形。 如果未单击复选框-矩形将不会被填充。

我的问题是我尝试将此代码应用于每个复选框-但我收到一个编译错误:“检测到boxcheck的编译错误模棱两可的名称”

如何防止编译错误? 注意:每个复选框都有其自己的唯一名称(1-70),每个矩形都有其自己的唯一名称(1-70)。这样,每个复选框仅应填充VBA IF / THEN代码引用的矩形。我不希望1个复选框填充所有矩形。

这是我的代码:

Sub BoxCheck()
    If ActiveSheet.Shapes("Check Box 1").ControlFormat.Value = 1 Then
        ActiveSheet.Shapes("Rectangle 1").Fill.ForeColor.SchemeColor = 3
    End If
    If ActiveSheet.Shapes("Check Box 1").ControlFormat.Value = -4146 Then
        ActiveSheet.Shapes("Rectangle 1").Fill.ForeColor.SchemeColor = 1
    End If
End Sub

2 个答案:

答案 0 :(得分:2)

如果模块中有多个子名称完全相同,则可能会引发错误。如果您复制原始代码或下面的代码,而只需将#替换为与其相关的矩形和框号,则可能会清除错误。

Sub BoxCheck#()
    If ActiveSheet.Shapes("Check Box #").ControlFormat.Value = 1 Then
        ActiveSheet.Shapes("Rectangle #").Fill.ForeColor.SchemeColor = 3
    End If
    If ActiveSheet.Shapes("Check Box #").ControlFormat.Value = -4146 Then
        ActiveSheet.Shapes("Rectangle #").Fill.ForeColor.SchemeColor = 1
    End If
End Sub

另一种选择是将每个BoxCheck放在不同的模块中,但这似乎过多了,特别是因为您有70个

答案 1 :(得分:1)

您可以将所有复选框链接到单个子项,并使用 cryRpt.SetParameterValue("SignClient", "~/Signature.ashx?IdAttach=4&Typ=2") cryRpt.SetParameterValue("SignClient", HttpContext.Current.Server.MapPath("/Signature.ashx") & "?IdAttach=4&Typ=2") cryRpt.SetParameterValue("SignClient", "http://localhost:63888/Signature.ashx?IdAttach=4&Typ=2") 找出哪个叫方法:

Application.Caller