エクセル2003でシートを保護するとマクロエラーが発生する問題について

このQ&Aのポイント
  • エクセル2003でシートを保護するとマクロエラーが発生する問題について、解決策を教えてください。
  • 会社の古いプリンターでシートを保護しながらマクロを有効に動かす方法について教えてください。
  • エクセル2003のシート保護でマクロエラーが発生するため、触られたくないセルとデータを入力してほしいセルを同時に管理する方法を教えてください。
回答を見る
  • ベストアンサー

エクセル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 以前に、こちらの質問で回答をいただきました。 会社のプリンターは古すぎなのですが、 見事!なんとか、会社のプリンターでできました。 入力されたくないセルもあり、シートを保護しました。 すると、マクロにエラーがかかりました。 なるべく、触られたくないセルがあったり、データを入力してほしいデータもあり… セルの保護をかけながら、マクロを有効に動かしたく思います。 よろしくお願いします。

  • s1023
  • お礼率77% (49/63)

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

回答で教わったマクロをそのまま再掲しても、何の情報提供にもなりません。 あなたが「ご自分で実際に使っているあなたのマクロ」を、モッタイブラズにキチンと情報提供してみて下さい。 >入力されたくないセルもあり、シートを保護しました。 1.マクロの中でシートの保護を解除する 2.何でも希望の操作を行わせる 3.マクロを抜ける前にシートを再度保護する のような手順を好む方が多いです。 シートの保護を、マクロからの変更を阻害しないモードで行う方法もあります。 #どこのシートをどう保護しているのかさっぱり不明ですが、あなたが掲示したマクロでSheet2がパスワードなしで保護されているとして。 sub macro1r1()  worksheets("Sheet2").copy before:=worksheets(1)  with worksheets(1)   .protect userinterfaceonly:=true   .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

s1023
質問者

補足

