はVBA

2017-01-20 4 views
3

の名前付き形状のインデックス番号を見つけるために、どのように私は、しかし、形状は、私が含まれていない形状を選択はVBA

がありませんでした、次のコード

for i=1 to activedocument.Shapes.count : debug.Print activedocument.shapes(i).name : next 

を走り、形状のリストを得ました名前を持っていますdebug.print selection.Shaperange.name

インデックスを見つけてここで何が起こっているのかを知るにはどうすればいいですか?

EDITは:次のコードは、問題がactivedocument.shapesは本体のみの話では形状を返すことにした私のすべての図形

Dim i 
Dim rngStory As Word.Range 

For Each rngStory In ActiveDocument.StoryRanges 
    For Each i In rngStory.ShapeRange 
     Debug.Print rngStory.StoryType & ": " & i.name 
    Next 
Next 

私を見つけました。上記のコードはすべての範囲を巡回するので、すべての形状が見つかります。

しかし、これは形状インデックスを取得する方法の中心的な問題にはまだ答えません。

+0

は '私は= 0 to' ...ただの勘を試してみてください。とにかく、通常は '.index'プロパティがありますが、シェイプについてはわかりません。 – vacip

+0

あなたは 'For'の代わりに' For Each'ループを試すことができますか?複数の図形を含む図形のように少し聞こえる。また、生成されたコードをチェックするためにShapeを選択するマクロを記録します。 – Slai

+1

私の最初ですが、nope i = 0は存在しません。テストされた.count +1はあまりにも面白いことが起こった場合に役立ちます。 –

答えて

-1

これは私のために働く。コントロールの

Wordをワークシート名と名前を指定します。

Public Function GetShapeIndex(ByVal strName As String) As Long 

    GetShapeIndex = ActiveDocument.Shapes(strName).ID 

End Function 

Excelを:

Public Function GetShapeIndex(ByVal strWorksheet As String, ByVal strName As String) As Long 

    GetShapeIndex = Worksheets(strWorksheet).Shapes(strName).ID 

End Function 
+0

私はMS-Wordにいます。しかし、誰かがExcelでこれを将来必要とする場合に備えて、これを残してください。 –

+0

Word版を含むように編集 –

+1

'Shape.ID'を' Index'と混同しないでください。他の図形を追加/削除すると '.ID'は更新されません。 '.Shapes'コレクションのインデックスはです。 (これをテストする:3つの図形を追加するDebug.printを '.ID'で削除する2番目のものを削除し、IDと' ThisDocument.Shapes(i) 'で3番目の図形にアクセスしよう。 。 '.Shapes'がコレクションであるため、' Index's/indexのリストは別にありません。これは回避策です:http://stackoverflow.com/questions/5527073/get-shape-by-id-or-name –