【问题标题】:VBA ShapeRange.Rotation Property randomly stops workingVBA ShapeRange.Rotation 属性随机停止工作
【发布时间】:2016-07-27 21:04:47
【问题描述】:

我正在尝试旋转一个形状。下面是相关的sn-p。

Sheets("Sheet1").Shapes.Range(Array("Down Arrow 8")).Select
Selection.ShapeRange.Rotation =  90 + Sheets("Sheet2").Range("H8")

我的问题是最后一行随机有效,随机无效!我曾经将它作为一个数字(而不是一个字符串),但这拒绝工作!它工作正常,然后我对宏进行了一些更改,然后它有用地返回了错误 438 - 对象不支持此属性或方法。我摆弄,调试等(没有更改代码),它开始工作了!然后我做了一些更多的改变,它停止了工作,它似乎已经停止工作了。我从一个录制的宏中复制了这段代码。

我尝试过的: 使用 CStr() 将值转换为字符串 声明变量并使用变量

我真正不明白的是为什么它可以在我不更改代码的情况下工作,而他们在我不更改代码的情况下停止工作(即相关行)

【问题讨论】:

  • 使用实际的 Shape 对象,而不是 Selection。选择并不总是形状。

标签: vba excel


【解决方案1】:

一些事情。首先,避免选择。这不是必需的,将来会为您节省很多头痛和时间。其次,您可以直接从Shapes 对象中按名称引用该形状,假设您只打算使用代码旋转一个形状。最后,您确定Sheets("Sheet2").Range("H8") 中的值是数字吗?如果不是,这可能会导致错误。下面的代码处理前两个问题。除此之外,我们还需要查看更多代码来确定错误。

Sheets("Sheet1").Shapes("Down Arrow 8").Rotation = 90 + Sheets("Sheet2").Range("H8")

【讨论】:

  • 这似乎解决了问题。是的,单元格将始终是数字(实际上,我的错,我没有输入 .Value,因为它使用公式来搜索值)。我的问题是我从宏中复制了代码,所以上面是我能做的最好的。我是一个体面的程序员,但对 VBA 完全陌生,所以我真的不知道语法。而且,我不喜欢使用 Select,但我不知道如何像您在上面那样放置它。谢谢!
  • @JeremyMorren 完全不用担心。我们都从使用 Select 开始,直到有人向我们展示了通往光明的道路。查看this documentation 了解有关避免选择的更多详细信息。编码愉快!
  • @JeremyMorren,如果您的问题现已解决,请将答案标记为已接受,以便将其从未回答的问题队列中删除
猜你喜欢
  • 2014-04-11
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
相关资源
最近更新 更多