选中一个复选框

时间:2015-08-27 14:17:06

标签: vba excel-vba excel

我有一段代码只有在有很多复选框时才有效。但是当我只有一个复选框时,代码就会出错。基本上我希望宏做的是选择ckeckbox作为对象并将其与一个单元格对齐,如果有多个复选框,它也应该工作。能否请你帮忙? 提前谢谢了。请参阅随附的代码

{{1}}

1 个答案:

答案 0 :(得分:1)

您可以在其他形状上对齐复选框(或任何形状),或在左侧属性的单元格上对齐。

示例,对于要在单元格B5上对齐的工作表中的ActiveX复选框:

Sheets("Sheet1").Shapes("Checkbox_1").Left = Sheets("Sheet1").Range("B5").Left

在你的情况下(适应它):

Sheets("Analysis Line Cupboards by Pick").Shapes("Checkbox name").Left = cell.left

或者,如果您有多个复选框,请为它们指定适当的名称并循环显示它们。例如,他们的名字可能是chbx_A,chbx_Hello,chbx_10等等。

Sub AlignCHBX()
    dim shp as shape
    for each shp in Sheets("Analysis Line Cupboards by Pick").Shapes
        if shp.name like "chbx*" then shp.left = Sheets("Analysis Line Cupboards by Pick").Range("B1").Left
    next
End sub

这将验证形状的名称是否以chbx开头,以避免移动其他形状。您也可以使用它来区分某些复选框组!

对于非ActiveX ActiveX复选框,请使用以下语法引用它左侧,例如:

Sheets("Sheet1").OLEObjects("chbx_A").Left

对于它的价值:

Sheets("Sheet1").OLEObjects("chbx_A").Object.Value

对于.Top,它的工作方式相同。 .Left.Top属性是以像素为单位测量的数值。如果你想进入一个绝对位置,你可以写Sheets("Sheet1").OLEObjects("chbx_A").Left = 150为例。当您将形状左侧=左侧的单元格设置为左侧时,代码实际上会查看单元格左侧位置的绝对值,并将其赋予该形状。如果我可以详细说明,你可以写:

 dim nbPosition as Double
 nbPosition = ActiveSheet.Range("B5").Left
 debug.print nbPosition 'It could say 40, for example, depending on column width
 ActiveSheets.Shapes("Shape1").Left = nbPosition + 10 'Will send it 10 pixels further than nbPosition