[[20151117090323]] 『オートシェイプの色変更』(Tomy) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『オートシェイプの色変更』(Tomy)

下記のコードなのですが「参照が不正または不完全」とエラーが出ます。
間違いを教えてください。
Sub 色変更()

   Dim MyName As String
    MyName = ActiveSheet.Shapes(Application.Caller).Name
       ActiveSheet.Shapes (MyName)
        .Fill.ForeColor.RGB = RGB(255, 0, 0)
        .Line.ForeColor.RGB = RGB(0, 255, 0)
End Sub

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 >ActiveSheet.Shapes (MyName)
 >    .Fill.ForeColor.RGB = RGB(255, 0, 0)
 >    .Line.ForeColor.RGB = RGB(0, 255, 0)
 はWith忘れか?

 というかなぜシェイプの名前をとってからその名前のシェイプ、と余計な手間をかけるのだろうか?
 >Dim MyName As String
 >MyName = ActiveSheet.Shapes(Application.Caller).Name
 を消して

 >With ActiveSheet.Shapes(Application.Caller)
 >    .Fill.ForeColor.RGB = RGB(255, 0, 0)
 >    .Line.ForeColor.RGB = RGB(0, 255, 0)
 >End With
 か?

 Application.Caller
 については考慮していない。
 (どんな状況を想定しているのかわからないので)
(ねむねむ) 2015/11/17(火) 09:19

ねむねむさん
ありがとうございます。
良くわからないまま削除の事例を見て改良しました。
もう一つ教えてください。
図を青色に塗りつぶすにはどうすればよいのでしょうか?

(Tomy) 2015/11/17(火) 13:17


 横から失礼します。

 >>図を青色に

 青色といっても、いろんな青色があります。どの青色にしたいのか、それは Tomyさんが明確に示さなければいけませんね。

 いずれにしても ForeColor.RGB には 色番号を指定します。
 RGB(255, 0, 0) や  RGB(0, 255, 0) も、色番号を作り出す関数ですから、もちろんOKですけど、
 コードを見たときに何番か(というより何色か)がわかりにくいですね。

 たとえば

     .Fill.ForeColor.RGB = vbRed
     .Line.ForeColor.RGB = vbGreen

 といったVBA組み込みの色番号定数を使えばわかりやすいのでは?

 その色定数(8種類が定義されています)でいえば、青 は vbBlue (ないしは vbCyan) でしょうね。

(β) 2015/11/17(火) 14:14


 マクロの記録でオートシェイプに実際につけたい色をつける操作を記録してそれを参考にしてはどうか?
(ねむねむ) 2015/11/17(火) 14:21

βさん
ねむねむさん
ご指摘の箇所は理解しているつもりなんですが・・・
上手く塗りつぶせないのです。
 .Fill.ForeColor.RGB = vbRedこのコードが機能していないと思うのですが・・・
こんな不思議な事がおきるのでしょうか?

(Tomy) 2015/11/17(火) 22:41


 えっ?

 .Fill.ForeColor.RGB = RGB(255, 0, 0)

 これは機能して、それを以下に変えると

 .Fill.ForeColor.RGB = vbRed

 これが機能しないということですか?

 そんなことはないでしょ?

(β) 2015/11/17(火) 23:45


βさん
いろいろ試していたら今になってしまいました。ごめんなさい。
そこでわかったことですが、丸印を作るときに塗りつぶしを透明にしていると駄目だとかりました。
MyShape.Fill.Visible = msoFalseこのコードをMyShape.Fill.ForeColor.Brightness = 0にしました。
すると見事に着色したのですが。。。
この方法でよいのでしょうか、結果オーライなのですが少し疑問でお尋ねします。

(Tomy) 2015/11/19(木) 11:26


 塗りつぶしを透明にすれば、そりゃぁ、何色が塗られていようと、色は見えませんよね。

 ところで、MyShape.Fill.ForeColor.Brightness = 0 こうする理由は何でしょうか?

(β) 2015/11/19(木) 11:46


βさん
MyShape.Fill.ForeColor.Brightness = 0は古い
http://www.excel.studio-kazu.jp/kw/20050514151949.html
を見つけて利用しました。

