| 
    
     |  | ご存知のように、マクロの記録の修正の基本は Select  Selection を取ることです。
 
 -------------------------------------------------
 たとえば、マクロの記録結果が以下のようであるとき、
 Range("B2").Select
 Selection.Copy
 Sheets("Sheet2").Select
 Range("B2").Select
 ActiveSheet.Paste
 Sheets("Sheet1").Select
 Application.CutCopyMode = False
 
 修正したコードは、次のようになります。
 Range("B2").Copy Worksheets("Sheet2").Range("B2")
 
 
 -------------------------------------------------
 図形(TextBox)にテキストを登録する作業を記録すると、
 以下のような記録コードが得られます。
 ActiveSheet.Shapes("buf").Select
 Selection.Characters.Text = "abc"
 
 Selectすることが目的ではなく、図形にテキストを登録することが
 目的なので、前のセルのコピー&ペィストと同じ方式で、
 1行目の .Selectと 2行目の Selection を取って、
 ActiveSheet.Shapes("buf").Characters.Text = "abc"
 と修正して、実行すると、エラーになってしまいます。
 
 これは、
 > ActiveSheet.Shapes("buf").Select
 で選択したオブジェクトと、
 2行目の
 > Selection
 の正体が、実は異なっているからです。
 
 記録マクロのコードの
 > ActiveSheet.Shapes("buf").Select
 の次に、
 MsgBox TypeName(Selection)
 を挿入して、確認してみてください。オブジェクトの型は Shape
 ではなく、 TextBox オブジェクトに変わっています。
 Shapes のメンバを選択すると、
 選択されたものは Excelオブジェクト(Rectangleとか Ovalとか
 Picture とか ChartObject とか... TextBoxなど)になるのです。
 Excelオブジェクトというのは昔からある図形関係のオブジェクト
 のことです。 Shape のほうは あとでExcelオブジェクトとその他
 図形関係のコメントFrameとかオートフィルタの▼マークなどを
 十把ひとからげにまとめた新しいオブジェクトです。
 
 図形のばあい、 .Select、Selectionをとって、1行で書く方法は
 すでに例示しましたように、
 Selection の正体であるTextBoxオブジェクトを使って、
 
 ActiveSheet.TextBoxes("buf").Characters.Text = "abc"
 
 とするか、
 
 ShapeオブジェクトとCharactersオブジェクトの間に TextFrame
 オブジェクトを介在させて(このTextFrameオブジェクトが Shape
 グループをExcel図形オブジェクトの一つであるTextBoxオブジェクト
 に変換してくれます)、一行で書くことです。
 
 ActiveSheet.Shapes("buf").TextFrame.Characters.Text = "abc"
 
 Selectされたオブジェクトが必ずしも Selection であるとは限らない
 ことに注意してください
 (渡辺ひかるさん『実用サンプルコレクション』 より (^^)
 
 |  |