旅行好きのおしりトラブル対策グッズ3選

エクセルで作成した、出席簿にマクロで
土日などに赤線で罫線の間に縦に
オートシェィプ直線を引いています。
次に転出者の欄には、横に線をマクロで引いていますが
色が変えられません。
マクロ終了後もオートシェイプの線色は黒でも
、線を引くと赤のままです。
その線を選択して、色を変えないと
変えられない状態です。
マクロ終了前に、色をリセットする事は出来ませんか?
下記の内容がマクロの一部です。
よろしくお願いします。
If yobi = doyo Or yobi = niti Then
Cells(3, 2 + n).Activate
If yobi = niti Then
With Selection.Font
.ColorIndex = 3
End With
End If
ActiveSheet.Shapes.AddLine(110.25 + 21.75 * (n - 1), 42, 110.25 + 21.75 * (n - 1), 651).Select
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10 '10=赤色
End If
If yobi = "" Then
ActiveSheet.Shapes.AddLine(110.25 + 21.75 * (n - 1), 14.25, 110.25 + 21.75 * (n - 1), 651).Select
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8 '8=黒色
End If

このQ&Aに関連する最新のQ&A

A 回答 (4件)

> 次に線や図形を書いても赤がデフォルトになってしまいます。



記録マクロがベースになっているのでしょうか? なら、

Selection.ShapeRange.SetShapesDefaultProperties

といったオートシェープの規定値を設定するコードが紛れ込んでいる
可能性は?
    • good
    • 0

こんばんは。



こちらも、同じ現象は確認出来ませんが、それ自体は、トラブルのような気がします。
新規のブックでも同じ結果が出ますか?

たぶん、でないはずです。Excelのバージョンは、いくつですか?もう、そのマクロは、何度も繰り返ししていませんか?

マクロは、論理的には問題がありませんが、実務上はうまくありません。Excelのファイル型Biff8 は、オートシェイプの論理的な内部カウント(Long型なので、実務的な限界などありえないのですが)のリセットが出来ないので、最終的には、同じオートシェイプを繰り返すと不活性になってしまうようです。この問題が解決しても、AddLineを使っている限りは、うまくいかなくなってしまいます。

本来は、そのLine に一意(ユニーク)な名前をつけて、それを、Visible =False, True にしたり、色を替えたりします。それ以外には、一般的には、解決方法はないと思います。

なお、#2のimogasiさんの後半に書かれている方法でも、オートシェイプを削除しない限りは、indexが動きませんので、私の書いている内容とほぼ同じことです。

この回答への補足

ありがとうございます。
エクセルは2002SP3です。
出席簿にマクロで
1ヶ月分の日付と曜日を入れて
土日に赤線を引いています。
for nextで31日分繰り返して
IF土日で8本位引いています。
その後のマクロでも
マクロ終了後も
直線を引くと赤になってしまいます。
パレットで後から変更出来ますが、
パレットの指定に関係なく
次に線や図形を書いても赤がデフォルトになってしまいます。
トラブル(バグ)なんでしょうか?
よろしくお願いします。

補足日時:2007/02/12 23:27
    • good
    • 0

全てそうですが、オブジェクト(プログラムでウインドウ上に表示されているもの)は(1)インデックス番号(2)名前(3)その他(4)操作者がSELECTするなどで特定されます。