自動記録を二つとり値の変わった個所が.ForeColor.Brightness = 0でしたから0が白とわかりました。

    ActiveSheet.Shapes.Range(Array("Oval 23")).Select
    With Selection.ShapeRange.Fill
        .Visible = msoTrue
        .ForeColor.ObjectThemeColor = msoThemeColorBackground1
        .ForeColor.TintAndShade = 0
        .ForeColor.Brightness = 0
        .Transparency = 0
        .Solid
    End With
なので透明から着色に変更はできないのでしょうか。

(Tomy) 2015/11/19(木) 12:29


 参照されたトピに Brightness って話題になっていましたっけ?

 それはそれとして

 >>自動記録を二つとり値の変わった個所が.ForeColor.Brightness = 0でしたから0が白とわかりました。

 正しい解釈ではありません。色の明るさで、1 から 0。1 が【最も明るい】、0 が【最も暗い】という意味です。
 結果的には、「もっとも明るい色調」は、「白」になりますが。

 新規ブックに1つだけシェープを配置してください。形、色は何でもOK。
 で、以下を実行してみてください。Brightness を 1 から 0 まで変化させていきます。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Test()

    Dim b As Long

    For b = 100 To 0 Step -1
        ActiveSheet.Shapes(1).Fill.ForeColor.Brightness = b / 100
        Sleep 100
        DoEvents
    Next

    MsgBox "いかがでしたか?"

End Sub

 でも、透明であれ Brightness であれ、何をしたかったのですか?

(β) 2015/11/19(木) 13:12


 もし、最初は透明、何かの条件で 赤ということなら Test3、最初は白、何かの条件で赤ということなら Test2 を参考にしてください。

 シート上の最初のシェープを処理します。

 Sub test2()
    With ActiveSheet.Shapes(1)
        .Fill.ForeColor.RGB = vbWhite
    End With

    Application.ScreenUpdating = True

    MsgBox "確認"

    With ActiveSheet.Shapes(1)
        .Fill.ForeColor.RGB = vbRed
    End With

    Application.ScreenUpdating = True

    MsgBox "確認"

 End Sub

 Sub test3()
    With ActiveSheet.Shapes(1)
        .Fill.Visible = msoFalse
    End With

    Application.ScreenUpdating = True

    MsgBox "確認"

    With ActiveSheet.Shapes(1)
        .Fill.ForeColor.RGB = vbRed
        .Fill.Visible = msoTrue
    End With

    Application.ScreenUpdating = True

    MsgBox "確認"

 End Sub

(β) 2015/11/19(木) 15:36


こんにちは。

>自動記録を二つとり値の変わった個所が.ForeColor.Brightness = 0でしたから0が白とわかりました。

悪いことは言いません。
ヘルプを読むようにしましょう。
自動記録の使い方をご存知のかたがヘルプも使えるようになれば鬼に金棒です。

ForeColorってなんなのか、Brightnessとはどういうことなのか、
ちゃんと分かれば、自分で対応が考えられますし、「たまたまうまくいった」ではなく、
確信を持って「狙いどおりうまく行った」と思えるようになります。
さらに。自分で考えて、応用も利かせられるようになります。

ただ、最初は読みづらいと思います。
Tomyさんがどうとかではなく、ヘルプの読みづらさには定評がありますので。
それでもしつこく読み続けていると、だんだん使えるようになります。

今回のご質問はヘルプを読み始めるちょうどいいタイミングだと、わたしには見えます。
強く強くお薦めします。

( 佳 ) 2015/11/19(木) 20:44


βさん
Testの事例、全部試してみました。
何となく意味は理解できます。ありがとうございました。
参照されたトピに Brightness って話題になっていましたっけ 意味が分かりませんね
流れは不要と思い引っかかっている個所だけで質問していました。
得意先ごとにカレンダーを作り、返品・値引きが来た日は〇印をオートシェイプで作り
処理した日に着色して漏れがないか確認できるようにしていました。
βさんのおかげで仕上がりました。
佳さん
努力します。

(Tomy) 2015/11/20(金) 11:39


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.