将ActiveX复选框文本合并到指定单元格的宏实现问题
问题解决:将选中的ActiveX复选框文本合并到D9
完全可行,你的代码报错主要有两个原因:
- 遍历ActiveX控件的方式不对,直接用
Controls在工作表模块里无法正确获取ActiveX复选框,得用OLEObjects来遍历; - 当没有选中任何复选框时,
ans是空字符串,执行Left(ans, Len(ans)-1)会因为参数为负数报错,这也是触发错误提示的原因。
修正后的代码如下:
Private Sub MergeCheckedBoxText() Dim ans As String Dim oleObj As OLEObject ' 遍历工作表中的所有OLE对象(即ActiveX控件) For Each oleObj In Me.OLEObjects ' 判断是否是ActiveX复选框且已选中 If TypeName(oleObj.Object) = "CheckBox" And oleObj.Object.Value = True Then ans = ans & oleObj.Object.Caption & "," End If Next oleObj ' 处理选中内容:如果有选中项,去掉最后一个逗号;否则提示 If Len(ans) > 0 Then ActiveSheet.Cells(9, 4).Value = Left(ans, Len(ans) - 1) Else MsgBox "你未选择任何PPE要求" End If End Sub
关键说明:
- 用
Me.OLEObjects遍历当前工作表的所有ActiveX控件,确保能正确找到复选框; - 先判断
ans的长度再处理,避免空字符串时的报错; - 用
TypeName(oleObj.Object)准确判断是否为ActiveX复选框,比直接判断控件名称更可靠。
内容的提问来源于stack exchange,提问作者Annerley Flynn
相关产品推荐
相关产品推荐

