はじめまして。
ExcelでGUIなガントチャート作成ツールっぽいものを作ろうと思っています。
そして、現在以下の実装で検討中です。
・実際のタスクを管理する「タスク」シートと、タスクを表として表示する「カレンダー」シートを別に管理。
・「タスク」シートにはタスクID・タスク名・開始日・終了日の情報を保持
・「カレンダー」シートは、
1~3行目にカレンダー、1~5列目がタスクID・タスクの分類・タスク名などの情報を表示し、
「タスク」シートに記載されているタスクを「カレンダー」上にプロット。
・ユーザは「カレンダー」シートのタスク(セルで持っています)をマウスで操作することで、
タスクの追加・削除やスケジュール変更を行う
※Excelはユーザのマウスによる操作をセルの座標から該当タスクを特定し、
「タスク」シートの該当タスクの内容をセルの操作に応じて更新。
その後、更新後のタスクを元にカレンダーを再描画する。
---
で、「カレンダー」シートには、下記の要領のプログラムをかいています。
'常駐監視処理の操作用フラグ
dim Flg as Boolean
'ワークシートがアクティブになったときの処理
Private Sub Worksheet_Activate()
Flg = True
Call 監視
End Sub
'ワークシートが非アクティブになったときの処理
Private Sub Worksheet_Deactivate()
Flg = False
End Sub
Sub 監視()
debug.print "■監視開始"
Do While Flg
'ここに監視用の処理を実装予定
Loop
debug.print "■監視終了"
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
'セル更新時の処理
debug.print "■更新"
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'選択範囲変更時の処理
debug.print "■選択範囲変更"
End sub
---
このプログラムを起動した状態で、該当シートでセルのドラッグ&ドロップの
操作を行った際、Excel.EXEアプリケーションエラーが発生します。
「デバッグ」ボタンを押すと以下の添付画像のダイアログが表示されます。
※Worksheet_Change/Worksheet_SelectionChangeのイベントでも
トラップすることができません。
このエラーを回避する方法がありましたら教えていただけると助かります。
No.2ベストアンサー
- 回答日時:
Worksheet_Activate()で監視をCallしているのでループしているので処理が終了する前に次のイベントが多数発生してメモリを食い尽くしています。
イベントの処理が完結するまで(ユーザーの処理+Windwsの処理)同タスクからのイベントはDoEventsでは取れずキューイングしたままになるはずです。
Worksheet_Activate()では監視をCallせずFlgの変更のみとして、監視そのものはタイマなどを使用して別に行うべきです。
ありがとうございました!以下のような実装でうまく行きそうです。
'以下、ワークシート内に記述
Private Sub Worksheet_Activate()
Flg = True
Call 監視2
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Debug.Print "■更新"
End Sub
Private Sub Worksheet_Deactivate()
Flg = False
Debug.Print "===監視終了"
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Debug.Print "□選択範囲変更"
End Sub
'以下、標準モジュールに記述
Public Flg As Boolean
Sub 監視タイマーセット()
If Flg Then
Debug.Print "★待機中"
Application.OnTime Now + TimeValue("0:0:1"), "監視2"
End If
End Sub
Sub 監視2()
On Error GoTo Err_Trap:
'ここに監視処理を記載
Debug.Print "===監視処理中==="
Call 監視タイマーセット
Err_Trap:
End Sub
No.1
- 回答日時:
Sub 監視()
Debug.Print "■監視開始"
Do While Flg
DoEvents 'ここに監視用の処理を実装予定
Loop
Debug.Print "■監視終了"
End Sub
ループ分の中でメモリがいっぱいになっちゃってますので
ループ分内にOSに処理を返す、DoEvents を入れてみたらどうでしょうか?
この回答への補足
さっそくありがとうございます。
ご指摘の通り、DoEvents、確かに入れていました。
※監視処理のベースは下記のURLのものを使う想定です。
http://www.keep-on.com/excelyou/1999lng4/199909/ …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/06/10 11:06
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XCOPYでネットワーク越しにコピ...
-
タスクスケジューラからショー...
-
batファイルをアンダグラウンド...
-
eclipse の TasksにTODO が出ない
-
拡張子はなぜ、大文字と小文字...
-
ひとつのファイルを一括で複数...
-
エクセルでの計算式もしくはシ...
-
フォルダの並び替えの項目を固...
-
Androidアルバムの画像を消去で...
-
softonicという物をダウンロー...
-
フォルダの中に1個しかファイ...
-
Windowsフォルダ内のファイルと...
-
DOSコマンドでファイルをコピー...
-
dirコマンド一文ででフォルダの...
-
「グループ名またはユーザー名...
-
パソコン、ワンドライブをプリ...
-
ユーザーファイルのAppDa...
-
Windows10 で登録した外字を他...
-
6ヶ月経過日を算出する式
-
デスクトップ白色アイコン名の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XCOPYでネットワーク越しにコピ...
-
タスクスケジューラからショー...
-
batファイルをアンダグラウンド...
-
再起動後必ず2つのエラーが出...
-
eclipse の TasksにTODO が出ない
-
実行中のSendkeysのVBSを途中で...
-
バッチファイルで、プログラム...
-
エミュレータ上での動作の検出
-
タスク、プログラム実行後に自...
-
タスクマネージャーの状態の取...
-
バッチファイルをatコマンドで...
-
username以外でログイン名を知...
-
バッチファイルからメール作成...
-
RTOSのセマフォの使い方につい...
-
UACの権限昇格の確認ダイアログ...
-
タスクの相関図のわかりやすい...
-
このVBSを使用したいのですがエ...
-
VisualStudioで静的コードチェ...
-
VC++6 の CVTRES.EXE について
-
リエントラント関数
おすすめ情報