図形を描いてみよう(その2)
さて、とりあえず、図形が描けるようになりました。
前回のプログラムを見てみましょう。
1 2 3 |
Shapes("正方形/長方形 1").Fill.ForeColor.RGB = vbYellow Shapes("正方形/長方形 1").Line.Weight = 8 Shapes("正方形/長方形 1").Line.ForeColor.RGB = vbGreen |
これ、とっても大きな問題があります。
なんだかわかりますか?
この「正方形/長方形 1」の名前、毎回同じとは限らないんです。
図形を描いたり消したりするうちに、最後の数字がどんどん変わっていくんです。
その前に、まず、With~End Withというのを覚えましょう。
With というのは、主語をまとめる書き方です。
今回の例のプログラムを日本語に翻訳してみると、
そのまま翻訳してみた
・正方形/長方形 1 は、「図形の塗りつぶし」の色は黄色だよ。
・正方形/長方形 1 は、「線の太さ」の8ポイントだよ。
・正方形/長方形 1 は、「線の色は」は緑だよ。
のように翻訳できますよね。
ところで、日本語で同じ意味の文章を書くときは、主語を省略して、
主語をまとめた書き方
正方形/長方形 1 は、
・「図形の塗りつぶし」の色は黄色
・「線の太さ」の8ポイント
・「線の色は」は緑
だよ。
と書いても、同じ意味になりますよね。
これと同じことをプログラムで書くと、
1 2 3 4 5 |
With Shapes("正方形/長方形 1") .Fill.ForeColor.RGB = vbYellow .Line.Weight = 8 .Line.ForeColor.RGB = vbGreen End With |
このように書けます。With~End Withに挟まれたところは、同じ主語のことを説明しているよ、ということですね。
なんとなくわかりますか?
ここで、さらにもう一段階ジャンプします。準備はいいですか?
前回のプログラムをもう一度おさらいしてみましょう
1 2 3 |
Sub 図形() Shapes.AddShape msoShapeRectangle, 50, 50, 100, 200 End Sub |
1 2 3 4 5 |
Sub 色() Shapes("正方形/長方形 1").Fill.ForeColor.RGB = vbYellow Shapes("正方形/長方形 1").Line.Weight = 8 Shapes("正方形/長方形 1").Line.ForeColor.RGB = vbGreen End Sub |
このように、最初に長方形を描いてから、次に別のプログラムで、色や線を指定したのでした。
この二つのプログラムを翻訳してみましょう。
二つのプログラム
【図形】
新しく長方形を描いてね
【色】
正方形/長方形 1 は、「図形の塗りつぶし」の色は黄色だよ。
正方形/長方形 1 は、「線の太さ」の8ポイントだよ。
正方形/長方形 1 は、「線の色は」は緑だよ。
こんな感じですね。これを一つの文章にしてみましょう。
ひとつにまとめた
新しく長方形 を描いてね、
・「図形の塗りつぶし」の色は黄色
・「線の太さ」の8ポイント
・「線の色は」は緑
だよ。
こんな感じになりそうですよね。
Withをつかうと、これが一気に書けちゃうんです。
こんなふうに。
1 2 3 4 5 6 7 |
Sub 図形と色() With Shapes.AddShape(msoShapeRectangle, 50, 50, 100, 200) .Fill.ForeColor.RGB = vbYellow .Line.Weight = 8 .Line.ForeColor.RGB = vbGreen End With End Sub |
上の日本語の文章との対応、なんとなくわかりますか?
気を付けることがひとつ。
Withを使うときは、With Shapes.AddShape(msoShapeRectangle, 50, 50, 100, 200)
のようにShapes.AddShape
の後ろにつける引数を()でくくってあげる必要があるんです。
これはもう、決まりごとなので、そういうものなのだ、と覚えておきましょう。
これで、いちいち図形を特定しなくても、色や枠線を自由に設定することができるようになりました。
次回は、繰り返しや条件分岐を組み合わせて、図形をたくさん書いてみましょう。
次回予告
次回は、図形をたくさん描いてみようです。
おたのしみに。