excel - 选择形状时如何修复“对象不支持此属性或方法”错误
问题描述
我在一张纸上创建了 3 个速度计WEstimate
,但是当我在另一张纸上更改信息时 ( FCalc
) 我得到了
运行时错误 438。对象不支持此属性或方法
我也尝试过使用,但每当我在工作表上输入我不想要的信息时Worksheets("WEstimate")
,它都会继续将我发送到工作表。希望这是足够的信息。我不知道我在做什么,所以非常感谢任何帮助。谢谢你。WEstimate
FCalc
Private Sub Worksheet_Calculate()
Application.ScreenUpdating = True
Worksheets("WEstimate").Calculate
Worksheets("WEstimate").Shapes.Range(Array("Group 2394")).Select
Selection.ShapeRange.Rotation = ActiveSheet.Range("W199").Value * 247
ActiveCell.Select
Worksheets("WEstimate").Shapes.Range(Array("Group 2312")).Select
Selection.ShapeRange.Rotation = ActiveSheet.Range("W200").Value * 247
ActiveCell.Select
Worksheets("WEstimate").Shapes.Range(Array("Group 2604")).Select
Selection.ShapeRange.Rotation = ActiveSheet.Range("W202").Value * 247
ActiveCell.Select
End Sub
解决方案
假设代码在 sheet 后面WEstimate
,并且您对 sheet 采取的某些操作FCalc
导致WEstimate
重新计算,错误的原因是您不能Select
在非活动工作表上执行某些操作。当FCalc
处于活动状态时,Selection
指的是在 上选择的任何内容FCalc
。为什么使用Select
Selection
orActive*
是一个坏主意的经典案例。
因此,解决方案是重构以避免依赖Select
Selection
或Active*
像这样的东西
Private Sub Worksheet_Calculate()
'Application.ScreenUpdating = True '<~~ Why?
'Worksheets("WEstimate").Calculate '<~~ This event is triggered by a recalc, so why do it again?
Dim Speedo As ShapeRange
Set Speedo = Me.Shapes.Range(Array("Group 2394")) '<~~ Can't select something on a non-active sheet
Speedo.Rotation = Me.Range("W199").Value * 247 '<~~ ActiveSheet may not refer to this sheet
' ActiveCell.Select '<~~ not needed now
Set Speedo = Me.Shapes.Range(Array("Group 2312"))
Speedo.Rotation = Me.Range("W200").Value * 247
Set Speedo = Me.Shapes.Range(Array("Group 2604"))
Speedo.Rotation = Me.Range("W202").Value * 247
End Sub
推荐阅读
- oracle - 如何将索引移动到另一个表空间
- python - PySide2 内部 C++ 对象已在提升的小部件中删除
- android - 如何在启动 UI 测试之前模拟 API?
- php - 我正在构建一个爬虫,它会无限循环。一旦获得要添加的数据,我想停止循环
- php - 未定义属性:App\Notifications\NewUserNotification::$id
- word-embedding - 如何从 RoBERTa 获得每个单词(令牌)的单个嵌入向量?
- swiftui - SwiftUI:删除导航栏上方的空间
- r - R:保存循环的结果
- plugins - twilio flex 排队回调和语音邮件反应应用程序未创建任务
- rust - 如何在不换行的情况下读取用户的输入?