|    | 
     ご存知のように、マクロの記録の修正の基本は 
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 であるとは限らない 
ことに注意してください  
(渡辺ひかるさん『実用サンプルコレクション』 より (^^) 
 
 | 
     
    
   |