エクセルマクロで実行時エラーが発生し、修正方法を教えてください。

このQ&Aのポイント
  • エクセルでマクロを組み始めたばかりの者です。マクロ実行時に「実行時エラー‘1004‘:変更しようとしているセルまたはグラフは保護されているため読み取り専用となっています」というエラーメッセージが表示され、マクロが止まってしまいます。マクロの目的は、転送ボタンを押した際に各シートの指定セルに一括で情報を転送(コピー)することです。転送先のシートは保護されているため、エラーが発生しています。
  • エラーはエクセル2010で確認されており、他のバージョン(2007や2003)でも同様のエラーが発生する可能性があります。また、この問題を解決するためには具体的な修正方法が必要であり、マクロ初心者としては詳細な案内を求めています。
  • マクロの修正方法について、具体的な手順や注意点を教えていただけないでしょうか?マクロを修正して正常に動作させるためのアドバイスやポイントをお願いします。
回答を見る
  • ベストアンサー

エクセルでマクロを組み始めたばかりの者です。下記の

エクセルでマクロを組み始めたばかりの者です。下記のようなマクロを組んでみましたが、27行目もしくは41行目のActiveSheet.Pasteで「実行時エラー‘1004‘: 変更しようとしているセルまたはグラフは保護されているため読み取り専用となっています…」というエラーメッセージが出て止まってしまいます。 しようとしている内容は、転送ボタンを押し各シートの指定セルへ一括転送(コピー)をしたいのです。 その際、転送先はシート保護をしておきたいのです。 エラーはエクセル2010で確認しましたが、職場のPCを使用するため2007や2003等他のバージョンを利用する可能性もあります。また、仕事で使用するため早急に使わなければならず焦っています。 Option Explicit Private Sub CommandButton2_Click() Call Macro2 End Sub Sub Macro2() Workbook.Open Filename:=”K:¥共有¥○○○.xlsm” ActiveSheet.Unprotect ThisWorkbook.Activate Range(”D4:G20”).Select Selection.Copy Windows(”○○○.xlsm”).Activate Range(”E7”).Select ActiveSheet.Paste Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ActiveWorkbook.Save ActiveWindow.Close Application.CutCopyMode = False Workbook.Open Filename:=”C:¥Users¥Desktop¥×××.xlsm” ActiveSheet.Unprotect ThisWorkbook.Activate Range(”D4:G20”).Select Selection.Copy Windows(”×××.xlsm”).Activate Sheet(”△△△”).Select Range(”AF18:AI34”).Select ActiveSheet.Paste Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ActiveWorkbook.Save ActiveWindow.Close Application.CutCopyMode = False Workbook.Open Filename:=”K:¥共有¥□□□.xlsm” ActiveSheet.Unprotect ThisWorkbook.Activate Range(”D4:G20”).Select Selection.Copy Windows(”□□□.xlsm”).Activate Sheet(”▽▽▽”).Select Range(”AF18:AI34”).Select ActiveSheet.Paste Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ActiveWorkbook.Save ActiveWindow.Close Application.CutCopyMode = False MsgBox " 『○○○』と" & vbCrLf & "『×××』と" & vbCrLf & "『□□□』の" & vbCrLf & "規格を変更しました。" End Sub どの様に修正すれば良いのでしょうか? マクロが原因でしょうか?または他の原因があるのでしょうか? マクロ初心者のため、修正方法など具体的な詳細をお教えいただけないでしょうか。 お手数をおかけして申し訳ございませんが、よろしくお願いします。

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

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは 多分、保護の解除がうまくいってないのでは? Sub Macro2()   Dim wbk1 As Workbook   Dim wsh1 As Worksheet   Dim tsh As Worksheet      Application.ScreenUpdating = False      Set tsh = ActiveSheet 'ThisWorkbook.Worksheets(1)?      Set wbk1 = Workbook.Open("K:\共有\○○○.xlsm")   Set wsh1 = wbk1.Worksheets(1) '○○○.xlsmのシートが1枚ならこのまま。複数ならシート名指定に変更      wsh1.Unprotect      tsh.Range("D4:G20").Copy wsh1.Range("E7")      wsh1.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True   wbk1.Save   wbk1.Close      Set wbk1 = Nothing      Set wbk1 = Workbook.Open("C:\Users\Desktop\×××.xlsm")   Set wsh1 = wbk1.Worksheets(1) '×××.xlsmのシートが1枚ならこのまま。複数ならシート名指定に変更      wsh1.Unprotect      tsh.Range("D4:G20").Copy wsh1.Range("AF18")      wsh1.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True   wbk1.Save   wbk1.Close      Set wbk1 = Nothing      Set wbk1 = Workbook.Open("K:\共有\□□□.xlsm")   Set wsh1 = wbk1.Worksheets(1) '□□□.xlsmのシートが1枚ならこのまま。複数ならシート名指定に変更      wsh1.Unprotect      tsh.Range("D4:G20").Copy wsh1.Range("AF18")      wsh1.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True   wbk1.Save   wbk1.Close      Set wbk1 = Nothing      Application.ScreenUpdating = True      MsgBox " 『○○○』と" & vbCrLf & "『×××』と" & vbCrLf & "『□□□』の" & vbCrLf & "規格を変更しました。" End Sub 動作確認してないですけど、これで試してみて下さい。

