[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オートシェイプの色変更』(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
(Tomy) 2015/11/19(木) 11:26
塗りつぶしを透明にすれば、そりゃぁ、何色が塗られていようと、色は見えませんよね。
ところで、MyShape.Fill.ForeColor.Brightness = 0 こうする理由は何でしょうか?
(β) 2015/11/19(木) 11:46
自動記録を二つとり値の変わった個所が.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
参照されたトピに Brightness って話題になっていましたっけ 意味が分かりませんね
流れは不要と思い引っかかっている個所だけで質問していました。
得意先ごとにカレンダーを作り、返品・値引きが来た日は〇印をオートシェイプで作り
処理した日に着色して漏れがないか確認できるようにしていました。
βさんのおかげで仕上がりました。
佳さん
努力します。
(Tomy) 2015/11/20(金) 11:39
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.