早速のご回答ありがとうございます。 すいません(^^ゞ マクロってのが全く分かっておらず… 今、私が実際に使っているマクロは Sub 図12_Click() Worksheets("Sheet1").Copy before:=Worksheets(1) With Worksheets(1) .Range("D5:BH15").Interior.ColorIndex = xlNone .Range("D17:BH22").Interior.ColorIndex = xlNone .PrintOut End With Application.DisplayAlerts = False Worksheets(1).Delete Application.DisplayAlerts = True End Sub と、入れています。 私が使っているエクセルは、2007で、会社のは2003です。 仕様が若干違うので、同じことをしているのかどうかも実はよくわからず 「パスワードなしでシートを保護する」ってのも 「どうしたらいいのでしょうか?↓」なんです。 ************* シート1に、印刷シートを作りそれを印刷するマクロです。 シート2に、リストを入力し、そのデータを印刷シートに反映させています(こんな表現でいいのでしょうか?) まず、シート1は全部保護したいです。 シート2は、 $B$11:$B$12 と $D$15:$AU$40(リスト部分) を編集を許可して他の部分を保護したいと考えています。 こんな質問の仕方で、よろしいでしょうか? ど素人で、すいません。

関連するQ&A

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

    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列のみロックを解除したのち、シート保護をすると、上記の実行がエラーになります。 どのようにすればエラーを回避できるのかお知恵をかしていただければ幸いです。

  • マクロの中に別なマクロを組み込むには

    よろしくお願いします。 excel2003でマクロを作っています。 Sheet2のC1、D1、E1にセルを赤く塗りつぶす、赤と入力、カラーインデックスの番号を入力するというマクロを作りボタンに割り当てたいと思います。 全部で色が17色あるので、マクロを17個作らなければならないと思うのですが、なるべく簡略化したいと思います。 そこで下記の「赤」というマクロの中に「色」というマクロを取り込みたいのですが、うまくできませんでした。 どうかマクロの中にマクロを取り込む方法を教えてください。 もし下記のマクロがもっとスマートに出来るようでしたら、それも教えていただけると嬉しいです。 VBAは初心者ですがよろしくお願いします。 Sub 赤() irobango = 3 ironamae = "赤" End Sub Sub 色() Worksheets("Sheet2").Range("C1").Select With Selection.Interior .ColorIndex = irobango .Pattern = xlSolid End With Worksheets("Sheet2").Range("D1").Value = ironamae Worksheets("Sheet2").Range("E1").Value = irobango End Sub

  • マクロの簡素化

    下記マクロです。 Range("AE6:AE1005").Select Selection.ClearContents Selection.Interior.ColorIndex = xlNone If Range("AD6").Value > 5 Then Range("AE6") = "*" Range("AE6").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD7").Value > 5 Then Range("AE7") = "*" Range("AE7").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD8").Value > 5 Then Range("AE8") = "*" Range("AE8").Select With Selection.Interior .ColorIndex = 3 End With Else End If 中略(セルを一個づつ指定しています) If Range("AD1004").Value > 5 Then Range("AE1004") = "*" Range("AE1004").Select With Selection.Interior .ColorIndex = 3 End With End If If Range("AD1005").Value > 5 Then Range("AE1005") = "*" Range("AE1005").Select With Selection.Interior .ColorIndex = 3 End With Else End If Range("AE3").Select 有るセルを参照しその値が5以上だったら別のセルに*マークとセルに色を付けるマクロですが、一個づつセル指定をしていますが、何とか短く出来ないでしょうか? お分かりになる方宜しくお願い致します。

  • エクセルチャート操作のマクロのエラー

    エクセルマクロ初心者です。グラフの縦軸をセルの値の変化に合わせて変化するよう(対照のセルはB1とB2で変化します。)下記のマクロをネット検索してモジュールに貼り付け機能するようになったのですが、シートに保護をかけると、「実行時エラー ー214767259(80004005): MaximumScaleメソッドは失敗しましたAxisオブジェクト のメッセージが出て機能しません。 Worksheet_SelectionChange(ByVal Target As Range) If Range(A1) <> "" Then Call AxesSet End Sub Sub AxesSet() Dim oChart As ChartObject Set oChart = Worksheets("Sheet1").ChartObjects(1) With oChart.Chart.Axes(xlValue, xlPrimary) .MaximumScale = Worksheets("Sheet1").Range(B1) .MinimumScale = Worksheets("Sheet1").Range(B2) .DisplayUnit = xlThousands .HasDisplayUnitLabel = False .MinorTickMark = xlInside End With End Sub 対照セルの保護の問題かと思い、セルのロックを解除したり、マクロから保護を解除するなど検索してみたのですが上手くいきません。シートを保護してもマクロが機能する解決方法お教えください。

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

    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で調べて見つけたマクロをちょっと加工して使う程度です。 どうか知恵をお貸しください。よろしくお願いします。

  • セルロックをしてない箇所のセルの色をダブルクリックで変えたい

    セルロックをしてない箇所のセルの色をダブルクリックで変えたい 前に、こちらで適切な回答をいただき、大変助かりました。 よろしければ、また助けていただけるととてもありがたいです。 以下のコマンドを入れた後、シートの保護設定をすると、 「実行時エラー'1004'  アプリケーション定義またはオブジェクト定義のエラーです。」 というメッセージで弾かれてしまいます。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True With Target.Interior Select Case .ColorIndex Case 3 .ColorIndex = xlNone Case xlNone .ColorIndex = 33 End Select End With End Sub セルロックしていないセルを、シート保護をかけた状態で、ダブルクリックすると 色が変わるようにするには、このコードをどう書き変えたら良いでしょうか。 かなり困っています。よろしくお願いします。

  • マクロで教えてください。

    sheet1のA列にある図番を参照しsheet2のA列の機種名に適合する行全体に sheet1のB列にある色を塗りたいのですが、マクロを教えていただけますでしょうか? sheet2のBのセル色を塗るマクロはわかりました。↓です。 Sub macro1() Dim c As Range, myR As Variant With Sheets("Sheet2") For Each c In .Range("a2", .Cells(Rows.Count, "a").End(xlUp)) myR = Application.Match(c.Value, Sheets("sheet1").Columns(1), 0) If Not IsError(myR) Then c.Offset(, 1).Interior.ColorIndex = Sheets("sheet1").Cells(myR, "B").Interior.ColorIndex End If Next End With End Sub 上記マクロですとBセルのみ色が塗られてしまうので行全体を塗るマクロを教えてください。 よろしくお願い致します。

  • マクロ シート削除の記述確認願います

    いつも回答して頂き、感謝しています。 ネットで調べながら、使えそうな記述を少し修正し、シート削除のマクロを記述してみました。 削除するシートの対象は、別のシートに一覧で載せてあります。 ちなみに、シートを挿入する時も、上記で参照する一覧を参照して作ってあります。 こんな場合もあるから、こんな感じに記述した方がいいよって意見がありましたら、教えてください。宜しくお願い致します。 Sub 作業名別のシートを削除する() Dim h As Range On Error Resume Next Application.DisplayAlerts = False With Worksheets("作業名一覧") .Activate For Each h In .Range(.Range("B2"), Range("B65536").End(xlUp)) Worksheets(h.Value).Delete Next End With Application.DisplayAlerts = True End Sub

  • EXCEL VBA シート保護のエラー

    こんにちは。 ここでいろいろ質問をさせていただき、なんとかマクロを完成させましたが・・・ 自分のPCで動かす分には、なにも問題なくうごくのですが、他のPCで動かしたところ”1004”のエラーが出てしまい動かなくなりました(”1004”は、アプリケーション定義がなんとかいうものです) Private Sub CommandButton1_Click() Worksheets("A").Unprotect Password:="○○○" Worksheets("B").Unprotect Password:="○○○" Worksheets("B").Range("B50:L100").ClearContents Worksheets("A").Range("B50:L100").AutoFilter field:=1, Criteria1:="=" Worksheets("A").Range("B50:L100").Copy Worksheets("B").Range("B50") Worksheets("B").Range("B36:L100").Interior.ColorIndex = xlNone Worksheets("A").AutoFilterMode = False Worksheets("A").Protect Password:="○○○", DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingCells:=True Worksheets("B").Protect Password:="○○○", DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingCells:=True End Sub 黄色くなるところは、 Worksheets("A").Protect Password:="○○○", DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingCells:=True の部分です。そして画面には10枚あるすべてのシートのエラーが・・・。 Worksheets("A")と指定しているのに、10枚全てのエラーがでるのも?だし、自分のPCではうまくいくのに他ではダメというところが分かりません。よろしくお願いします。

  • エクセルのマクロ

    エクセル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

専門家に質問してみよう