如何重置ActiveSheet上的ActiveX控件?解决运行时错误438
解决方法
错误原因
你代码里的ActiveSheet.OLEObject是单数形式,正确的ActiveX控件集合名称是复数的OLEObjects,这是触发运行时错误'438'的直接原因。另外,不是所有OLE控件都有Value属性,直接赋值会导致新的错误,需要先判断控件类型。
修正后的代码
Sub Reset_All_control_on_ActiveSheet() Dim ctrl As OLEObject ' 遍历工作表所有OLE控件(ActiveX控件) For Each ctrl In ActiveSheet.OLEObjects ' 只处理TextBox和ComboBox控件 Select Case progID(ctrl) Case "Forms.TextBox.1", "Forms.ComboBox.1" ctrl.Object.Value = "" End Select Next ctrl End Sub ' 辅助函数:获取控件的ProgID Function progID(ctrl As OLEObject) As String On Error Resume Next progID = ctrl.progID On Error GoTo 0 End Function
代码说明
- 用
ActiveSheet.OLEObjects(复数)遍历所有ActiveX控件,解决438错误。 - 通过
progID判断控件类型,只给TextBox和ComboBox设置空值,避免给标签、按钮等无Value属性的控件赋值出错。 - 控件的实际值需要通过
ctrl.Object.Value访问,直接用ctrl.Value在部分控件上也可能触发错误。
内容的提问来源于stack exchange,提问作者Peace
相关产品推荐
相关产品推荐

