雑誌と書籍の在庫リスト改訂版「スタック領域の不足」対策

shosizaikokaiteieyecatch

雑誌と書籍の在庫リストの改訂版
「スタック領域の不足」を回避できるようにコードを追加しました。
Application.EnableEventsプロパティを使います。

こんにちは、じゅんぱ店長(@junpa33)です。

今までも多くの方にダウンロードいただいております、

「雑誌と書籍の在庫リスト」について、バージョンアップを行いました。

今回の改定は、エクセルVBAコードの一部追加になります。

そしてこちらの記事から、新バージョンのダウンロードを行っていただけるようにしています。

今回の改定は以下のようになっています。

なを、操作方法は変更していませんので今まで通りの操作でご利用いただけます。

雑誌と書籍の在庫リスト(棚卸表)作成の記事編成

雑誌と書籍の在庫リスト。対策バージョンへの変更点

shoshiVUp005

今回の変更点

「コード入力表」シートへ、バーコードリーダーで読み取り入力を行っているときに、

一定冊数の入力を行ったときに、「エクセルVBA」がハングアップしてしまう事があります。

shoshiVU000a

このような「スタック領域が不足しています。」と表示され、エクセルを強制終了させないといけなくなります。

エクセル自体の「自動保存の起動タイミング(分)」の設定で自動保存が実行されますが、

エクセルを強制終了すれば、エクセル起動後入力した入力データの保存実行されていない部分は失われます。

このアラートが出る前に、事前に予測の上で「上書き保存」を行いながら入力作業を進めていただければ、

アラートを出さずに続けて入力作業を行うことが出来ます。

自分の場合は、概ね47冊のバーコード読み取り入力でアラートが発生しましたので、

40冊ほどで入力を中断し「エクセルBOOKの上書き保存作業」を行う形で作業を継続していました。

改善したポイント

入力した冊数を自動でカウントします。

それぞれお使いになっているPCの環境で違っては来ますが、入力した冊数が30冊程になった時点で

VBA上に、自動でこのエクセルBOOKの上書き保存を行うようなコードを記述しました。

この方法で、問題点になっている「スタック領域の不足」を解放をするようにしました。

データ入力作業については、変わらず続けて行っていただくことが出来ます。

ただし、この上書き保存作業時には、画面の表示が変わりますのでご注意ください。

対策コードが起動したその時に、コードリーダーで読み込んだデータは「コード入力表」に記録されていません。

対策動作終了後のコード読み込み状態復帰後に、再度その ”読み込みデータ” の読み込み直しから再開してください。

表示される画面について

shoshiVUp006

上書き保存作業時の画面の表示については、このようになります。

shoshiVU001a

「A列のセルをアクティブにしてください。」のメッセージが出ます。

「OK」をクリックします。

矢印下001
shoshiVU002a

次に「コードを入力を 終了の場合はキャンセルを」のメッセージが表示されます。

「キャンセル」をクリックします。

矢印下001

初期状態に戻りましたので、A列のいずれかのセルをクリックしてください。

このあとセルがA列の入力位置に戻り、入力スタンバイに戻ります。

shoshiVU003a

このように画面的には、順次メッセージが切り替わります。

変更追加したVBAコード

shoshiVUp007

追加するVBAコードは2か所になります。

修正コード②

A列にISBNコードをバーコード入力すると同時に「F列」に「〇」マークを付けます。

Range(“F” & x) = “〇”           ’修正コード②

修正コード①

F列でチェックした「〇マーク」の数を数えて入力データの数(冊数)を調べます。

今回の修正コードでは、一度に30冊を処理する設定にしています。

冊数を数える方法は、「〇マーク」を付けた最初の行ナンバーと最後の行ナンバーを使ってカウントしています。

スタック領域の解放は、データを入力したこのエクセルBOOKを上書き保存することでおこないます。

VBA
'修正コード①追加ここから
    aRowa = Cells(1, 1).End(xlDown).Row
    fRowa = Cells(Rows.Count, 6).End(xlUp).Row
    fRowb = Cells(1, 6).End(xlDown).Row
    If aRowa > fRowa Then Columns(6).Clear
    If fRowb = 1048576 Then fRowb = 1
    If fRowa - fRowb > 31 Then
        Application.EnableEvents = False
        Cells(fRowa, 1).Clear
        Columns(6).Clear
        Cells(fRowa, 1).Select
        ActiveWorkbook.Save
        Application.EnableEvents = True
        Columns(6).Clear
        Exit Sub
    End If
'修正コード①追加ここまで

このようになります。

shoshiVU004a

コードの記入位置を間違えるとVBAが動きませんので、間違わないようにしましょう。

追加修正のまとめ

shoshiVUp008

シートイベントを使ったVBAは「スタック領域の不足」がよく発生します。

不足解除のためのこれといったVBAコードがあるわけでもありませんので、

今回は、ポピュラーな解決策の「上書き保存」で対応することにしました。

大量の処理をする場合、またどこかの時点でスタックエラーが発生するかもしれませんが、

その時はまた「上書き保存」で対応していただければと思います。

修正追加した「雑誌と書籍の在庫リスト」はこちら↓からダウンロードすることが出来ます。

いつもと同様、

こちらの方はVBAコードを保護していますので、使う側でのVBAコードのカスタマイズを行うことはできません。

このソフトはご自分で業務でお使いいただくのはフリーですが、
転載や転売については許可しておりませんので、ご使用にならないよう固くお断りいたします。

ダウンロードはこちら↓

このソフトはご自分で業務でお使いいただくのはフリーですが、

転載や転売については許可しておりませんので、ご使用にならないよう固くお断りいたします。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min