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

Selectionではなく実際のShapeオブジェクトを使用します。選択が必ずしもシェイプになるとは限りません。 – Comintern

答えて

0

いくつかのものがあります。まず、選択を避けてください。それは必要ではありませんし、将来の頭痛や時間をたくさん節約します。第2に、Shapesオブジェクトからその名前で形状を参照することができます。ただし、コードで1つの図形のみを回転させることを前提としています。最後に、Sheets("Sheet2").Range("H8")の値が数値であることは確かですか?そうでない場合は、エラーが発生する可能性があります。以下のコードは、最初の2つの問題を処理します。それを超えると、エラーを特定するためのコードがさらに必要になります。

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

これは問題を解決したようです。はい、セルは常に数値になります(実際には、値を検索するために数式を使用しているため、値は入れませんでした)。私の問題は、マクロからコードをコピーしていたため、上記のことができた最高です。私はまともなプログラマーですが、VBAを完全に新しくしていないので、構文は実際にはわかりません。そして、私はセレクトを使うのが好きではありませんでしたが、上に置いたようにそれを置く方法はわかりませんでした。ありがとう! –

+0

@JeremyMorren全く心配はありません。誰かが私たちに光の経路を示すまで、私たちはすべてSelectを使い始める。詳細については、[このドキュメント](http://stackoverflow.com/documentation/excel-vba/1107/vba-best-practices/9292/avoid-using-select-or-activate#t=201607271311166684891)を参照してください。選択を避ける。ハッピーコーディング! – RGA

+0

@ JeremyMorren、あなたの問題が解決された場合は、答えを未承諾の質問のキューから削除するようにマークしてください – RGA

関連する問題