情シス特化型メディア SYSZO

投稿日時 - 2016.10.12 08:55:49

shamshiadadさん

VBA を利用するとメモリ不足

Excel 2010
Windows 10 pro 64bit
のクリーンイストール環境にて、簡単なVBAを利用すると、メモリ不足エラーになる。ローカル上のファイルでも発生し、OS/Office のパッチは全て当てた。何か設定がありそうですが、今の所発見出来ず。Google 検索で1ページ目に出るような施策は全て実施。設定忘れかもしれませんが、知見をお持ちの方がいらしたら、ご指摘、ご教授よろしくお願い致します。

0
いいね
2016.10.12 09:11
wizeさん
「簡単なVBA」を公開できませんか?
1
いいね
2016.10.12 11:07
DALIさん
根本解決ではないかもしれませんが、仮想メモリの割り当てで解決するかもです。
http://pc-karuma.net/windows-10-page-file-settings/
1
いいね
2016.10.12 12:19
ユーザーさん
Google検索の1ページ目、は誰しも同じじゃないのでやったこと簡単に書いた方が回答つけやすいですよ(*´・ω・`)b

http://answers.microsoft.com/ja-jp/msoffice/forum/msoffice_excel-mso_other/excel2010%E3%81%AEvba%E3%81%A7%E3%83%A1%E3%83%A2/b4803c43-9eaa-46d7-8601-65c7146a3ef2

のExcelのセーフモードとかはダメだった、ってことですよね。
これは結局コードが悪かったみたいですけど。
1
いいね
2016.10.12 12:38
shamshiadadさん
諸々失礼しました。簡単なコードは以下です。
--------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyRng As Range, R As Range, L As Range
Dim LastUpdated As Integer
Set MyRng = Intersect(Target, Range("B2:D18"))
If MyRng Is Nothing Then Exit Sub

LastUpdated = 5

For Each R In MyRng.Rows
Cells(R.Row, LastUpdated) = Now
Next
End Sub
--------------------
VBA 的には特に問題ないかと思っていたので、以下対処を行いました。
・Excel 設定の確認(保護ビュー無効化、マクロ警告の無効化)
・Excel セーフモードにて確認
・Excel再インストール
・パッチ(Windows Update)の適用、です。
コードについては再度見直してみます。
諸々ヒント、ありがとうございました。
0
いいね
2016.10.12 13:36
ユーザーさん
たぶん、cells(....)=nowでworksheet_changeが無限ループしてませんかね?
1
いいね
2016.10.14 01:09
LSDさん
引数でセル範囲を渡して、そのE列に更新日として現在の日時を入れるという関数ですかね。

これは何度(数百~数万回)も繰り返し呼び出される関数でしょうか?
であれば、sysjojoさんの読み通り、ソースに原因である可能性がありますね。
少々、トリッキーなループインデックスの取り方してます。

ループの部分はこういう書き方の方が安定すると思いますよ。

Dim startRow As Integer
Dim endRow As Integer

startRow = MyRng.Rows(1)
endRow = MyRng.Rows(MyRng.Rows.Count)

Dim i As Integer
For i = startRow To endRow
Cells(i, LastUpdated) = Now
Next

数十回以下しか呼ばれない関数であれば、原因は別のところにあると思います。

ご参考まで
1
いいね
2016.10.14 05:10
ユーザーさん
いや、worksheet_changeはセルの値が変えられると起こるイベントだから。
セル値を書き換える前後でイベントOFF/ONしなきゃ起こる。

http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html

ステップ実行してみればわかりますよ。
1
いいね
2016.10.14 05:14
ユーザーさん
あとついでに言うなら、For Eachで回すのはVB系では普通です。
0
いいね
2016.10.14 11:07
LSDさん
あ、イベントだったんですね。
早とちり失礼しました。
2
いいね
コメントする

ログインしてからコメントできます

急上昇ワード

更新2017.04.26 11:08

SYSZO応援企業