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