• 締切済み

エクセル マクロで引いた線の色設定が戻せない

エクセルで作成した、出席簿にマクロで 土日などに赤線で罫線の間に縦に オートシェィプ直線を引いています。 次に転出者の欄には、横に線をマクロで引いていますが 色が変えられません。 マクロ終了後もオートシェイプの線色は黒でも 、線を引くと赤のままです。 その線を選択して、色を変えないと 変えられない状態です。 マクロ終了前に、色をリセットする事は出来ませんか? 下記の内容がマクロの一部です。 よろしくお願いします。 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

みんなの回答

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

> 次に線や図形を書いても赤がデフォルトになってしまいます。 記録マクロがベースになっているのでしょうか? なら、 Selection.ShapeRange.SetShapesDefaultProperties といったオートシェープの規定値を設定するコードが紛れ込んでいる 可能性は?

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 こちらも、同じ現象は確認出来ませんが、それ自体は、トラブルのような気がします。 新規のブックでも同じ結果が出ますか? たぶん、でないはずです。Excelのバージョンは、いくつですか?もう、そのマクロは、何度も繰り返ししていませんか? マクロは、論理的には問題がありませんが、実務上はうまくありません。Excelのファイル型Biff8 は、オートシェイプの論理的な内部カウント(Long型なので、実務的な限界などありえないのですが)のリセットが出来ないので、最終的には、同じオートシェイプを繰り返すと不活性になってしまうようです。この問題が解決しても、AddLineを使っている限りは、うまくいかなくなってしまいます。 本来は、そのLine に一意(ユニーク)な名前をつけて、それを、Visible =False, True にしたり、色を替えたりします。それ以外には、一般的には、解決方法はないと思います。 なお、#2のimogasiさんの後半に書かれている方法でも、オートシェイプを削除しない限りは、indexが動きませんので、私の書いている内容とほぼ同じことです。

lietti
質問者

補足

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

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

全てそうですが、オブジェクト(プログラムでウインドウ上に表示されているもの)は(1)インデックス番号(2)名前(3)その他(4)操作者がSELECTするなどで特定されます。逆にそれのどれかが判らないと特定できません。 特定できないと、そのプロパティ・メソッドを働かせることはできません。 プログラムを組む上で苦労するのはこの点です。 ーー 一方、エクセルは特殊です。 エクセルのセル(Range)は位置が座標的配置で、番地というものが理解しやすく、位置が判りやすく、指定しやすくなってます。それでシートに現れている図形等のオブジェクトと関連付けたくなりますが、セルと本来主従関係や親子関係はどありません。セルの現在の位置に図形を位置させることができるだけです(また連動して動くよう設定できるだけです)。 http://park11.wakwak.com/~miko/Excel_Note/17-01_zukei.htm の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など同時にする時以外の) のコードは、マクロの記録で学べますので略。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

補足をお願いします >マクロ終了後もオートシェイプの線色は黒でも、線を引くと赤のままです。 質問の意味が分かりません。EXCEL2003のマクロでオートシェイプで直線を引いた後その色を赤に変更し、その後に手動で別のオートシェイプの直線を引くと、その色は黒になりました。ですから「線を引くと赤のままです」が何を指しているか理解できませんでした。 質問が理解できていないので的外れかもしれませんが、カラーパレットを黒色(自動)に戻しておきたいということなら、ダミーで線を引き、その線(Selection)の色を自動(.SchemeColor = 64)に設定した後で線を削除する方法では解決しませんか?

lietti
質問者

補足

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

