まりふのひと

家計簿77/シートが保護されていると、エラーにならない?

 24日の「iPS-BBの会」で、

家計簿77の[翌月分シート作成]で、シートはできるが、前月分のデータが入っている(残る)
との不具合を指摘された。

  • 原因は、
    1. シートが保護されていたため、
    2. 行削除ができなかった もの。
  • 処置は、
    1. シート見出しを右クリックし、
    2. [シート保護の解除]をクリックする。
      • 注)[シートの保護]はクリックしないこと!!!



  1. ソースコードを見ると‥‥
    1. Selection.EntireRow.Delete が利いていない。
      • 利かない原因は、シートが保護されていたためで、これは納得できる。
    2. 問題は「On Error GoTo Err_データ部クリア」が入っているのに、効いていないこと。
       但し、呼び出し元には「On Error GoTo」文は入っていない。
  2. ステップ実行して追うと‥‥
    1. 上記 1.1. でエラーとなり、
    2. Err_データ部クリア(下記)に飛ぶ。
      1. Err_データ部クリア:
      2. MsgBox "データ部クリアに失敗しました。", vbCrLf & vbCrLf _
      3. & " 引数1=" & argシート名 & vbCrLf & vbCrLf _
      4. & Err.Number & Err.Description, vbCritical, mbTitle
      5. Resume Exit_データ部クリア
    3. しかし、MsgBox を出すことなく、呼び出し元に戻る。
    4. 呼び出し元には On Error GoTo は無いので、正常終了してしまう。
    5. 但し、2.2. の Err_データ部クリア にジャンプした後、
      デバッグウィンドウで ?Err.Number すると 1004 と表示された。
      (∵Delete が実行できなかったためであろう)

結論

  • 呼び出し元に On Error GoTo文を入れた。
  • 結果として、下図のエラーが出る。

    左側:翌月分シート作成 右側:翌月分ブック作成