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