- ベストアンサー
フォームのデータシートビューにて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文を書き、データシートビューで表示させたいのですがやはり不可能でしょうか? (変数を代入できるため) 何でもいいのでご教授よろしくお願いします。
- みんなの回答 (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への代入を行います。
その他の回答 (2)
- DexMachina
- ベストアンサー率73% (1287/1744)
フォームにRowSourceやRowSourceTypeを適用するとご質問の エラーになるのは、No.1の方も言われているように、 フォームがそのプロパティを持っていないためです。 で、SQLの結果をデータシートに表示させたいのでしたら、 フォームの「RecordSource」にSQL文を代入します。 Private Sub Form_Load() Me.RecordSource = "SELECT テーブル.フィールド FROM テーブル;" End Sub ※抽出したレコード自体を編集されたくない場合は、フォームの プロパティシートで、『データ』タブの『レコードセット』を 「スナップショット」にしておいて下さい。 (「既存の編集は不可だけど新規追加は可」等としたい場合は、 『レコードセット』は「ダイナセット」とした上で、 その上の『更新の許可』~『データ入力用』の値を適当に 設定します。(『データ入力用』は起動時に新規レコードのみ 表示。詳細は、プロパティシートの当該部分にカーソルを 合わせた上でF1キーを押し、ヘルプを参照してみて下さい))
お礼
すいません、間違えてアップした画像削除してしまいました。。。 DexMachinaさまご回答ありがとうございます。 早速実行してみました! しかしデータが表示されないのです。 一番左の横▲マークがある部分がレコード分しか表示されず、(テーブルは全部で1000行あり、フォームをあけるとデータはありませんが1000行まで見えます)列の再表示をしてもなにもありません。 しかし"SELECT テーブル.フィールド, FROM テーブル" をクエリのsqlビューに貼り付けて実行してもちゃんと表示されます。 なぜでしょう? 再度ご回答いただければ幸いです。
- hana-hana3
- ベストアンサー率31% (4940/15541)
[Me] は、コードが書かれたフォームの意味です。 [Form_フォーム1.RowSourceType] と指定したのと同じ意味です。 フォームにはRowSourceTypeプロパティが無いのでエラーになったのでしょう。 操作する場所(コントロール)を指定してください。 Me.リスト2.RowSourceType =
お礼
ありがとうございます。 やはりフォーム上にコントロールを設置しないとだめそうですね。 「RowSourceType」をオブジェクトブラウザで確認したら ComboBox 、.ListBox、ObjectFrameの3つのみでした。
お礼
見事できました! .仰るとおりテキストボックスなどコントロールを配置していませんでした。(そりゃできないわけですね) できたときすごく感動しました!!! 本当に感謝です!再度ありがとうございます。