Excel VBA遍历ActiveX文本框按条件改背景色无效问题求助
解决VBA遍历ActiveX文本框无效果的问题
你的代码问题出在判断控件类型的方式不对——TypeName(OLEObj)返回的是OLEObject,而非你预期的TextBox,导致整个判断条件始终不成立,代码自然没有执行效果。
修正后的代码如下:
' 先把目标工作表存为变量,避免重复调用,更高效且不易出错 Dim targetSheet As Worksheet Set targetSheet = Worksheets(ws.Range("J2").Value) Dim OLEObj As OLEObject For Each OLEObj In targetSheet.OLEObjects ' 需判断OLE对象包裹的实际控件类型,而非OLEObject本身 If TypeName(OLEObj.Object) = "TextBox" Then If OLEObj.Object.Value = "R" Then OLEObj.Object.BackColor = RGB(255, 0, 0) End If End If Next OLEObj
额外补充两个优化细节:
- 将目标工作表赋值给变量
targetSheet,无需重复通过Worksheets(...)调用,既减少冗余计算,也能规避工作表切换引发的潜在问题 - 若你确定要处理的都是ActiveX文本框,也可以用
OLEObj.ProgID = "Forms.TextBox.1"来判断类型,效果一致
你之前单独指定TextBox212能生效,是因为直接调用了控件的具体名称,绕开了类型判断的错误。
内容的提问来源于stack exchange,提问作者DS_novice
相关产品推荐
相关产品推荐

