2016-07-27 138 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