msojndsknks
質問者

お礼

ありがとうございました。 無事解決しました。

その他の回答 (2)

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.3

こんにちは、No1です 何度も済みません。 選択しないで処理するならいいのですが、 もしどうしても選択が必要なら、そのセルのロックは外して有りますよね?

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

こんにちは、No1です 追加ですけど、 Protect で UserInterFaceOnly:=True で保護しておけば解除する必要も無い かも知れませんので試して下さい。

関連するQ&A

  • EXCELのVBAについて

    マクロのボタンで内容を削除する様に設定した所、 Dim re As Integer Sheets("投入シート").Select re = MsgBox("入力データをクリアします。" & vbCrLf & vbCrLf & "よろしいですか?", vbOKCancel, "クリア確認") If re <> vbCancel Then Sheets("投入シート").Select ActiveSheet.Unprotect Range("a1:c30").Select Selection.Copy Application.CutCopyMode = False Selection.Copy Sheets("work").Select Range("A1").Select ActiveSheet.Paste Sheets("投入シート").Select ActiveSheet.Unprotect Range("c4:c30").Select Selection.ClearContents Range("f31").Select Selection.Copy Range("c9").Select ActiveSheet.Paste Range("f33").Select Selection.Copy Range("c11").Select ActiveSheet.Paste Range("f32").Select Application.CutCopyMode = False Selection.Copy Range("c14").Select ActiveSheet.Paste Range("c4").Select Application.CutCopyMode = False 'ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End If Sheets("投入シート").Select Range("c4").Select End Sub この様に入力したのですがセルのC11の計算式だけセル番号が消えてしまいます。 どうしてでしょうか?ご指導をお願いします。

  • 保護の解除・設定

    いつもありがとうございます。 現在シートの保護がパスワード入りでかかっています。 マクロで保護を解除するときに、 パスワードを入力不要で解除できませんか? また、引続きシートを保護するときに、 パスワードを入力しないで、元の、パスワードで、 保護が出来るでしょうか? 現在は、下記のようになっています。 (マクロの記録でしか作れませんので・・、) ActiveSheet.Unprotect ActiveWindow.SmallScroll Down:=24 Range("B50:X69").Select Selection.Copy ActiveWindow.LargeScroll Down:=-2 ActiveWindow.LargeScroll ToRight:=-3 ActiveWindow.SmallScroll Down:=-9 Range("B1").Select ActiveSheet.Paste Range("B2").Select Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 以上、よろしくお願い致します。

  • エクセル2000でのVBAについて

    下記のVBAを書いているのですが、3つのIF文を1つに まとめたいのですが教えてください。 If Range("E16") = "申請者" Then Sheets("ログイン").Select Sheets("報告票").Select ActiveSheet.Unprotect Range("M3:U7").Select Selection.Locked = False Selection.FormulaHidden = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True '数式バー表示 Application.DisplayFormulaBar = True Range("H9").Select Else: Sheets("ログイン").Select If Range("E16") = "所属長承認" Then Sheets("報告票").Select ActiveSheet.Unprotect Range("D3:L7").Select Selection.Locked = False Selection.FormulaHidden = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True '数式バー表示 Application.DisplayFormulaBar = True Range("H9").Select Else: Sheets("ログイン").Select If Range("F16") = "所属長承認" Then Sheets("報告票").Select ActiveSheet.Unprotect Range("BS3:CA7").Select Selection.Locked = False Selection.FormulaHidden = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True '数式バー表示 Application.DisplayFormulaBar = True Range("H9").Select Else: Sheets("ログイン").Select end if end if end if

  • エクセルのマクロの手直し

    お世話になります。 エクセルのマクロに教えてください。 (1)シートの保護を解除 (2)E42~H42までを選択し[コピー] (3)E18をクリックして[形式名を選択して貼り付け](その中の値のみ) (4)E42~H42までを選択し[数式と値のクリア] (5)シートの保護 → OK ここで (3)のE18というセルの所を E列で、行番号は I42 のセルに7を足した数字 というようにしたい。(I42の値が15だったらE22という具合)ちなみに I42 のセルは条件により変化し0以上35以下の整数が入る。 以下は(1)から(5)の作業をマクロの新規作成で「マクロ」という名前で記録したものです。 どの部分を修正すればいいのか教えてください。 Sub マクロ() ' ' マクロ Macro ' マクロ記録日 : 2002/5/27 ユーザー名 : ' ' ActiveSheet.Unprotect Range("E42:H42").Select Selection.Copy ActiveWindow.ScrollRow = 10 Range("E18").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False ActiveWindow.SmallScroll Down:=6 Application.CutCopyMode = False Range("E42:H42").Select Selection.ClearContents Range("I37").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub

  • excel2000マクロエラー

    下記のマクロを実行したときにエラーがでます。 Sheets("売上日報").Select Application.CutCopyMode = False ActiveSheet.Unprotect Sheets("売上日報").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenasios:=True エラーメッセージ アプリケーション定義またはオブジェクト定義のエラーです。 下記のところでマクロがとまります。 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenasios:=True

  • エクセルで複数ファイルからコピーをする。

    すみませんが、BOOK1に複数のファイルから部分的にコピーして貼り付けるという作業をしたいのですが、ど素人なもんでわかりません。マクロで記録したモノをいじってみてるのですが、根本的にコードが分かっていなくギブアップです。  やりたいことは、フォルダーの中の970305日報1、970305日報2、970306日報1、970306日報2のようなファイルが山ほどあるのですが、 この970305の日報1と2を開き、それぞれファイルの決まった列を順番にをBook1の行へ行列を入れ替えて貼りつけていき(1日が1行)保存して閉じてから、次の日970306のデータをBOOK1の2行目に貼り付けるということをしたいのですが、どなたか教えていただければ助かります。よろしくお願いします。 Sub Macro2() Dim MyFile As String, MyPath As String Dim wb As Workbook, tb As Workbook Set tb = ThisWorkbook MyPath = tb.Path & "\" MyFile = Dir(MyPath & "*.xls", vbNormal) Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Do While MyFile <> "" If MyFile <> tb.Name Then Set wb = Workbooks.Open(MyPath & MyFile) With ActiveSheet Windows("970305日報1.xls").Activate Range("B34:B38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("C1").Select Selection.PasteSpecial Paste:=xlPasteAll,         Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970305日報1.xls").Activate Range("C33:C38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("H1").Select Selection.PasteSpecial Paste:=xlPasteAll,       Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970305日報1.xls").Activate ActiveWindow.Close Windows("970305日報2.xls").Activate Range("B31:B36").Select Selection.Copy Windows("日報リスト.xls").Activate Range("N1").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970305日報2.xls").Activate Range("D31:D36").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("T1").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970305日報2.xls").Activate ActiveWindow.Close Windows("970306日報1.xls").Activate Range("B34:B38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("C2").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970306日報1.xls").Activate Range("C33:C38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("H2").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970306日報1.xls").Activate ActiveWindow.Close -----------------------------------------

  • Excel マクロ : マクロの記録の表記方法の変更

    Excelで質問です。 下記のようなマクロの記録を使用し「顧客一覧」のブックにデータを追加しています。 しかし、処理の中で一項目コピーするごとにファイルを行ったり来たりしているようで処理が遅いようです。何か解決策はあるのでしょうか? ・ ・ ・ Windows("顧客一覧.xls").Activate Rows("4:4").Select Selection.Insert Shift:=xlDown Windows("2.xls").Activate Range("C6").Select Selection.Copy Windows("顧客一覧.xls").Activate Range("A4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C7").Select Application.CutCopyMode = False Selection.Copy Windows("顧客一覧.xls").Activate Range("B4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C8").Select Application.CutCopyMode = False Selection.Copy   ・   ・

  • エクセルで繰り返し同じ作業をしたい

    仕事でDドライブの中のフォルダにエクセルのシートが100種類位入っています。それらのエクセルシートに毎日同じ作業をしなければならないのですが、(エクセルを開いて行う作業は各シート共通です)そのマクロの作り方を教えていただけないでしょうか?ちなみに Workbooks.Open Filename:="D:\業務\あ.xls" Range("D9").Select Selection.Copy Range("E9").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save ActiveWindow.Close Workbooks.Open Filename:="D:\業務\い.xls" Range("D9").Select Selection.Copy Range("E9").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save ActiveWindow.Close Workbooks.Open Filename:="D:\業務\う.xls" Range("D9").Select Selection.Copy Range("E9").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save ActiveWindow.Close      その後もまだまだ続きます。 というマクロの記録を使って作ってはいるものの、やたらと長くなってしまいます。VBAの知識がない初心者なのですが、いい方法があれば教えていただけないでしょうか?

  • エクセルマクロ

    お世話になります。 下記の記述でどこがおかしいのでしょうか 上手く印刷できません。 Sub Macro13() ' ' 'Dim i As Long For i = 1 To 4 Range("Ai:Ei").Select Selection.Copy Sheets("カード").Select Range("G1:K1").Select Selection.Paste Range("A1:F21").Select Application.CutCopyMode = False ActiveSheet.PageSetup.PrintArea = "$A$1:$F$21" ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _ :=True Next i End Sub

  • マクロでブック間のリンクを切るためにはどうすれば良いですか?

    マクロ初心者です。現状、月次データの分類・集計にマクロを使用し、演算結果を新しいブックで保存して配布用資料としています。配布用資料はマクロを削除して送付しているのですが、その際に配布用のSheetにコピー元でのリンクの情報が残ってしまいます。都度、編集→リンクの設定でリンクの解除をしておりますが、これをマクロで解決する方法はあるでしょうか? 大変つたないコードでお恥ずかしいですが現状は以下の通りです。集計後、配布用の新しいブックを作成する過程とお考えください。 Sub Oct() Sheets("配布資料").Select ActiveSheet.Unprotect Sheets("10月").Select Range("A1:F40").Select Selection.Copy Sheets("配布資料").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Cells.Select Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True Sheets("配布資料").Select ActiveSheet.Unprotect Sheets("配布資料").Select Sheets("配布資料").Copy Sheets("配布資料").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.Dialogs(xlDialogSaveAs).Show ActiveWorkbook.Close End Sub 殆どExcel自体を触ったことが無く、体裁を整えている程度のつたない知識です。ご指導いただければ幸いです。宜しくお願いいたします。

専門家に質問してみよう