m-eye blog

ノンプログラマによるVBAとPythonの学習記録

よくあるエラーにはまったお話し

f:id:m-eye:20181006130806p:plain

 

会社で

カンタンなマクロのカンタンなエラーにはまったお話しです。

 

なにがあったか

Excel 2010で、「マクロ有効テンプレートファイル」(.xltm)を作成して、そのファイルをVBAマクロから「マクロ有効ファイル」(.xlsm)として名前を付けて保存したときのこと。

   ActiveWorkbook.SaveAs _
        Filename:="C:\Users\m-eye\Desktop\Book11.xlsm", _
        FileFormat:=xlOpenXMLWorkbookMacroEnabled

このマクロが実行時エラー1004でうごかず、ファイルを保存できません。はて、なぜだろう。

 

さて

どうしたものかと思って、自宅に帰ると、とりあえずマクロの自動記録をとってみました。

    ChDir "C:\Users\m-eye\Desktop"
    ActiveWorkbook.SaveAs _
        Filename:="C:\Users\m-eye\Desktop\Book11.xlsm", _
        FileFormat:=xlOpenXMLWorkbookMacroEnabled

 

なんと

カレントディレクトリを変更していました。

なんでこんなムダなことをするんだろうという疑問はVBAでは禁句ですね。

こんなカンタンなことで解決するならすぐにマクロの自動記録をとればよかった。

 

ところが

家で解決したとおもったマクロのエラーは会社では再発しました。

うまく保存できたファイルもあれば、うまくいかなったファイルもありました。

うまく保存できたファイルのサイズは112KB。保存できなかったファイルのサイズは7655KB。

もしやと思って、保存するディレクトリをかえてみました。

「A」というディレクトリでは保存できなかったものが、「B」というディレクトリでは保存できました。

 

じつは

会社のディレクトリは、それぞれのディレクトリごとに容量がきまっていて、その容量以上にはファイルを保存できなかったのです。

いつも不要ファイルを削除するようにいわれますが、誰もきいていません。ファイルはふえるいっぽうです。

でも、保存できなかった「A」というディレクトリにどうしても保存したいので、ファイル構成を変更することで対応するようにしました。

6つのファイルがあって、1つ1つに郵便番号データが15万件ずつ入っています。だからファイルサイズが7655KBもあります。この15万件の郵便番号データを1つの独立したファイルにして、それぞれのファイルがこの独立したファイルを外部参照するように変更しました。

 

解決

じつにつまらないエラーでした。まさか「容量不足」とは。

しかし、解決には予想外に時間がかかりました。てっきりマクロ自体に問題があるものだとばかりおもってたからです。

今回は、保存できたファイルとできなかったファイルのサイズの違いから気がつきましたが、こういうエラーには万能の解決策はないようですね。

 

Copyright 2018 m-eye blog All Rights Reserved.