2016-07-27 181 views
0

我想旋转一个形状。以下是相关的片段。VBA ShapeRange.Rotation属性随机停止工作

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

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

我曾尝试:用 CStr的()将该值转换为字符串 声明一个变量,使用变量

我真的不明白的是,为什么会没有我的工作改变代码并且他们在没有我更改代码的情况下停止工作(即相关线路)

+0

使用实际的Shape对象,而不是选择。选择并不总是一个形状。 – Comintern

回答

0

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

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

这似乎解决了这个问题。是的,单元格将始终为数字(其实,我的不好,我没有放入.Value,因为它使用公式来搜索值)。我的问题是我从宏复制代码,所以上面是我能做的最好的。我是一名体面的程序员,但对VBA来说是全新的,所以我不太了解语法。而且,我不喜欢使用Select,但我不知道如何把它放在上面。谢谢! –

+0

@JeremyMorren完全不用担心。我们都开始使用选择,直到有人向我们展示了通向光的路径。查看[本文档](http://stackoverflow.com/documentation/excel-vba/1107/vba-best-practices/9292/avoid-using-select-or-activate#t=201607271311166684891)了解更多关于避免选择。快乐的编码! – RGA

+0

@JeremyMorren,如果您的问题现在已解决,请将答案标记为已接受,以将其从未答复的问题队列中移除 – RGA