• ベストアンサー

【エクセル】「実行時エラー’1004’ InteriorクラスのColorIndeXプロパティを設定できません。」とは?

いつもお世話になってます。 マクロの記録で、シートの何箇所かの指定した部分のセルの色を白色にして印刷するマクロを作ったのですが、シートを保護すると自動で白色にしますが、印刷しません。 エラーの表示は、 「実行時エラー’1004’ InteriorクラスのColorIndeXプロパティを設定できません。」 です。 デバッグというところを押すと、 記述の「Selection.Interior.ColorIndex = 2」という部分が黄色くなっていました。 解消するにはどうすればよいのでしょうか? どうぞご教示のほどよろしくお願いします。 【エクセル2003】

  • fsy
  • お礼率91% (225/246)

質問者が選んだベストアンサー

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

シートの保護がかかっているため、マクロ内でセルの色が変更できないのだと思います。 対策はいろいろあると思いますが、以下のような感じでいかがでしょうか。 <その1> ActiveSheet.Unprotect Selection.Interior.ColorIndex = 2 ActiveSheet.Protect として、セルの色を変えるときだけシート保護を解除する。 <その2> ActiveSheet.Protect UserInterfaceOnly:=True ActiveSheet.Range("A1").Interior.ColorIndex = 2 として、「画面からは変更できないが、マクロでは変更できるモード」のシート保護にマクロの中で変更する。 <その3> ActiveSheet.Protect UserInterfaceOnly:=True だけのマクロを作成し、シート保護をかけるときはExcelのメニューからでなく、上記マクロを実行して保護をかける。(元のマクロはいじらない)

fsy
質問者

お礼

大変勉強になりました。 私の職場での大きい効率UPになります。誠にありがとうございます。