逆にそれのどれかが判らないと特定できません。
特定できないと、そのプロパティ・メソッドを働かせることはできません。
プログラムを組む上で苦労するのはこの点です。
ーー
一方、エクセルは特殊です。
エクセルのセル(Range)は位置が座標的配置で、番地というものが理解しやすく、位置が判りやすく、指定しやすくなってます。それでシートに現れている図形等のオブジェクトと関連付けたくなりますが、セルと本来主従関係や親子関係はどありません。セルの現在の位置に図形を位置させることができるだけです(また連動して動くよう設定できるだけです)。
http://park11.wakwak.com/~miko/Excel_Note/17-01_ …
の1の回りくどいやり方になる理由
Shape全体ならActiveSheet.DrawingObjectsで指定できます。
しかし今考えているShapeが何番なのか(Shapes(x)のxが判りません。
ーー
本題はそのことが理解出来ているかどうか良く考えてください。
シートに直線2つ、四角2つ、楕円2つぐらい貼り付けて下記を
実行してみて考えてください。
Sub test01()
For Each sp In ActiveSheet.Shapes
MsgBox sp.Name
' sp.Delete
Next
End Sub
Sub test02()
For i = 1 To ActiveSheet.Shapes.Count
MsgBox ActiveSheet.Shapes(i).Name
MsgBox ActiveSheet.DrawingObjects(i).Index
Next i
End Sub
ーーー
Selectの仕方の例と線の色、内部色
Sub test03()
ActiveSheet.DrawingObjects(5).Select
Selection.ShapeRange.Fill.ForeColor.RGB = RGB(100, 200, 61)
Selection.ShapeRange.Line.Weight = 5
Selection.ShapeRange.Line.ForeColor.SchemeColor = 6
End Sub
ーー
そのシェイプも線の色の変更設定(AddLineなど同時にする時以外の)
のコードは、マクロの記録で学べますので略。
    • good
    • 0

補足をお願いします


>マクロ終了後もオートシェイプの線色は黒でも、線を引くと赤のままです。
質問の意味が分かりません。EXCEL2003のマクロでオートシェイプで直線を引いた後その色を赤に変更し、その後に手動で別のオートシェイプの直線を引くと、その色は黒になりました。ですから「線を引くと赤のままです」が何を指しているか理解できませんでした。

質問が理解できていないので的外れかもしれませんが、カラーパレットを黒色(自動)に戻しておきたいということなら、ダミーで線を引き、その線(Selection)の色を自動(.SchemeColor = 64)に設定した後で線を削除する方法では解決しませんか?

この回答への補足

早速の回答ありがとうございます。
分かりにくい説明で申し訳ありません。
マクロで赤線を引いた後でも、
カラーパレット指定色と違って
オートシェイプの線も赤になります。
マクロの色指定を引きずってしまうのです。
マクロに詳しくありませんが、
色設定を解除できていないようです。
よろしくお願いします。

補足日時:2007/02/12 23:12
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QEXCEL VBAのshapeで線分の色指定

EXCEL VBAのshapeの下記のコードで複数の線分を描いていますが、ブレークポイントを設定してステップ送りすると最初の1本目の線分に指定した色が付かず黒の線分になります。ブレークポイントを設定しないで連続動作させると全て黒の線分になってしまいます。
shapeを使用している部分は、この他にワードアートの部分だけです。
ワードアート部分を全てコメントに変更しても動作は変わりません。

shape部分のコードは以下の通りです。
Worksheets("sheet1").Shapes.AddLine(beginx:=xA, beginy:=yA, endx:=xB, endy:=yB).Select
With Selection
.ShapeRange.Line.ForeColor.SchemeColor = 2
End With

ワードアートのコードは以下の通りです。
MyShape = Worksheets("深度図").Shapes.AddTextEffect(msoTextEffect1, str_C & str_D, "MS ゴシック", 9, msoTrue, msoFalse, x_pos, y_pos)

どなたかこのような経験をされた方がいらっしゃったら、回答をお願いします。

EXCEL VBAのshapeの下記のコードで複数の線分を描いていますが、ブレークポイントを設定してステップ送りすると最初の1本目の線分に指定した色が付かず黒の線分になります。ブレークポイントを設定しないで連続動作させると全て黒の線分になってしまいます。
shapeを使用している部分は、この他にワードアートの部分だけです。
ワードアート部分を全てコメントに変更しても動作は変わりません。

shape部分のコードは以下の通りです。
Worksheets("sheet1").Shapes.AddLine(beginx:=xA, beginy:=yA, endx:=xB, en...続きを読む

Aベストアンサー

マクロを記録すると Select~ とか、Active~ が良く出てくるけど、
これって選択状態にならなきゃいけない、つまりフォーカスを受け取れる
状態で無いと失敗するはずです。

ブレークポイントを指定すると、Active な Window はコードの画面では?
Active な Window しかフォーカスは受け取れませんから、Selection とか
全部使えないと思います。
(だから職業プログラマレベルの人は、Select~ とか、Active~ という
キーワードの無いプログラムを書きます)

 Dim MyShape As Excel.Shape
 Set MyShape = Worksheets("sheet1").Shapes("ShapeTest")
 MyShape.Fill.ForeColor.RGB = RGB(255, 0, 0)


人気Q&Aランキング

おすすめ情報