|    | 
     ▼すが分 さん: 
 
こんばんは 
 
その昔、上で申し上げたようなことで、ある程度シェープの階層を把握した時に 
その理解が正しいかどうかを確かめるコードを書いたことがあります。 
 
Sheet1 に 思いつくシェープ配置。テキストやキャプションがセットできるものについては 
それらもセット。 
(図や図形、フォームツールコントロールやコントロールツールボックスのコントロール、 
 さらには 入力規則 の▼ 等々) 
 
これらシェープをSheet2にリストアップします。 
2003時代に作ったものですから当然2007以降にでてきたものは対象外です。 
 
なお、別のシートに以下のそれぞれ2列のテーブルを記述しておいて、それら領域に 
"msoList" と "FCList" という名前をつけておきます。 
 
「msoList」 
 
1    msoAutoShape 
2    msoCallout 
3    msoChart 
4    msoComment 
5    msoFreeform 
6    msoGroup 
7    msoEmbeddedOLEObject 
8    msoFormControl 
9    msoLine 
10    msoLinkedOLEObject 
11    msoLinkedPicture 
12    msoOLEControlObject 
13    msoPicture 
14    msoPlaceholder 
15    msoTextEffect 
16    msoMedia 
17    msoTextBox 
18    msoScriptAnchor 
19    msoTable 
20    msoCanvas 
21    msoDiagram 
22    msoInk 
23    msoInkComment 
 
「FCList」 
 
0    xlButtonControl  
1    xlCheckBox  
2    xlDropDown  
3    xlEditBox  
4    xlGroupBox  
5    xlLabel  
6    xlListBox  
7    xlOptionButton  
8    xlScrollBar  
9    xlSpinner  
 
 
以下、コードです。 
 
Option Explicit 
 
Enum ReportItems 
  RIDummyS 
  objName 
  objtypen 
  objType 
  objTypename 
  objCaption 
  objValue 
  objProgid 
  RIDummyZ 
End Enum 
   
Sub Sample() 
  Dim obj As Shape 
  Dim i As Long 
  Dim ctr As Long 
  Dim v(1 To RIDummyZ - 1) 
  Dim ListSh As Worksheet 
   
  Set ListSh = Sheets("Sheet2") 
  With ListSh 
    .Cells.ClearContents 
    .Range("A1:G1").Value = Split("オンジェクト名 Type(MsoShapeType) Type TypeName Caption Value PtogID/FormControlType") 
  End With 
   
  ctr = 1 
   
  For Each obj In Sheets("Sheet1").Shapes 
   
    For i = LBound(v) To UBound(v) 
      v(i) = "#N/A" 
    Next 
     
    On Error Resume Next 
    v(objName) = obj.Name 
    v(objtypen) = Application.VLookup(obj.Type, Range("msoList"), 2, False) 
    v(objType) = obj.Type 
    v(objTypename) = TypeName(obj.DrawingObject) 
    If obj.Type = 12 Then 'OLEObject 
      v(objCaption) = obj.DrawingObject.Object.Caption 
      v(objValue) = obj.DrawingObject.Object.Value 
      v(objProgid) = obj.DrawingObject.progID 
    Else 
      v(objCaption) = obj.DrawingObject.Caption 
      v(objValue) = obj.DrawingObject.Value 
      v(objProgid) = Application.VLookup(obj.FormControlType, Range("FCList"), 2, False) 
    End If 
     
    On Error GoTo 0 
     
    ctr = ctr + 1 
    ListSh.Cells(ctr, 1).Resize(, UBound(v)).Value = v 
     
  Next 
   
  ListSh.Range("A1").CurrentRegion.Columns.AutoFit 
   
End Sub 
 | 
     
    
   |