• ベストアンサー

フォームのデータシートビューにてVBAで直接記述したSQL文を実行した結果を返すことは不可能でしょうか?

リストボックス、コンボボックスなら Private Sub Form_Open(Cancel As Integer) With Form_フォーム1.リスト2 .RowSourceType = "Table/Query" .RowSource = "SELECT テーブル.フィールド, FROM テーブル" End With End Sub で結果を返すことは可能なのですが フォームをデータシートとして Private Sub Form_Load() Me.RowSourceType = "Table/Query" Me.RowSource = "SELECT テーブル.フィールド, FROM テーブル" End Sub とするのは不可能ですか? これを実行すると 「コンパイルエラー メソッドまたはメンバーが見つかりません」 となり、 「RowSourceType =」が選択されます。 そしてVBAの停止の意の四角ボタンを押すとユーザーフォームが図のようになります。 私のやりたいことは、クエリではなくVBAでSQL文を書き、データシートビューで表示させたいのですがやはり不可能でしょうか? (変数を代入できるため) 何でもいいのでご教授よろしくお願いします。

この投稿のマルチメディアは削除されているためご覧いただけません。

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

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

No.2です。 > しかしデータが表示されないのです。 もしかしたらなのですが、フォームにテキストボックスなどを設置していないか、 設置したテキストボックスなどの『コントロールソース(ControlSource)』に フィールド名を指定していない、ということはないでしょうか。 (リストボックス等では「列数(ColumnCount)」や「列幅(ColumnWidths)」等を 指定して表示列を規定したのに対し、フォームでレコードを表示する場合は、  フィールドに対応するコントロールを設置してやる必要があります) 以下、上記の推測の通りだった前提での回答になります。 (違いましたらご容赦のほど・・・) コントロールソースは、テーブルのデザインビューでも設定できますし、VBAで 設定することもできます(なお、フォームのRecordSourceも同様)。 SQL文の切替により、表示するフィールドの名前も変わる場合はVBAで都度 変更、SQL文を切り替えても表示するフィールドの名前は同じ(表示レコードを 指定するWhere句のみの変更など)場合はデザインビューで設定、とするのが 効率的かと思います。 以下、VBAの場合(前回からの改修): Private Sub Form_Load()  Me.RecordSource = "SELECT テーブル.フィールド FROM テーブル;"  txtフィールド.ControlSource = "フィールド" End Sub ※テキストボックス名を「txtフィールド」とした場合です。   複数のフィールドを表示する場合は、その数だけテキストボックスを増やし、   同様にControlSourceへの代入を行います。

lkhjlkhjlk
質問者

お礼

見事できました! .仰るとおりテキストボックスなどコントロールを配置していませんでした。(そりゃできないわけですね) できたときすごく感動しました!!! 本当に感謝です!再度ありがとうございます。

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

その他の回答 (2)

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

フォームにRowSourceやRowSourceTypeを適用するとご質問の エラーになるのは、No.1の方も言われているように、 フォームがそのプロパティを持っていないためです。 で、SQLの結果をデータシートに表示させたいのでしたら、 フォームの「RecordSource」にSQL文を代入します。 Private Sub Form_Load()  Me.RecordSource = "SELECT テーブル.フィールド FROM テーブル;" End Sub ※抽出したレコード自体を編集されたくない場合は、フォームの  プロパティシートで、『データ』タブの『レコードセット』を  「スナップショット」にしておいて下さい。  (「既存の編集は不可だけど新規追加は可」等としたい場合は、   『レコードセット』は「ダイナセット」とした上で、   その上の『更新の許可』~『データ入力用』の値を適当に   設定します。(『データ入力用』は起動時に新規レコードのみ   表示。詳細は、プロパティシートの当該部分にカーソルを   合わせた上でF1キーを押し、ヘルプを参照してみて下さい))

lkhjlkhjlk
質問者

お礼

すいません、間違えてアップした画像削除してしまいました。。。 DexMachinaさまご回答ありがとうございます。 早速実行してみました! しかしデータが表示されないのです。 一番左の横▲マークがある部分がレコード分しか表示されず、(テーブルは全部で1000行あり、フォームをあけるとデータはありませんが1000行まで見えます)列の再表示をしてもなにもありません。 しかし"SELECT テーブル.フィールド, FROM テーブル" をクエリのsqlビューに貼り付けて実行してもちゃんと表示されます。 なぜでしょう? 再度ご回答いただければ幸いです。

すると、全ての回答が全文表示されます。
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

[Me] は、コードが書かれたフォームの意味です。 [Form_フォーム1.RowSourceType] と指定したのと同じ意味です。 フォームにはRowSourceTypeプロパティが無いのでエラーになったのでしょう。 操作する場所(コントロール)を指定してください。 Me.リスト2.RowSourceType =

lkhjlkhjlk
質問者

お礼

ありがとうございます。 やはりフォーム上にコントロールを設置しないとだめそうですね。 「RowSourceType」をオブジェクトブラウザで確認したら ComboBox 、.ListBox、ObjectFrameの3つのみでした。

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

関連するQ&A

専門家に質問してみよう