関連するQ&A

  • エクセルVBAのWith~End With構文

    Win2000エクセル2000です。 下記のMacro11はTEST11のようにWith~End Withでくくれると思うのですがエラーになります。 どこがおかしいのでしょうか? Sub Macro11() ActiveSheet.Shapes.AddShape(msoShapeSun, 450, 150, 120, 120).Select Selection.ShapeRange.Line.Weight = 0.75 Selection.ShapeRange.Line.ForeColor.SchemeColor = 64 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10 Selection.ShapeRange.Fill.OneColorGradient msoGradientFromCorner, 1, 0.59 Selection.ShapeRange.Adjustments.Item(1) = 0.3016 Selection.ShapeRange.ThreeD.SetThreeDFormat msoThreeD7 Selection.ShapeRange.ThreeD.PresetMaterial = msoMaterialMetal Selection.ShapeRange.ThreeD.Depth = 144# End Sub Sub TEST11() With ActiveSheet.Shapes.AddShape(msoShapeSun, 450, 150, 120, 120) .ShapeRange.Line.Weight = 0.75 .ShapeRange.Line.ForeColor.SchemeColor = 64 .ShapeRange.Fill.ForeColor.SchemeColor = 10 .ShapeRange.Fill.OneColorGradient msoGradientFromCorner, 1, 0.59 .ShapeRange.Adjustments.Item(1) = 0.3016 .ShapeRange.ThreeD.SetThreeDFormat msoThreeD7 .ShapeRange.ThreeD.PresetMaterial = msoMaterialMetal .ShapeRange.ThreeD.Depth = 144# End With End Sub

  • エクセルマクロでオブジェクトを選択する方法

    エクセル(2002)を使っています。マクロの記録機能を使って円を描くマクロを作成しました。 Sub Maru(xpos, ypos, hankei) ActiveSheet.Shapes.AddShape(msoShapeOval, xpos, ypos, hankei, hankei).Select Selection.ShapeRange.Fill.Visible = msoFalse Selection.ShapeRange.Fill.Solid Selection.ShapeRange.Fill.Transparency = 0# Selection.ShapeRange.Line.Weight = 0.75 Selection.ShapeRange.Line.DashStyle = msoLineSolid Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Line.Transparency = 0# Selection.ShapeRange.Line.Visible = msoTrue Selection.ShapeRange.Line.ForeColor.SchemeColor = 64 Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255) End Sub 次にこの円を削除したいと思い、同じようにマクロの記録機能を使ったところ、 Sub Macro3() ActiveSheet.Shapes("Oval 64").Select Selection.Delete End Sub となりました。"Oval 64"はオブジェクトの名前のようですが、名前がわかっていないオブジェクト(但し上記マクロで書いたので場所はわかっている)を選択するにはどうしたらいいでしょうか。

  • エクセルで線の太さと色を変えるマクロ

    マクロ初心者です。ご教示願います。 エクセルのマクロで選択した任意のセルに●→を引くマクロを組みましたが、 線の太さと、色を変えるコードをどこにどう入れたらいのか教えてください。 Sub 線を引く() Dim TP, LF, WD TP = Selection.Top + (Selection.Height / 2) LF = Selection.Left WD = Selection.Width ActiveSheet.Shapes.AddShape(msoShapeOval, LF, TP - 3, 6, 6).Select ActiveSheet.Shapes.AddLine(LF + 6, TP, LF + WD, TP).Select

  • エクセルマクロ

    OS:WINDOWS7 SOFT:EXCELL 2007 PC:VAIO VGN-FW73JGB です。マクロで図形入り文字を入れると、文字の右側が切れます。中央に配置するように設定すれば良いですが、その都度変更する必要があるので、教えて頂きたいです。よろしくお願いします。 If CheckBox5 = True Then Set sp = ActiveSheet.Shapes.AddTextbox(msoTextOrientationVertical, 290, 212.5, 20, 45) With sp .TextFrame.Characters.Text = "延 長" sp.Select Selection.ShapeRange.Fill.Visible = msoFalse With sp With .Line .Weight = xlThin .ForeColor.SchemeColor = 8 End With End With End With End If

  • Excelの罫線に関するマクロ

    Excelの罫線に関するマクロ 罫線を引き、それを赤くするマクロを作ったのですが、赤罫線の下にもうひとつ罫線が表示されてしまいます。どこを削除すればよいのでしょうか。 ご教示お願いいたします。 Sub 罫線() Dim T1 As Single, L1 As Single Dim T2 As Single, L2 As Single Dim myShp As Shape With Range("c15") T1 = .Top L1 = .Left End With With Range("d14") T2 = .Offset(1, 1).Top L2 = .Offset(1, 1).Left End With Set myShp = ActiveSheet.Shapes.AddLine(L1, T1, L2, T2) ActiveSheet.Shapes.AddLine(L1, T1, L2, T2).Select With Selection.ShapeRange.Line .Visible = msoTrue .Style = msoLineSolid .Weight = 5# .ForeColor.SchemeColor = 10 End With End Sub よろしくお願いします。

  • Excel マクロでチェックボックスに枠線

    エクセルマクロについて教えて下さい。 Excel2003を使用しています。 1つのシートに、フォームツールボックスからチェックボックスを沢山(300個以上)配置しました。 チェックボックスをクリック(オン)するのと同時にチェックボックスに赤い枠線を付けたいのですが、1つのマクロでチェックボックスのオブジェクト名を取得しながら枠線を付けることは出来ませんでしょうか? 以下のマクロを試してみたのですが、Application.Callerの所でエラーになってしまいました。 Sub checkon() ActiveSheet.Shapes(Application.Caller).Select Selection.ShapeRange.Line.Weight = 3# Selection.ShapeRange.Line.DashStyle = msoLineSolid Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Line.Transparency = 0# Selection.ShapeRange.Line.Visible = msoTrue Selection.ShapeRange.Line.ForeColor.SchemeColor = 10 i = ActiveCell.Address(False, False, xlA1) Range(i).Select End Sub 特定のチェックボックスを指定した場合は、問題ないのですが・・。 (例)ActiveSheet.Shapes("Check Box 1").Select どなたか詳しい方、宜しくお願い致します。

  • Excelのマクロを使用してオートシェイプ図形の色を変えたいのです。

    Excelのマクロを使用してオートシェイプ図形の色を変えたいのです。 オートシェイプ図形を50個ならべて、マウスでクリックしてものは色が変わるようにしたいと思います。 マクロ記録をすると以下のようになりました。 Sub Macro1() ActiveSheet.Shapes("AutoShape 1").Select Selection.ShapeRange.Fill.ForeColor.SchemeColor = 45 Selection.ShapeRange.Fill.Visible = msoTrue Selection.ShapeRange.Fill.Solid End Sub このプログラムを50個書くわけにはいかないのですが、プログラムで処理するのに問題点が2つ出てきました。 ・オートシェイプ図形の名前が"AutoShape 1"となっていますが、これを変更したいのですが、書式設定にはありませんでした。変更するにはどうすればよいのでしょう? ・クリックしたオートシェイプ図形がどれであるかを返す関数がないと、どの図形がクリックされたかわからないのですが、これを返す関数はあるのでしょうか? よろしくお願いします。

  • EXCEL VBA これであっていますか?

    エクセルに地図を貼り付け、その中のある地点Aから半径1キロ、2キロ、3キロといった具合に円を描いています。ある地点B、Cも同様に円があります。セルに“A” と入力した際に該当する地点の円(1キロ、2キロ、3キロの3種類)を赤く表示し、終了すると円が消える(線なしに変わる)ようにするために以下のようなVBAを組みました。が、円が2つしか赤くならなかったり、 ばあいによっては「インデックスが境界を超えています」とエラーが出たりします。 どうしたら良いか教えてください。 Sub iro() Dim i As Variant i = InputBox("表示する地点を指定してください", "地点指定") If i = "A" Then ActiveSheet.Shapes(1).Select ActiveSheet.Shapes(2).Select ActiveSheet.Shapes(3).Select Replace:=False hyoji MsgBox "表示を終了してよろしいですか", vbOKOnly ActiveSheet.Shapes(1).Select ActiveSheet.Shapes(2).Select ActiveSheet.Shapes(3).Select Replace:=False modosu ElseIf i = "B" Then ActiveSheet.Shapes(4).Select ActiveSheet.Shapes(5).Select ActiveSheet.Shapes(6).Select Replace:=False hyoji MsgBox "表示を終了してよろしいですか", vbOKOnly ActiveSheet.Shapes(4).Select ActiveSheet.Shapes(5).Select ActiveSheet.Shapes(6).Select Replace:=False Else MsgBox "指定した地点がありません", vbOKOnly End If End Sub Sub hyoji() Selection.ShapeRange.Line.Visible = msoTrue '「線なし」に設定されている場合、線を表示 Selection.ShapeRange.Line.ForeColor.SchemeColor = 10 Range("A1").Select End Sub Sub modosu() Selection.ShapeRange.Line.Visible = msoFalse '「線なし」に設定 Range("A1").Select End Sub

  • Excel マクロのエラーを直したいです。

    いつもお世話になっております。 さて、下記マクロを作成(コピー&ペースト)したのですが、矢印以外のあみかけ、罫線などがセルに表示されてしまいます。 どのように修正すれば、矢印だけが表示されるようになるのでしょうか? 修正頂ければ、幸甚です。宜しくお願い致します。 ※マクロ初心者です。 (1)Sub 外部デイ利用() Dim TP, LF, WD TP = Selection.Top + (Selection.Height / 2.5) LF = Selection.Left WD = Selection.Width ActiveSheet.Shapes.AddLine(LF, TP, LF + WD, TP).Select Selection.ShapeRange.Line.Weight = 1# Selection.ShapeRange.Line.DashStyle = msoLineSolid Selection.ShapeRange.Line.BeginArrowheadStyle = msoArrowheadTriangle Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadTriangle End Sub (2)Sub 認知デイ利用() Dim TP, LF, WD TP = Selection.Top + (Selection.Height / 2.5) LF = Selection.Left WD = Selection.Width ActiveSheet.Shapes.AddLine(LF + 6, TP, LF + WD, TP).Select Selection.ShapeRange.Line.BeginArrowheadStyle = msoArrowheadOval Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadTriangle End Sub

  • エクセルVBAでShapeRangeについて

    すみません、教えてください。 以下のマクロは正常に動きます。 Sub TEST() With ActiveSheet For Each s In .Shapes If s.AutoShapeType = msoShape5pointStar Then s.Delete Next .Cells.Interior.ColorIndex = 1 Set AA = .Shapes.AddShape(msoShape5pointStar, 55, 22, 25#, 25#) AA.Fill.Visible = msoTrue AA.Fill.Solid AA.Fill.ForeColor.SchemeColor = 13 AA.Fill.Transparency = 0# AA.line.Weight = 0.75 AA.line.DashStyle = msoLineSolid AA.line.Style = msoLineSingle AA.line.Transparency = 0# AA.line.Visible = msoTrue AA.line.ForeColor.SchemeColor = 64 ' AA.Copy '(1) ' .Paste '(1) ' Set AB = Selection '(1) ' .Range("A1").Select'(1) Set AB = AA.Duplicate '(2) AB.Top = 44 AB.Left = 110 ' AB.ShapeRange.Fill.ForeColor.SchemeColor = 10'(1)の2 AB.Fill.ForeColor.SchemeColor = 10 '(2)の2 End With End Sub ところが、 Set AB = AA.Duplicate '(2)の部分を、コメントアウトしている '(1)の記述に変えると、 AB.Fill.ForeColor.SchemeColor = 10 '(2)の2 の部分も ' AB.ShapeRange.Fill.ForeColor.SchemeColor = 10'(1)の2 に変えないとエラーになります。 ' AA.Copy '(1) ' .Paste '(1) ' Set AB = Selection '(1) も Set AB = AA.Duplicate '(2) も、同じことのように思えるのですが、この違いで、ShapeRangeというのを入れたり消したりしなければならないのはどうしてでしょうか? エクセルは2000です。

専門家に質問してみよう