|
▼すが分 さん:
こんばんは
その昔、上で申し上げたようなことで、ある程度シェープの階層を把握した時に
その理解が正しいかどうかを確かめるコードを書いたことがあります。
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
|
|