• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アクセスのフォームでタイマー機能を使うとエラー)

アクセスフォームのタイマー機能でエラーが発生しています

このQ&Aのポイント
  • Win7 Ultimate アクセス2013でタイマー機能を使ってデータをアップデートしていますが、マクロをタイマーで動かすとエラーやデータの消失が発生しています。
  • Win Vista Ultimate アクセス2003SP3でも同様のエラーが発生しましたが、2003の方がエラーの頻度が少ないです。
  • 簡単な操作ではエラーが発生せず、アクセスのフォームのタイマー機能に問題がある可能性があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.3

No.2です。 レスが遅くなってすみません(汗) > マクロではなくVBAで試していますが、2日間はエラーは出ておりません。 とのことから思い至ったのですが、マクロの「クエリを開く」や VBAのDoCmd.RunSQLが「非同期」だといわれているのは、 もしかしたら「一連のマクロ/コードの実行中」の話ではなく、 「あるマクロ/コードの実行中に、タイマーなど、全く関連の ないイベントをきっかけに、別のマクロ/コードが実行された 場合」の話、なのかもしれません。 つまり、タイマー時イベントによる処理の実行中に、タイマー 間隔の設定の時間が経過した場合、VBAでCurrentDbの Executeメソッドであれば、前のタイマー時イベントの処理が 終わるまで待機されるのに対し、マクロの『クエリを開く』 アクションやDoCmd.RunSQLでは即座に実行されるという ことではないか、ということです。 今回検証はしていませんが、こういうことであれば、今まで 使用してきた経験と照らし合わせても違和感はありません。 例) タイマー間隔が1分、タイマー時イベントの処理に要する 時間が1.5分の場合:  0     30秒  60秒   90秒   120秒  |---|---|---|---|  (a)          (b)    (c) (a)=最初のタイマー時イベントの発生タイミング (b)=次のタイマー時イベントの発生タイミング →マクロやDoCmd.RunSQLは、「(b)」で2回目の処理を実行  (=非同期処理)  CurrentDb.Executeでは、「(a)」のイベントで実行された  処理が終了する「(c)」まで待ってから、2回目の処理を実行  (=同期処理) > アクセスのTimer機能で問題はございませんか? こちらでは、主にデータベースの使用状況(使用端末と 使用時間を確認し、自動バックアップの要否を判定)で 使用していますが、データベースの使用中に端末を 休止状態にしたりといったことをしない限り、タイマー 関連でのエラーは発生していません。 (タイマー時イベントの処理は一瞬で終わる内容で、  タイマー間隔は10分なので、minoriyukiさんの  ケースとは状況が違いますが) なお、「ある特定条件で発生することを把握している、 (無視して後続処理を継続しても問題ない)エラー」が 発生している場合は、VBA上でエラー処理を組み込む という対応方法もありますので、併せて参考まで。 http://officetanaka.net/excel/vba/tips/tips104.htm 上記サイトの最下方にある、『エラーの種類を自動判定する』 の辺りが実用的かと思います。 ※「On Error Resume Next」を冒頭に記述して、  すべてのエラーを無視する方法を紹介しているサイト  などもありますが、自分の予想外のエラーも含めて  無視してしまうと、実際は問題があるのに隠蔽されて  しまい非常に危険です。  上記サイトのように、エラー番号で場合分けをしたり  するなどして、『想定していないエラー』については  MsgBoxで表示するか、無人処理にする場合は  エラーログとしてファイルを出力させる、といった対応を  とることを強くお勧めします。  (VBAで長時間の無人稼動をさせるのは、どちらにせよ  お勧めできませんが(汗))

minoriyuki
質問者

お礼

DexMachina様、どうもありがとうございます。 まさにここ、”マクロの「クエリを開く」や VBAのDoCmd.RunSQLが「非同期」だといわれているのは、 もしかしたら「一連のマクロ/コードの実行中」の話ではなく、 「あるマクロ/コードの実行中に、タイマーなど、全く関連の ないイベントをきっかけに、別のマクロ/コードが実行された 場合」の話、なのかもしれません。” のような気がします。 エラーでデバグをしてもマクロの部分が黄色くハイライトされているだけです。またマクロを手動で実行すれば一切エラーは出ません。 かなりの事をタイマーでやらせているのですがマクロをやめてVBAでやらせるようにします。確かに長時間無人稼働は良くないのですが、やむおえずやっております。On Error Resume Nextの件もありがとうございます。メッセージボックスで対応しようと思います。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

