Excel VBA OLE OBJECT

#OLE Objectはどういう場合に発生するか
IEなどからエクセルシートにCTRL+A CTRL+C CTRL+Vでコピー
表形式のページはついついこんなことをしてみたくなりますが、こうした時にほしいのはテキストデータです。
ところがこんなとき、チェックボックスやコマンドボタンなどの余計なものがついてきます。

#OLEOBJECT
これはOLEOBJECTです。この集合(コレクション)はOLEOBJECTSです。本当はShapeオブジェクトの仲間です。

>ActiveX コントロール、またはワークシートにリンクあるいは埋め込まれている OLE オブジェクトを表します。
[OLEObject オブジェクト (Excel)]( https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/oleobject-object-excel)
>OLEObject オブジェクトは、 OLEObjects コレクションのメンバーです。 OLEObjects コレクションには、単一のワークシートのすべての OLE オブジェクトが含まれます。

```vb.net
Worksheets("sheet1").OLEObjects(1).Delete
```
これを応用すると以下のようになります。

```vb.net
Sub test()
'For Excel VBA
'Webページのテーブル(表)をコピペでExcelのシート(これをアクティブシートとします)に貼ることができたりします。
'しかしテキストボックスやチェックボックスまでコピペされて文字が見えない場合があります。
'このマクロでアクティブシートのオブジェクトをきれいさっぱり消し去ります。
'念のためShapeも消します。
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = ActiveSheet
Dim obj As OLEObject
Dim shp As Excel.Shape
Dim var
For Each obj In ws.OLEObjects
obj.Delete
Next
If ws.Shapes.Count > 0 Then
For Each shp In ws.Shapes
shp.Delete
Next
End If
End Sub
```

[シート上のコントロールの値クリア - moug]( https://www.moug.net/tech/exvba/0040034.html)
Office 97/2000
ワークシート上に配置したコントロールの値を一括で操作したい場合、例えば入力前の初期化処理などで値をクリアしたい場合、OLEObjectsコレクションとObjectプロパティーを用いると便利です。
サンプルでは数類のコントロールが配置されているワークシートで、各コントロールのNameプロパティーやProgIDから判断して値をクリアするサンプルが紹介されている。

[OLEObject メンバー (Excel)]( https://msdn.microsoft.com/ja-jp/library/office/ff841208.aspx)
[Worksheet.OLEObjects メソッド (Object)]( https://msdn.microsoft.com/ja-jp/library/microsoft.office.tools.excel.worksheet.oleobjects.aspx)
ワークシート上の単一の OLE オブジェクト (Microsoft.Office.Interop.Excel.OLEObject) または、すべての OLE オブジェクトのコレクション (Microsoft.Office.Interop.Excel.OLEObjects コレクション) のいずれかを表すオブジェクトを取得します。


### OLEObjectの変わった命令
#### [OLEObject.CopyPicture メソッド (Excel)]( https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/oleobject-copypicture-method-excel)
オブジェクトをクリップボードへピクチャ (画像) としてコピーします。バリアント型 ( Variant ) の値を使用します。
構文
式 . CopyPicture( Appearance, Format )
式OLEObject オブジェクトを表す変数です。

|名前|必須/省略可能 |データ型 | 説明 |
|:--:|:------------:|:-------:|:------:|
|Appearance|省略可能|XlPictureAppearance|ピクチャのコピー形式を指定します。既定値は xlScreen です。 |
|Format|省略可能|XlCopyPictureFormat|ピクチャの形式を指定します。既定値は xlPicture です。|

戻り値
バリアント型 (Variant)。

#####[XlPictureAppearance 列挙 (Excel)]( https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/xlpictureappearance-enumeration-excel)

|名前| 値 | 説明 |
|:--:|:--:|:------:|
|xlPrinter|2|ピクチャは印刷するときと同じ形でコピーされます。 |
|xlScreen|1|ピクチャは画面の表示にできる限り近い形でコピーされます。|

#####[XlCopyPictureFormat 列挙 (Excel)]( https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/xlcopypictureformat-enumeration-excel)
コピーされる画像の形式を指定します。

|名前| 値 | 説明 |
|:--:|:--:|:------:|
|xlBitmap|2|ビットマップ (.bmp, .jpg, .gif) |
|xlPicture|-4147|ドロー画像 (.png, .wmf, .mix)|

[VBAの「OLEObject」って 知恵袋]( https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1335832533)
[シートで ActiveX コントロールを使用する]( https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/using-activex-controls-on-sheets)

- ActiveX コントロールをアクティブにすると、一部の Microsoft Excel Visual Basic のメソッドやプロパティが使用できなくなります。たとえば、 Sort メソッドは、コントロールをアクティブにすると使用できません。この問題を解決するには、シート上の他の要素をアクティブにします。
- ActiveX コントロールで利用できる標準プロパティのほか、次のプロパティも Microsoft Excel の ActiveX コントロールで利用できます: BottomRightCell 、 LinkedCell 、 ListFillRange 、 Placement 、 PrintObject 、 TopLeftCell 、および ZOrder プロパティは、ActiveX コントロール名を使用して値の取得および設定ができます。
- ?Excel 5.0、および Excel95 のブック形式を使用して、Excel ブックを保存すると、ActiveX コントロール情報は失われます。
- シートの ActiveX コントロールのイベント プロシージャ内の Me キーワードは、コントロールではなく、シートを参照します。
- クラス モジュール以外のコントロールが含まれているシートで、コントロール名を使用する場合、使用するコントロール名にはシート名を付ける必要があります。
- Visual Basic コードで使用するコントロール名を変更するには、そのコントロールを選択して表示されたプロパティ ウィンドウで Name プロパティを設定します
- ActiveX コントロールは、 OLEObjects コレクションの OLEObject オブジェクトでも表されるため、そのコレクションのオブジェクトを使用してコントロールのプロパティを設定できます。
- OLEObject オブジェクトのプロパティとして表されない、コントロールのプロパティは Object プロパティを使用して実際のコントロール オブジェクトを取得して設定することができます。
- すべての OLE オブジェクトは Shapes コレクションのメンバーでもあるため、このコレクションを使用して、いくつかのコントロールにプロパティを設定できます。
- ワークシートの ActiveX コントロールは、2 つの名前を持ちます。シートを表示したときに [ 名前 ] ボックスでコントロールが含まれる図形の名前、および [ プロパティ ] ウィンドウの [(名前)] の右にあるセルでコントロールのコード名を確認できます。最初にワークシートに追加したコントロールでは、図形の名前とコード名が一致しています。
- しかし、図形の名前かコード名のどちらかを変更しても、もう片方の名前が一致するように自動的に変更されることはありません。
- コントロールのイベント プロシージャの場合は、コントロールのコード名を使います。
- Shapes または OLEObjects コレクションからコントロールを取得する場合は、コード名ではなく、図形の名前を使ってコントロールを指示します。