プロが教えるわが家の防犯対策術!

私はExcel2016を使用していますが、Excelファイルを開けると写真のようなデバックが出るのです。
同じファイルをExcel2013を使用している方が開けると出ないで使用できるのですがどうしてでしょうか?
どうやれば私のほうでデバックがでないで使用できるか教えて頂けませんか?
よろしくお願いします。

【デバック箇所】


Private Sub Workbook_Open()
Dim i As Long
For i = 1 To Sheets.Count
⇒ この部分が黄色くなってます。Sheets(i).Protect Password:="0630", UserInterfaceOnly:=True
Next i
End Sub

質問者からの補足コメント

  • つらい・・・

    ありがとうございます。
    すみません。Sheets.Countってどこをみればわかるのでしょうか?
    教えてください。

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/12/13 16:48
  • つらい・・・

    当方、素人です。やってみて、デバックはでなくなりましたが、保護がかかってない状態になってしまいました。
    どのようなコードを書けばいいのでしょうか?
    コピーペーストができれば助かります。

      補足日時:2022/12/13 16:59
  • つらい・・・

    でました。「2」になってます。

    どうしたらいいのでしょうか?

      補足日時:2022/12/13 17:10
  • つらい・・・

    何度もすみません。
    コンパイルエラーとでました。
    わかりません・・・

    No.3の回答に寄せられた補足コメントです。 補足日時:2022/12/13 17:39
  • つらい・・・

    何度もすみません。
    コピーペーストでやってみたのですがコンパイルエラーとなります・・・

    No.5の回答に寄せられた補足コメントです。 補足日時:2022/12/13 17:53
  • つらい・・・

    おはよございます。
    ご連絡ありがとうございます。やってみたところ、問題なくBOOKが開けれました。
    BOOKの問題のようですね・・・;;
    どうすればいいのでしょうか?
    ご教授頂けませんか?
    お願いします。

    No.6の回答に寄せられた補足コメントです。 補足日時:2022/12/14 09:12

A 回答 (8件)

#6です


ブックの問題のようですね・・#6の修復は行いましたか?
修復したのちに不具合のブックはどうでしょう・・やはりエラーが出ますか
エラー内容を教えてください
ブックは共有ブックなど問題のないブックとの違いはありませんか・・

Sheets.Count=2 2シートしかないブックですか
取り敢えず 原因を切り分ける作業として
手作業ですべてのシート保護を解いて
エラーがある場合 飛ばすコードを入れて実行してみてください

標準モジュールに書いてプロシージャ内にカーソルを置いてF5キーで実行
実行は他の方法でも良いF8キーだと1行ずつ実行できます
Sub Test()
Dim i As Long
Application.EnableEvents = False
On Error Resume Next
For i = 1 To Sheets.Count
Sheets(i).Protect Password:="0630", UserInterfaceOnly:=True
Next i
Application.EnableEvents = True
End Sub

実行後どのシートが実行されていないか(保護が掛からない)確認してみてください(保護されているシートに不具合は無いと思われる)

もしすべてのシートに保護が掛かった場合

Private Sub Workbook_Open()
Call Test
End Sub
として実行してみてください
    • good
    • 0

では最初の状態のままループ条件を1から1にしてはどうでしょうか


----------------------------------------------------------------------
For i = 1 To 1
With Sheets(i)
If .ProtectContents = False Then
.Protect Password:="0630", UserInterfaceOnly:=True
End If
End With
Next i
----------------------------------------------------------------------
あまり意味はありませんが処理を1回だけループするというプログラムです
    • good
    • 0

こんばんは 横からすみません


同じブックを開いて 
バージョン違いで発生するコードは含まれていないと思います
エラー№(詳細)は何でしょうか
ローカルで試しましたが発生しなかった為、
Officeの問題かExcelBookの問題と推測します
(環境が違うので参考に成らないかもです)

Officeの修復を試してみてください
https://support.microsoft.com/ja-jp/office/offic …

ブックの問題の場合
お使いのExcelで新規ブックを作成して複数シートを追加、ランダムにシートに保護を掛け、シートタグから非表示を実施して ThisWorkbookモジュールに 当該コードを記載し 任意の場所に保存し閉じます
改めてそのブックを開いた時に同様のエラーが出るか確認してみてください
エラーが出なければブックの問題になります
この回答への補足あり
    • good
    • 0

説明不足ですみません(;´・ω・)


----------------------------------------------------------------------
For i = 1 To Sheets.Count
With Sheets(i)
If .ProtectContents = False Then
.Protect Password:="0630", UserInterfaceOnly:=True
End If
End With
Next i
----------------------------------------------------------------------
上記を
----------------------------------------------------------------------
Sheets(1).Protect Password:="0630", UserInterfaceOnly:=True
----------------------------------------------------------------------
の一行にするという意味です。
表示されているシートが1のみであれば保護するシートも1シートのみで問題ないと思われます。
この回答への補足あり
    • good
    • 0

ワークブックを見ていないので回答が難しいですが、「2」と表示されているということはワークシートが複数存在するということで、1枚目のシートは正常に処理が行えていることを意味します。

2枚目以降のシートが非表示になっていませんか?
確認方法はいくつかありますがデバッグ画面が表示されているということなのでプロジェクトウィンドウの「Microsoft Excel」フォルダ内のSheet1~複数が表示されていると思われます。ワークブック(通常のエクセル画面)のシートを右クリックし、メニューより「再表示」を選択してシートを表示してから処理を行ってみて下さい。
もし自動的にシートが非表示にされるようでしたら保護を掛けるシートを1のみにすれば問題ないかと思いますので「For文」を削除してSheets(1)のみに保護を掛けてみて下さい。
    • good
    • 0

未検証ですが以下コードをお試しください


----------------------------------------------------------------------
For i = 1 To Sheets.Count
With Sheets(i)
If .ProtectContents = False Then
.Protect Password:="0630", UserInterfaceOnly:=True
End If
End With
Next i
----------------------------------------------------------------------
上記はシートに保護がかかっていなければ保護をかけるという命令です。
この回答への補足あり
    • good
    • 0

デバッグで停止している時にSheets.Countにカーソルを合わせれば表示されますが、上手くいかない場合には「Ctrl+G」でデバッグウインドウを開き


「?Sheets.Count」と記入してエンターを押してください
    • good
    • 0

デバッグで停止した際にSheets.Countはいくつになっていますか?


もし「1」以外になっている場合には隠しシートが存在することが考えられます。
あとはWorkbook_Openに記載されていますが、シートがアクティブになっていない場合に同様のエラーが出ることがあります。「Workbook_Open」ではなく「Active」に記載してみてはどうでしょうか。
「Sheets」を「WorkSheets」にしてみるのも良いかもしれません。
最後に当該事象を検証するために「For」内に「With」句を切って修飾が正しいかを検証するのも良いかもしれません。

思い付くことを羅列しましたが解消の種になれば幸いです。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!