Excel VBA の実行時エラー辞典
実行時エラー '70':アクセス許可が拒否されました
読み取り専用、他の処理のロック、保存先の書き込み権限を確認します。
よくある原因
- 読み取り専用のファイルに Output や Append で書き込もうとしています。
- 別のアプリや担当者がファイルをロックしています。
- 共有先や出力先で、自分のアカウントに書き込み権限がありません。
直し方
- 読むだけか書く必要があるかを確認し、目的に合う Open のモードを選びます。
- 書き込みが必要なら使用中のアプリと属性を確認し、管理者に保存先の権限を確認します。
- 許可された別の保存先でも試します。権限の変更や保護の解除を一律の対処にしないでください。
元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。
読み取り権限があるファイルを読むだけの例です。書き込みが目的の場合は Input に変更しても目的を満たせません。
修正前
Dim fileNo As Integer
fileNo = FreeFile
Open "C:\VbaPractice\readonly.txt" For Append As #fileNo
Close #fileNo
修正後
Dim fileNo As Integer, lineText As String
fileNo = FreeFile
Open "C:\VbaPractice\readonly.txt" For Input As #fileNo
If Not EOF(fileNo) Then Line Input #fileNo, lineText
Close #fileNo
Debug.Print lineText
調べ方
- エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
- 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
- Open のモードと実際のパスを記録し、同じアカウントで手動操作できるか比較します。
- Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? Err.Number, Err.Description
Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。