
ここで尋ねることが適切かどうか判りませんが、詳しい方お願いします。
現象の説明です。
約4MbyteのプログラムをエクセルVBA(2000pro.sp4)
で動作させています。コードを追加してCall命令を変更したら、下記のような現象に遭いました。
1)Call 先に飛ぶところで実行時エラー2004で止まる。
2)そのままデバッグ画面でF8キーを押すと進む。
3)その際、散布図コードはまだ利用していないのに、散布図の画面が表示
されている。(F8キーを押して後ですが、散布図利用ははるか先で
そこまで行く前でこの現象がおきる)
4)他のコードを外してプログラムを軽くしてもダメ。
5)コードを追加前に戻したら今度は追加前と変わらずきちんと動作する。
6)Yahooの添付メールを利用して自己へのメールを送ると、ウィルスチェ
ックはパス。当方のウイルスソフトもパス。(ウィルスはいない)
7)ハードデイスク容量は約700Mbyte空いている。
ところで、クリップボードを空にするコードはどのように書きますでしょうか。
ご存知、経験のある方、ご教示お願いします。
No.2ベストアンサー
- 回答日時:
こんにちは。
>Call 先に飛ぶところで実行時エラー2004で止まる。
2004ではなく、'1004'でしようけれども、そのエラーでは、ローカルモジュール内のエラーなので問題が特定できません。
VBAのスクリプト自体のエラーは、一旦、コンパイルされ、一時ファイルとしてキャッシュに、バイナリとしてありますから、スクリプト自体のエラー箇所のコードの先も後もありません。ただし、実行時エラーは、この限りではありません。
コードをみて '1004'のエラーを特定するのは、複雑なものは、かなりの経験を積まないと無理です。
いずれにしても、コードを見せていただかないと答えができないと思います。
>7)ハードデイスク容量は約700Mbyte空いている。
ところで、やけに少ないですね。それは、もうパンクする状態に来ていませんか?
>行列演算がシート一杯に広がる可能性もあるので
もしかして、多次元(5?次元以上)の配列演算や、一度にセル5,500以上の配列の演算ではありませんか。
Excel 2000では、ヘルプには書かれていませんが、5,500以上の配列演算が、事実上不可能なはずです。制限の解除されたのは、Excel 2002以上だと思います。
また、演算がシート一杯になる場合は、メモリの制限を超えていることがあります。
それから、メモリ制限というか、演算が楽になったのは、Excel 2007 からのはずですね。
それ以下のバージョンでは、Excelの Info関数 -- =INFO("memavail") でチェックが可能です。(Excel 2007 では不可)私のほうでは、およそ、50M を割った時点で、一応、中止するようにしています。(Info関数は、揮発性関数ですから、その都度、再計算してあげないと取れませんから、できれば、VBA側のほうが良いかもしれません)
>クリップボードを空にするコードはどのように書きますでしょうか。
何に対するクリップボードでしょうか? Office 内には、制限されたクリップボードが存在しています。確か、フリーソフトもあったような気がします。Excelなどでは、通常、DataObject(要参照設定/一旦、UserFormを作ると、設定される) を使いますが、DataObject では消せないものもあります。通常は、以下のような、Win32 APIを使います。途中で、マクロを止めると、ClipBoard がオープンのままになりますから、注意してください。
------------------------------------------------
'新しい標準モジュールに貼り付けてください。
Declare Function IsClipboardFormatAvailable Lib "user32.dll" _
(ByVal format As Long) As Long
Declare Function OpenClipboard Lib "user32.dll" (ByVal hwnd As Long) As Long
Declare Function SetClipboardData Lib "user32.dll" _
(ByVal uFormat As Long, ByVal hMem As Long) As Long
Declare Function EmptyClipboard Lib "user32.dll" () As Long
Declare Function CloseClipboard Lib "user32.dll" () As Long
Const CF_TEXT = 1& '現行ではテキストで判定しています。
Sub ClearCilpBord()
Dim ret As Long
If IsClipboardFormatAvailable(CF_TEXT) Then
If OpenClipboard(0&) > 0 Then
EmptyClipboard
Else
MsgBox "クリップボードのオープンに失敗しました。"
End If
Else
MsgBox "空です"
End If
ret = CloseClipboard()
End Sub
参考データ
http://msdn.microsoft.com/ja-jp/library/cc440846 …
ありがとうございました。質問を投稿した以後、クリップボードの解法は
まだやっていませんが、ソフトのコードを新しく作り直してからはうまく
動作しています。(新しいソフト)
しかし、旧いソフトは同じような箇所で同じエラーを返します。
私の原因推定は Disk容量が50Mbyte以下になってもプログラム
作成していた時期があり、その当時のデータは化けデータと化してプログラ
ムコードに記録されてしまった。何故なら、同じコードで作成した新ブック
はきちんと動作する。旧いブックは相変わらず同じ箇所でエラーを起こす。
そして、旧いブックの問題のコードを新ブックの同じ部分のコードと張り替
えると、今度は新ブックもエラーを起こす。・・・・独断です。
ハードデスク容量が少なくなったマシンでプログラミングをしてはいけな
い。というのが、私なりの結論でした。
No.1
- 回答日時:
>ところで、クリップボードを空にするコードはどのように書きますでしょうか。
クリップボードを操作する(2)
http://www.officetanaka.net/excel/vba/tips/tips8 …
ご参考まで。
大変貴重な情報です。ありがとうございました。試してみたいと思います。
現在は質問の不具合に対しては、ゼロからコード修正をやり直しています。
(1ステップずつチェックしながら、また前回のコードより簡潔に)
行列演算がシート一杯に広がる可能性もあるのでその容量チェックにも利用
したいと思います。他にもどなたかアドバイスお願いします。特にPCの
目に見えない故障の前兆とか???これも心配です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- その他(Microsoft Office) ワードのマクロについて教えてください。 1 2023/01/21 16:01
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- Visual Basic(VBA) excel vbaでselenium basic 3 2022/10/02 12:35
- Visual Basic(VBA) ExcelのVBAコードについて教えて下さい。 2 2022/06/25 14:04
- Excel(エクセル) 【VBA】 Alt+PrintScreenにてアクティブウィンドウのスクショを貼付する方法 4 2022/12/08 20:53
- Excel(エクセル) Excelのマクロについて教えてください。 4 2022/05/31 14:07
- Excel(エクセル) 1つのファイルを3つのフォルダにファイル名を【明日の日付】にして、コピーをしたい 2 2022/12/21 17:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
Excelのエラーで困ってます。
-
Fortran コンパイルエラーについて
-
プッシュボタンができなくなってる
-
Visual Studioのstrcpy_sについて
-
HANDLEの宣言でのエラー
-
DLL関数を使ったプログラム
-
error C2143: 構文エラー の対処法
-
RightとLeft関数のライブ...
-
vb6について
-
type
-
ACCESSのDate関数のエラー表示...
-
EXEで実行すると発生するORA:06...
-
配列の初期化時に出たエラーの...
-
Mac上でのg++についての質問
-
バッチからsqlplusの接続エラー...
-
HEWを使用しているのですが、こ...
-
visual C++ でビルドの中止がで...
-
strcatについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
Excelのエラーで困ってます。
-
バッチからsqlplusの接続エラー...
-
fortranでプログラムを実行する...
-
visual C++ でビルドの中止がで...
-
適切な変換関数が存在しない???
-
VB2008で定数に色の設定をした...
-
デバッグ中のエラーのことで教...
-
HEWを使用しているのですが、こ...
-
RightとLeft関数のライブ...
-
コンパイルできません。
-
ビルド失敗 指定されたファイ...
-
Visual Studioのstrcpy_sについて
-
BC30002: 型 'ListItem' が定義...
-
LPCWSTRとchar
-
「指定したフォルダにあるファ...
-
WindowsからLinuxへの移植
-
sys/time.hのインクルードがで...
-
エラー 'iostream.h' : No su...
おすすめ情報