• ベストアンサー

なぜRecalcではだめなのか?

テキストボックスの現在の時刻を再計算をしようとして 何度もRecalcしていましたがエラーになり (メソッドまたはデータ メンバが見つかりません。 (Error 461)) 結局Requeryでうまく行きました。 Private Sub コマンド0_Click() Me.テキスト1.Recalc End Sub のコードです。 しかし Requeryでうまく行きました。なぜRecalcではだめなのか教えてください。

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

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

> なぜRecalcではだめなのか教えてください。 フォームにはRequeryメソッドとRecalcメソッドの双方が用意されているのに 対して、コントロールにはRequeryメソッドしかありません。 そのため、「メソッドまたはデータ メンバが見つかりません」とのエラーが発生 します。 では、なぜフォームでは双方を持たせているのにコントロールでは片方だけ なのか、ということになるかと思いますが、フォームでは2つのメソッドの実行 結果が異なるのに対して、コントロールでは(仮に双方を組み込んでも) 全く同じ動作にしかならないと推測されます。 そのため、コントロールについてはRecalcは省略(?)された、ということでは ないかと思います。 【フォームでの実行例】 ともに「テーブル1」をレコードソースとする「フォーム1」「フォーム2」を作成 します。 (ともに全レコード表示、帳票型) 双方のフォームを予め開いた状態で、フォーム1でレコードの追加や削除 を行った後、フォーム2でそれぞれRecalcとRequeryを行った場合、以下の ような差が出ます: Recalc:  フォーム1で追加したレコードは、表示されません。  (演算コントロールでの「=DCount("*", "テーブル1")」は、追加を反映) Requery:  フォーム1で追加したレコードも、表示対象に追加されます。  (当然、演算コントロールも反映) 従って、他のフォーム等での追加の反映の可否・要否で、フォームに対する RecalcとRequeryは使い分ける可能性があります。 一方、コントロールではこのような使い分けができる余地はまずない(*)ため、 Requeryだけでよいと判断されたものと思います。 *:コンボボックスやリストボックスの場合は、その余地があったかも、と。 VBE画面の右クリックメニューから表示できる「オブジェクト ブラウザ」で 検索を掛けると、指定した語句を含むメソッドや定数などが、どのオブジェクト (フォームやコントロール等)に対して組み込まれているかも確認できますので、 興味があったら確認してみることをお勧めします。

ijuhyg
質問者

お礼

>フォームにはRequeryメソッドとRecalcメソッドの双方が用意されているのに 対して、コントロールにはRequeryメソッドしかありません。 そのため、「メソッドまたはデータ メンバが見つかりません」とのエラーが発生します。 これが原因なのですね!詳しい説明ありがとうございます。 オブジェクト ブラウザも確認してみます。

関連するQ&A