
エクセルでマクロを組み始めたばかりの者です。下記のようなマクロを組んでみましたが、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
どの様に修正すれば良いのでしょうか?
マクロが原因でしょうか?または他の原因があるのでしょうか?
マクロ初心者のため、修正方法など具体的な詳細をお教えいただけないでしょうか。
お手数をおかけして申し訳ございませんが、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
「Sheet(”△△△”).Select」や「Sheet(”▽▽▽”).Select」でシートを切り替えてしまっているので、この後で「ActiveSheet.Unprotect」を使わないとダメです。
なお「Workbook.Open Filename:=”C:¥Users¥Desktop¥×××.xlsm”」や「Workbook.Open Filename:=”K:¥共有¥□□□.xlsm”」の後の「ActiveSheet.Unprotect」のせいで、どこかのシートの保護が解除されたままになっているはずです。
ありがとうございます。
このような感じで大丈夫でしょうか?
Workbook.Open Filename:=”C:¥Users¥Desktop¥×××.xlsm”
ThisWorkbook.Activate
Range(”D4:G20”).Select
Selection.Copy
Windows(”×××.xlsm”).Activate
Sheet(”△△△”).Select
ActiveSheet.Unprotect
Range(”AF18:AI34”).Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveWorkbook.Save
ActiveWindow.Close
Application.CutCopyMode = False
助かりました。
明日早速確認します。
本当にありがとうございました。
No.4
- 回答日時:
こんにちは
直接の回答ではありませんが、なんだか同じ内容の質問を連発なさっているようですね。
(質問者様には違うつもりでも、一般化すると同じ質問に読めます)
>「変更しようとしているセルまたはグラフは保護されているため
>読み取り専用となっています…」
シートに保護がかかっているため、セル等への書き込みができないという意味のエラーです。
>その際、転送先はシート保護をしておきたいのです
残念ながら、シートの保護をかけたままの状態で、直接。値などの変更をすることはできません。
(できてしまうと、シートの保護の意味がなくなってしまうので)
これまでに多くの方が回答なさっているように、扱いたいシートの保護を一旦解除して、値の変更等を行い、その後再度シートの保護をかけることで、変更することが可能になります。
(これは手作業でも同じで、それをマクロの記録で記録することもできます)
手順は上記の通りなので、その通りにコーディングすれば良いだけなのですが、ANo2様もご指摘なさっていらっしゃるように、処理の対象(シート)がどれであるのかわかりにくいコードになっており、質問者様がきちんと区別なさっているのか疑問です。
すこし考え方を変えて以下のような方向を目指すのが、遠回りに思えるかもしれませんが、実は、近道になると思います。
ActiveWorkbook、ActiveSheetなどの使用はできるだけ避け(目標としては使わない)、さらには、Activate、Select、Selectionなども排除することで、マクロ実行中の画面のチラつきも抑制できますし、実行速度の向上も望めます。
代わりに、対象のブックやシートを変数に代入しておいて、各種の処理を行う際には、必ず対象のブックやシートを明示したコードにする。
なによりも、このような記述にしておくことで、ご質問のような事態を回避できるであろうことと、さらには、将来時間が経ってから読み直してもわかりやすいものになっていることが期待できます。
おまけとして、コード全体を少しコンパクトにできる可能性も高いです。
(例として、頻出する Application.CutCopyMode = False を削除できます。)
No.2
- 回答日時:
ActiveSheet.
これ使うのやめましょう。
あなたは今アクティブなシートがどれなのか分かってませんよね?
だから、こういうことが起きるんです。
ActiveSheet.やSelectionをなるべく使わずコードを記述した方がいいですよ?
もしくは、デバッグ方法を勉強しましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
実行時エラー1004「Select メソ...
-
エクセルのシート名変更で重複...
-
【ExcelVBA】全シートのセルの...
-
特定の文字を含むシートだけマ...
-
XL:BeforeDoubleClickが動かない
-
エクセルVBA Ifでシート名が合...
-
Excel チェックボックスにチェ...
-
【VBA】全ての複数シートから指...
-
excelのマクロで該当処理できな...
-
【VBA】特定の文字で改行(次の...
-
実行時エラー'1004': WorkSheet...
-
Excel VBA での計算について…
-
EXCEL VBAで複数シートから該当...
-
シートが保護されている状態で...
-
ExcelのVBAのマクロで他のシー...
-
同じ作業を複数のシートに実行...
-
【エクセルVBA】「Protect User...
-
ブック名、シート名を他のモジ...
-
VBAマクロでシートコピーした新...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
特定の文字を含むシートだけマ...
-
実行時エラー'1004': WorkSheet...
-
ユーザーフォームに入力したデ...
-
【ExcelVBA】全シートのセルの...
-
エクセルVBA Ifでシート名が合...
-
実行時エラー1004「Select メソ...
-
VBA 存在しないシートを選...
-
エクセルで通し番号を入れてチ...
-
VBA 検索して一致したセル...
-
XL:BeforeDoubleClickが動かない
-
VBA 指定した回数分、別シート...
-
VBAマクロでシートコピーした新...
-
シートが保護されている状態で...
-
ブック名、シート名を他のモジ...
-
【VBA】全ての複数シートから指...
-
別のシートから値を取得するとき
-
ExcelのVBAのマクロで他のシー...
-
Excel チェックボックスにチェ...
おすすめ情報
ActiveSheet.Unprotect の位置を変えましたが、同じエラーメッセージが出ます。実行時エラー1004 が出る要因があれば、その対処方法を教えて頂けないでしょうか。よろしくお願いします。