関連するQ&A

  • 「Cells(1, 1).Interior.ColorIndex = 255」がエラーになる理由

    Cells(1, 1).Interior.ColorIndex = 255 を実行するとエラーになります。 「InteriorクラスのColorIndexプロパティを設定できません。」 となります。 しかし Cells(1, 1).Interior.ColorIndex = 34 はエラーにならず水色になります。 赤は255ではないのですか? 何が原因なのかわかりません。 よろしくお願いします。

  • エクセルをシートの保護をするとエラーが出る。

    いつもお世話になります。 先日より VBAの記述を教えて頂きエクセルワークシートを作成しましたが (指定の色に色分けするVBA記述でした。)作業をしていると関数を入れているセルを消してしまう問題が発生しました。 その場合 シートの保護をして必要以外のセルを操作出来すれば良いと思い実施してみました。 しかし、VBAを走らすと ”実行エラー’1004’:InteriorクラスのColorIndexプロパティを設定出来ません”とメッセージが出てしまいます。何か良い手だてはありませんか お忙しところ申し訳ありませんが よろしくお願い致します。

  • 保護されているシートでマクロ実行するとエラー

    Excel2010で勤務表を作っています。 A列にとある文字列(承認)と入力すると、その行が保護されるマクロを、下記URLからコピペして使わせて頂いてます。 http://questionbox.jp.msn.com/qa3277541.html 勤務表なので、土日祝日は網掛けになるよう条件付き書式を使っています。 休暇取得した場合は網掛けを付けて、休日出勤した場合には網掛けなしにしたり出来るようマクロをマクロの自動記録で作りました。 ところが、どこかの行が保護されている状態で、セルの網掛けを変更するマクロを実行すると 「実行時エラー'1004'アプリケーション定義またはオブジェクトの定義エラーです」と出てしまいます。 保護されている行ではなく、まだ保護はされていない行に実行しています。 エラーが出ているのは網掛けマクロから出ています。 以下、今エクセルファイルにあるマクロの構文になります。 網掛けマクロは全部で4つ作りました。 1)休日出勤した際に条件付き書式をクリアして網掛けなしにするマクロです。 Sub 休日出勤() ' 条件書式クリア Selection.FormatConditions.Delete End Sub ※エラーになっている部分です。 2)平日休んだ日に網掛けをするマクロです。 Sub 休日() ' 網掛け With Selection.Interior .ColorIndex = 0 .Pattern = xlGray16 .PatternColorIndex = xlAutomatic End With End Sub 3)2)のマクロで休日にしたけど、やっぱり出勤したという時に、1)だと網掛けなしにならなかったので、網掛けなしにするマクロを作りました。 Sub網掛けなし() ' 網掛けなし With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With End Sub 4)ごちゃごちゃいじってしまって最初の状態に戻したいと思ったので条件付き書式を再設定するマクロを作りました。が、2)の休日マクロを実行したセルは元に戻らないので仕方なく3)の網掛けなしマクロを実行しなければなりません。 Sub 書式クリア() ' 条件書式再設定 Range("A6:K36").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=WEEKDAY($B6,2)>=6" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .Pattern = xlGray16 .PatternColorIndex = xlAutomatic .ColorIndex = xlAutomatic End With Selection.FormatConditions(1).StopIfTrue = False Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=OR(WEEKDAY($B6)=1,COUNTIF(祝日,$B6))" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .Pattern = xlGray16 .PatternColorIndex = xlAutomatic .ColorIndex = xlAutomatic End With Selection.FormatConditions(1).StopIfTrue = False End Sub ※この中のSelection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=WEEKDAY($B6,2)>=6"の部分がエラーと出ています。 ※1)から3)は網掛けしたいところ、網掛けなしにしたいところを範囲選択してから実行しなければなりません。 その他、保護を解除する際にパスワード認証が欲しかったので、「保護解除」ボタンを押すためにパスワード認証させるマクロもあります。 これは特に問題なく動いています。 5)パスワード認証つき保護解除マクロ Sub password() Dim pw As Long pw = Application.InputBox( _ prompt:="パスワード入力", Type:=1) If pw <> "123" Then MsgBox "パスワードが違います" Exit Sub Else MsgBox "保護解除しました" ActiveSheet.Unprotect End If End Sub 6)行ごとに保護するマクロです。 Private Sub Worksheet_Change(ByVal Target As Range) Dim r, rng As Range Set rng = Intersect(Target, Columns(1)) If Not rng Is Nothing Then If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If For Each r In rng If r.Value = "承認" Then r.EntireRow.Locked = True Else r.EntireRow.Locked = False End If Next r ActiveSheet.Protect DrawingObjects:=True, Contents:=True End If End Sub マクロに関してはド素人で、自動記録かWebで調べて見つけたマクロをちょっと加工して使う程度です。 どうか知恵をお貸しください。よろしくお願いします。

  • エクセル2003 シートを保護するとマクロエラー

    sub macro1()  worksheets("Sheet2").copy before:=worksheets(1)  with worksheets(1)   .range("D4:BH14").interior.colorindex = xlnone   .range("D16:BH21").interior.colorindex = xlnone   .printout  end with  application.displayalerts = false  worksheets(1).delete  application.displayalerts = true end sub 以前に、こちらの質問で回答をいただきました。 会社のプリンターは古すぎなのですが、 見事!なんとか、会社のプリンターでできました。 入力されたくないセルもあり、シートを保護しました。 すると、マクロにエラーがかかりました。 なるべく、触られたくないセルがあったり、データを入力してほしいデータもあり… セルの保護をかけながら、マクロを有効に動かしたく思います。 よろしくお願いします。

  • エクセルのマクロ

    エクセル2002でマクロを記録しました。 セルD5を選択した状態で、マクロの記録を始めました。(相対参照ボタンをクリックしています) D5のセルの色を黒にして、セルD6を選択して色を白にしました。ここで記録を終了しました。 VisualBasicEditorで見ると以下のような記述がありました。 そこで教えてください。 1)どの部分が相対参照をしているという意味の記述でしょうか? 2)どの部分がD6を選択したという記述でしょうか? 3)「Range("A1").Select」はどういう意味ですか?A1のセルはクリックしていないのですが・・・。 教えてください。 記述は以下です。 With Selection.Interior .ColorIndex = 1 .Pattern = xlSolid End With ActiveCell.Offset(1, 0).Range("A1").Select With Selection.Interior .ColorIndex = 2 .Pattern = xlSolid End With End Sub

  • シート保護をすると実行エラーになります。

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("A1:A2000")) Is Nothing Then Exit Sub With Selection.Interior If .ColorIndex = xlNone Then .ColorIndex = 4 Else .ColorIndex = xlNone End If End With Cancel = True End Sub A列任意のセルをダブルクリックすると色が変わるコードを組んでいます。しかしながら、 A列のみロックを解除したのち、シート保護をすると、上記の実行がエラーになります。 どのようにすればエラーを回避できるのかお知恵をかしていただければ幸いです。

  • excel2000 条件付書式5つ

    A1~J10に100個の数値があり、 行ごとの1位~5位にそれぞれ書式を あたえます。 マクロの記録機能を使って1位~3位を。 その後別で4位・5位を記録し、くっつけて みました。 つけたい書式は 以下のマクロの通りのセルのパターン・フォントの色です。 以下は記録したものをくっつけてつくったマクロです。 動作しません。 Sub 条件付書式5つ() Selection.FormatConditions.Delete Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=LARGE($A1:$J1,1)" Selection.FormatConditions(1).Font.ColorIndex = 2 Selection.FormatConditions(1).Interior.ColorIndex = 1 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=LARGE($A1:$J1,2)" Selection.FormatConditions(2).Font.ColorIndex = 2 Selection.FormatConditions(2).Interior.ColorIndex = 16 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=LARGE($A1:$J1,3)" Selection.FormatConditions(3).Interior.ColorIndex = 15 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=LARGE($A1:$J1,4)" Selection.FormatConditions(4).Font.ColorIndex = 2 Selection.FormatConditions(4).Interior.ColorIndex = 3 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=LARGE($A1:$J1,5)" Selection.FormatConditions(5).Font.ColorIndex = xlAutomatic Selection.FormatConditions(5).Interior.ColorIndex = 38 End Sub 初心者のためどうしたらいいのかまったく わかりません。 どうぞお願いします。

  • エクセル/自動記録VBAが、なぜ実行時エラー?

    エクセル2000です。 下記は自動記録で出来たマクロです。しかしこれが「実行時エラー1004:指定された値は境界を超えています。」となるんです。 Sub Macro2() ActiveSheet.Shapes.AddShape(msoShapeSun, 152.25, 67.5, 137.25, 125.25).Select Selection.ShapeRange.Adjustments.Item(1) = 0.3661 Selection.ShapeRange.ThreeD.SetThreeDFormat msoThreeD5 End Sub 新しいブックをつくり、標準モジュールにコピーペーストで転記すればちゃんと作動するのですが、記録した元のブックではエラーになります。 デバッグを選択して、標準モジュールを開き、msoShapeSunのところにカーソルをあてると、「msoShapeSun=Empty 値」と出ました。 msoThreeD5も「msoThreeD5=Empty 値」と出ました。これが原因だと思いますが、どうしてこうなるのでしょう? どうかお教えください。

  • VBAエラー

    お世話になります。早速ですが、、、 Sub ●() Selection.FormulaR1C1 = "●" With Selection.Font .Name = "MS Pゴシック" .Size = 11 .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With End Sub これは、自動記録でのマクロですが、実行されるセル以外の保護と、 併せてシート保護を掛けた状態で実行すると下記エラーが出ます。 実行時エラー '1004': 『 Font クラスの Name プロパティを設定できません。』 エラーの終了ボタンを押すことで何もなかったかのように治まりますが、実行のたびにエラー出力します。 但し、この自動マクロは、エクセル2000上で作成したもので、2000上で実行するとエラーは出ませんが、 2002上で実行すると発生します。何が悪いのでしょうか?

  • VBA 実行時エラー1004 range・・・

    【VBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクト】 Excel Book内のあるシートで、 【数量の入っていない行を非表示にする】 【それを解除して全表示にする】 という二つのマクロを使用しています。 このシートのシート名を変更したところ、上記のエラーが出るようになってしまいました。 シート名をもとに戻せば出なくなります。 当方、VBAには詳しくないので、シート名を変えてもこのエラーが出なくなる方法を考え付きません。 エラーからデバッグを表示すると下記記述の窓が開きました。 ===ここから=== Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) Application.Goto Excel.Range(Target.SubAddress), True End Sub ===ここまで=== 『Application.Goto Excel.Range(Target.SubAddress), True』の部分が黄色になっていて、その中の『Target.SubAddress』にカーソルを合わせると、 『Target.SubAddress=”(変更前のシート名)”』がポップアップします。 どこかでシート名の変更をすればいいのだろう、という事は察するのですが、それをどうやったらいいのかがわかりません。 使っているマクロの内容は下記です。 ===== 【数量の入っていない行を非表示にするマクロ】 Sub まとめ() ' ' まとめ Macro ActiveSheet.Range("$A$4:$T$2000").AutoFilter Field:=9, Criteria1:="<>" Range("B2").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True End Sub ===== 【それを解除して全表示にするマクロ】 Sub 解除() ' ' 解除 Macro ActiveSheet.Range("$A$4:$T$2000").AutoFilter Field:=9 Range("B2").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True End Sub ===== どこをどうやったらいいのでしょうか。 教えていただけませんでしょうか。

専門家に質問してみよう