推測というよりは憶測ですので、違いましたらご容赦のほど・・・(汗) タイマー時イベント内での処理の実行中に、タイマー時イベントが 再度発生している、ということはないでしょうか。 私自身が時折これを失念して失敗していたりするのですが(汗)、 タイマー時イベントによる処理の冒頭では『タイマー間隔』を「0」に 設定した上で、反復処理が必要な場合は改めてそこに必要な 値を設定、とすれば、上記の現象(=タイマー時イベント実行中の タイマー時イベントの再実行)は発生しなくなります。 フォームの『タイマー間隔』は、マクロでは『値の代入』アクションで 設定できます。 以下は、「フォーム1」フォームの「タイマー間隔」に1分(60000ミリ 秒)を設定する場合の例です。 参考URL:  http://mukkumuku.blogspot.jp/2013/01/access-2010-2013-Macro-builder-2-.html  アクション: 値の代入  アイテム: [Forms]![フォーム1].[TimerInterval]  式: 60000 このアクションを、  ・タイマー時イベントの冒頭(「式」には「0」を指定)  ・タイマー時イベントの末尾(「式」には元の設定値を指定) の2箇所に組み込めばOkです。 また、hatena1989さんのアドバイスに従ってマクロではなくVBAで 対応する場合は、以下の式を使用します: (私自身がAccess2000まででマクロを使用して組んでいた時の  感覚としては、「クエリを開く」アクションが非同期処理だという  実感はなかったのですが・・・(汗):  MSの公式資料は未確認です)  Me.TimerInterval = 60000

minoriyuki
質問者

補足

DexMachina様どうもありがとうございます。 タイマーの間隔は59500で設定してあります。1分以内に終わってしまうイベントですと確かに再実行してしまいますね。したがってどのタイマーにも59500を設定してあります。マクロの内容は削除クエリと追加クエリの連続です。計8個のデーブルを最新情報にしています。約2分の作業です。マクロではなくVBAで試していますが、2日間はエラーは出ておりません。エラーが出ても次のタイマーのイベントをやってくれれば良いのですが、そこで止まってしまっているのでやるべき事をやらないので困っております。 手動でマクロを動かすのは2~300回は試しましたが一度たりともエラーは出ません。 朝一に誰かがボタンをクリックしてデータをアップデートするやる様に設定しましたが、やるはずの人が休んだり、忘れたりで話になりません。したがって色んな作業は全てタイマーにてやっております。DexMachina様はアクセスのTimer機能で問題はございませんか? どうもありがとうございます

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

これが原因かどうかは分かりませんが、マクロのクエリ実行は非同期なので、削除クエリ、追加クエリを連続して実行すると、前の削除クエリが終了する前に、追加クエリが実行される場合があります。 そうすると、エラーになったり、正しい結果にならない場合があります。 実行クエリを連続して実行する場合は、VBAの Excuteメソッドで実行するほうが安全です。Excuteメソッドは同期実行(前のコマンドが終了してから次のコマンドが実行される)になります。 Dim db As DAO.DataBase Set db = CurrentDB DB.Execute "削除クエリ名" DB.Execute "追加クエリ名"

minoriyuki
質問者

補足

hatena1989様どうもありがとうございます。 マクロのクエリ実行が非同期とは知りませんでした。 しかし手動のマクロ実行では問題が発生せず、タイマー時のみ発生するのが理解出来ません。 もう一つ、アクセスからクエリーをエクセルでエクスポートするのをタイマーでやっておりますが、これもエラーが出る時があります。マップドライブに出すためマップドライブにa.txtがあることを確認後出すのですが、エラーがでます。タイマーでエラーが出ると次の動きをしてくれませんので、本当に困ってしまいます。 マクロでなくVBAで書いて確認してみます。 どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Accessのエラー (いくつかあります・・・)

    アクセスでデータを入力したのですが、なぜか下記のエラーがでます… *作成したアクセスデータ* テーブル 項目AのCDと項目A、項目BのCDと項目B、項目CのCDと項目C、項目A~CのCDとその他繰り返し入力しないデータ の合計4つのテーブル それらすべてをリレーションでつないでます クエリ 全項目入りのテーブルを元に作ったもののみ フォーム クエリを元にウィザードを使って作成 *エラー* (1)クエリを作った時に、1つでもCDが入力されてないフィールドがあるとその行全体が表示されなくなる  (CDを入力したら表示されますし、テーブルではCDが入ってなくても全て表示されてます) (2)フォームで新たにデータを入力しようとしても一切入力できないし、変更もできない時がある (使用可能等の項目は一切触っていません) (3)フォームでCDが入ってる箇所を未入力にしたままでは保存できずに、「CDと値が一致しません」?のようなエラーメッセージがでる (すみません、エラーメッセージはうろ覚えです…) (4)なぜか昇順で番号を並べ替えていたのに、フォームでデータを追加したら、昇順が反映されずに「1,11,2…」のようにフォームのみ表示される (テーブル・クエリは反映されています) このエラーの原因がわかる方ぜひ教えてください!! よろしくお願いします。

  • Accessのフォームとテーブルについて教えてください。

    Access2003を使用しています。 既存のフォームAにフィールド3個を増やしました。 フォームAはテーブル(1)と連動していました。 追加したフィールドはテーブル(6)のものです。 ところがフォーム上で追加フィールドに入力が出来なくなりました。3フィールドのうち、ひとつはコンボボックスです。表示はされますが確定ができません。 フォームAのSQLステートメントではテーブル(1)・(6)以外にテーブル(2)・(3)・(4)・(5)が結合されています。 フォームAからするとテーブル(2)・(3)・(4)・(5)のデータはIDの名称を見るための参照用です。 テーブル(6)は、追加フィールドのコンボボックスが参照用で、他の2追加フィールドは、フォームから入力してテーブル(6)に反映させたいものです。 テーブル(6)の画面では入力できます。 フォーム上からは入力できません。 設定が何か欠けているからでしょうか? 他の質問では2つのテーブルをひとつのフォームにする場合は、クエリを別に設けた方がいいとなっています。フォームが出来上がっているので、できればクエリを設けずに行いたいのですが、よくない方法でしょうか? 手順なども踏まえて教えていただけると助かります。 よろしくお願いいたします。

  • Accessのフォームについて

    データ1、データ2というテーブルがあり データ2の中身を データ1に追加するという 「追加クエリ」を作りました。 それで、この「追加クエリ」を フォームのボタンをクリックしたときに実行させるようにしたいのですが どのようにすればいいのでしょうか。 (ボタンクリックで作成した「追加クエリ」自体を実行させることができるのか、 それとも追加クエリと同じ動作をさせるコードを記述して更新するようにしないとダメなのか) Accessを始めたばかりであまり詳しくないので 申し訳ないのですが ボタンクリックで作成した「追加クエリ」を実行出きるというのであれば(前者) コードとその説明を簡単でいいので 教えていただけないでしょうか。 よろしくお願いいたします。

  • フォームの作り方 アクセス2000

    アクセス2000を使い始めた初心者です。 顧客群に関するテーブルAがすでにあります。 このテーブルは事情があって、フィールドを追加することはできません。 もうひとつのテーブルBを作って、こちらに情報を追加するためのフィールドをいくつか作ります。 やりたいことは、 入力用のフォームに、テーブルAの情報内容を表示させて、テーブルBの入力をしたいのです。 クエリを作ってリレーションを設定するのだろうと思うのですが、具体的に進め方がわかりません。 よろしくお願いします。

  • Accessフォームの新規レコードについて

    いつもお世話になっています。 Access2000でフォーム作成をしているときにちょっと詰まってしまいました。 クエリからフォームの作成を行うと、フォームの新規レコードの追加ができないんです! テーブルからフォームを作成する場合は新規レコードの追加は可能でした。 クエリがあるとどうしても新規レコードの追加ができなくなってしまいます。 クエリからフォームを作成して、新規レコードの追加を行えるようにすればどうしたらいいんでしょうか? よろしくお願いします。

  • Access フォームからの入力結果をテーブルにすることはできない?

    Access フォームからの入力結果をテーブルにすることはできない? 使用しているのはWindows XP、Access 2003です。 とある調査結果をデータベース化する仕事を与えられています。 データ1件あたりの構成要素を一目で見れるようにするために「こういうレイアウトのフォームを作って」と上司からリクエストが出ています。 まず、今手元に集まっているデータについては、 Excelで一覧表作成 → Accessにインポートしてテーブル作成 → オートフォームでフォーム作成し、デザインビューでレイアウト変更 というふうにして、上司から言われたフォームは作りました。 今後、データは増えていくので、作ったフォームから新たにデータの追加をしていくことになるのですが・・・。 フォームからデータを追加しても、元となったテーブルにはリンクしませんよね? とすると、データを追加した結果をテーブルにしたい場合はどうしたらいいのでしょうか? 今度は、そこからクエリを組む必要も出てくるため、テーブルにしたいのですが・・・。 Accessについては、以前勤めていた会社の研修で習っただけで詳しい使い方をずいぶん忘れてしまっています。今回、自分なりにいろいろ調べてはみたのですが、よくわかりませんでした。 もしかしたら、Accessの使い方を基本的に間違っているでしょうか・・・ よろしくお願いします。

  • アクセス初心者^^; フォームで追加入力したら、クエリは?

    アクセスの初心者です。 1 追加のデータをフォームから入力したら、テーブルは自動的に追加されていましたが、それに関連した既存のクエリには自動的に追加されないようですが?反映させたい場合にはどうすればよいでしょうか。 2 また、テーブルとクエリとフォームの関係を簡潔に教えていただけたらと思います。

  • Accessのフォームについて教えてください。

    こんばんは。アクセス入門者です。 入門書やできるシリーズなどいくつかのアクセスの本を見たのですが、 フォームについて、理解できません。 ●担当者マスタ ■客先マスタ ★コードマスタ ▲売り上げ計画マスタ ◎売上げ結果マスタ テーブルを作り、それぞれのテーブルから必要な項目を集めて、クエリを作成しました。思ったとおりの結果になったので、これを元にフォームを作成しました。 思ったとおりの結果が表示されるのですが、このフォームに入力が出来ません。できなかったので、次の方法を試しました。 ★コードマスタと▲売り上げ計画マスタのデータをサブフォームに配置しデータを追加させようと思って、あらたにフォームを作りました。やはり、思ったとおりの表示はされるのですが、追加ができないのです。それぞれのテーブルには、★コードマスタを主にそれぞれ、一対多にリレーションを組んでいます。 1つのフォームで色々なテーブルに結果を反映できるように、参照整合性の更新、削除にもチェックを入れました。 この考えは間違っているのでしょうか。 ○○マスタとあるように、それぞれ1つのテーブルに1つのフォームにしなければならないのでしょうか。 複数のテーブルから取り出したデータの更新は無理なのでしょうか。 ある程度、クエリまで完成したのにフォームでつまずいて苦しんでいます。ご解答宜しくお願い致します。

  • Accessのフォーム

    Access2003を使用しています。 テーブルまたはクエリを元に作成したフォームにはテーブル・クエリに入力されているデータが表示されますよね? それらのデータをフォームから変更出来ないようにする方法はありますか? データ自体を非表示(入力用フォーム)にするのではなく、既存のデータは表示されるけど変更は出来ないという状態にしたいです。 ちなみに新規入力は行えるようにしておきたいです。 よろしくお願いします。

  • アクセスでフォームが消える(3回目)です

    何回もすみません。 アクセスのフォームでデザインビューでは表示されるが、データーシートビューでは表示されないの件ですが、フォームの問題ではなく、元になっているクエリーの問題のようです。 クエリーに追加表示するテーブルによって、クエリーの時点で詳細行が消えることがわかりました。 そのため、フォームでも表示されないようです。 が、解決方法が見つかりません。 よろしくお願いします。

専門家に質問してみよう