• ベストアンサー

フォームのデータシートビューにて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

  • RowSource プロパティ

    アクセスvbaでコンボボックスの値を設定する時に Sub マクロ1() With Form_フォーム .コンボ.RowSourceType = "値リスト" .コンボ.RowSource = """aaa"",""bbb""" End With End Sub Sub マクロ2() With Form_フォーム .コンボ.RowSourceType = "値リスト" .コンボ.RowSource = "aaa,bbb" End With End Sub ではどちらがいいのでしょうか? どちらも問題なく実行できます。 文字列だからダブルコーテーションで囲って入れてあげた方が良いのでしょうか?

  • accessでの2つのコンボックスによるフィルター

    フォームのオープン時に下記を記載しています。 Private Sub Form_Load() Me.ステータスリスト.RowSourceType = "Table/Query" Me.ステータスリスト.RowSource = "Select ステータスT.ステータス1 FROM ステータスT" Me.申請リスト.RowSourceType = "Table/Query" Me.申請リスト.RowSource = "Select 申請種別T.申請内容1 FROM 申請種別T" テーブルは3種類 申請履歴T(全データ) ステータスT(コンボックス用データ) 申請種別T(コンボックス用データ) Private Sub 検証_Click() DoCmd.ApplyFilter WhereCondition:="[ステータス]='" & Me.ステータスリスト & "'" 'DoCmd.ApplyFilter WhereCondition:="[申請内容]='" & Me.申請リスト & "'" End Sub 以上です。 1つを選択後2つ目を選択すると○○○and△△△って具合にならず、一方に引っ張られて ちゃんと出ません。 何卒、ご助言宜しくお願い致します。

  • VBAでSQL文の実行の記述について

    こんにちは。アクセスVBA初心者です。 どなたか教えてください! キーが二つあるテーブルに対して、 クエリやマクロを使わずにSQL文を使って存在チェック処理を行って、 ・0件ならば、画面入力値で登録処理、 ・0件でないならば、画面入力値で担当者名を更新処理 という処理を行いたいのですが、 どのようにVBA上でSQL文を記述し、 上記の条件を記述すればいいのかわかりません。 ちなみにテーブル名は「担当者マスタ」で フィールドは ・「支店コード」→第一キー ・「担当者コード」→第二キー ・「担当者名」 です。支店と担当者の組み合わせはユニークです。 画面フォーム名は「担当者マスタメンテ」で 画面フィールドは ・「支店コード」コンボボックス ・「担当者コード」コンボボックス ・「担当者名」テキストフィールド です。 どうか教えてください!お願いいたします!

  • アクセスの"検索"について

    いつもお世話になっています。 Accessのフォームにて、任意の郵便番号をテキストボックス(1)に入力し"検索ボタン"を押すと、 該当する住所がフォーム上のリストボックス(2)に一覧が表示され、 その中から任意の番号を1件選んで新たなテキストボックス(3)へ代入出来る、というようなシステムを作りたく考えております。 郵便番号は"郵便番号一覧"というテーブルにまとめており、 加えてクエリ( "Q_郵便番号")で郵便番号、住所等の項目を連結しています。(フォームも作成済みです) ただ、現在"検索ボタン"を押すと、全郵便番号が検索され、 もちろん郵便番号を選択するような事も出来ない状態で、構文作りに難航しています。 アイディアをお持ちの方、構文の作成についてご指南頂けますと幸いです。 現在、作成途上のVBAは下記の通りです。 Private Sub Form_Open(Cancel As Integer) 'リストボックスのプロパティの設定 With Me.(2) .RowSourceType = "Table/Query" .ColumnCount = 5 .ColumnWidths = "2.5cm;2cm;4.5cm;15cm" .BoundColumn = 1 .RowSource = "" End With Me.郵便番号検索.SetFocus End Sub Private Sub 検索ボタン_Click() '住所の検索 Me.(2).RowSource = "Q_郵便番号" Me.(2).Requery End Sub

  • Requeryしても並べ替えはされないのでしょうか

    【条件】*************************** (テーブル1) フィールド1 1 2 3 4 5 (クエリ1) SELECT テーブル1.フィールド1 FROM テーブル1 ORDER BY テーブル1.フィールド1; (フォーム1) レコードソース:クエリ1 既定のビュー:帳票フォーム コマンド3:コマンドボタン Private Sub コマンド3_Click() Me.Requery End Sub ************************************ 上記の条件で、3レコード目の「3」を「10」に変更し、 コマンド3を押下しても、10は3レコード目のままです。 フォーム1をバツボタンで閉じて、フォーム1を開きなおすと10は一番下に来ます。 Requeryで更新しているのに、なぜ並び替えがされないのでしょうか?

  • エクセルVBA 保護シート&フィルタ実行 全シート

    VBA超初心者です。 たくさんのシートのあるエクセルで、 シート保護後もフィルタを使用できるようにVBAを設定したいと思ってます。 (現在エクセル2000を使用してます) ネットで調べてVBAを設定してみました。 しかし下記のようにするとコンパイルエラーになってしまうのですが、 正しい方法を教えていただけると助かります。 Option Explicit Private Sub Workbook_BeforeClose(Cancel As Boolean)   Application.CommandBars("Cell").Reset End Sub Private Sub Workbook_Open()   With Application.CommandBars("Cell").Controls.Add( _            Type:=msoControlButton, Before:=1, Temporary:=True)     .Caption = "AutoFilter"     .OnAction = "ThisWorkbook.filter"   End With   With Worksheets.Select     .Unprotect     .EnableAutoFilter = True     .Protect UserInterfaceOnly:=True   End With End Sub Private Sub filter()   On Error Resume Next   Selection.AutoFilter End Sub

  • NULL値のレコードを検索(フィルタ)したい

    アクセス2003です。 画像の様なフォームを作成しました。 感想フィールドが未記入(NULL)のレコードにフィルタを掛けたいのですが Private Sub Click() Form_テーブル1.SetFocus Form_テーブル1.Filter = "感想 = '" & Null & "'" Form_テーブル1.Filter = "感想 = '" & "" & "'" Form_テーブル1.Filter = "感想 <> '" & "*" & "'" Form_テーブル1.FilterOn = True Form_テーブル1.Requery End Sub どれも引っかかりません。 クエリでデータ型を取得してみると NULLが返って来ます。 (SELECT TypeName([テーブル1]![感想]) AS 感想 FROM テーブル1;) Null値にフィルタを書ける方法を教えてくださいませ。

  • accessvba 複数条件でFilterをしたい

    テーブル1 --------------------------------------- ID フィールド1 フィールド2 1 あ A 2 い B 3 う C 4 え D 5 お E --------------------------------------- を作成し、そのテーブルをもとに、帳票フォームを作成しました。 そのフォームに非連結のテキストボックス ID_テキスト フィールド1_テキスト フィールド2_テキスト 3つを設置しました。 行いたい事をクエリ(SQL文)で例えると、 --------------------------------------- SELECT テーブル1.ID, テーブル1.フィールド1, テーブル1.フィールド2 FROM テーブル1 WHERE (((テーブル1.ID) Like "*" & Forms!テーブル1!ID_テキスト & "*") And ((テーブル1.フィールド1) Like "*" & Forms!テーブル1!フィールド1_テキスト & "*") And ((テーブル1.フィールド2) Like "*" & Forms!テーブル1!フィールド2_テキスト & "*")); --------------------------------------- なのですが、 これをクエリを作成せずに、VBAで行いたいです。 各非連結のテキストボックスには、 更新後処理:[イベント プロシージャ] としています。 --------------------------------------- Private Sub ID_テキスト_AfterUpdate() Me.Form.Filter = _ "ID like '" & "*" & Me.ID_テキスト.Value & "*" & "'" Me.Form.FilterOn = True End Sub --------------------------------------- は、問題なくできるのですが、 Private Sub ID_テキスト_AfterUpdate() Me.Form.Filter = _ "ID like '" & "*" & Me.ID_テキスト.Value & "*" & "'" and & _ "フィールド1 like '" & "*" & Me.フィールド1_テキスト.Value & "*" & "'" Me.Form.FilterOn = True End Sub にすると、エラーになります。 andの繋げ方が良くないと思うのですが、どうすればいいでしょうか? 最終的には、 Private Sub ID_テキスト_AfterUpdate() Me.Form.Filter = _ "ID like '" & "*" & Me.ID_テキスト.Value & "*" & "'" "フィールド1 like '" & "*" & Me.フィールド1_テキスト.Value & "*" & "'" "フィールド2 like '" & "*" & Me.フィールド2_テキスト.Value & "*" & "'" Me.Form.FilterOn = True End Sub のような感じにしたいです。 ご回答よろしくお願いします。

  • データシートビューからフォームビューへ切り替えられない。

    こんにちは。 以前、DexMachina様にご教授頂いたのですが 違うフォームを作っていたら データシートビューからフォームビューへ切り替えられないので教えてくださいませ。(アクセス2003) 前回質問:http://okwave.jp/qa4982081.html フォーム上(デザインビュー)にテーブルをドラッグしました。 (サブフォームのデフォルトのビューは、データシートビューになっていますが単票ビューに切り替えました。) 一度保存し、再度フォームを開くと、単票ビューで表示されるので その状態で、 Sub test() Forms("フォーム1").SetFocus Select Case Forms("フォーム1").Form.CurrentView Case 1 'フォームビューの場合 → データシートビューに切替 DoCmd.RunCommand acCmdSubformDatasheetView ' Forms("フォーム1").DefaultView = 2 Case 2 'データシートビューの場合 → ピボットテーブルに切替 DoCmd.RunCommand acCmdSubformPivotTableView End Select End Sub を実行すると、ちゃんとデータシートビューに切り替わります。 そしてデータシートビューからフォームビューへ切り替えようと思い 再度上記のコードを実行しても何も起こりません。 (エラーにもなりません) なぜでしょうか? ちなみに規定のビューをデータシートビューにして上記マクロを実行しても同様何も起こりません。データシートビューのままです。 MsgBox Forms("フォーム1").DefaultView で値を取得してみたら データシートビューでもフォームビューでも0が返って来ます。 何か原因がわかる方いらっしゃいましたら ご教授よろしくお願いします。

  • オートナンバー型はフィルタはかけられないのですか?

    ●テーブル1 フィールド1/テキスト型(主キー) フィールド1 20130128ダイエー ●テーブル2 ID/オートナンバー型(主キー) テーブル1の主キー/テキスト型 内容/テキスト型 ID   テーブル1の主キー   内容 1   20130128ダイエー   牛乳 2   20130128ダイエー   鶏肉 ●クエリ1 SELECT テーブル1.*, テーブル2.* FROM テーブル1 INNER JOIN テーブル2 ON テーブル1.フィールド1 = テーブル2.テーブル1の主キー; ●フォーム1 そのなかにクエリ1に紐づいたサブフォームを設置(データシートビュー) フォーム1にコンボボックスを設置して、 Private Sub コンボ1_AfterUpdate() With Me.Controls("クエリ1").Form .Filter = "ID = '" & Me.コンボ1.Value & "'" .FilterOn = True End With End Sub このような構成なのですが フィルタを掛けようとすると、 実行時エラーで 抽出条件でデータ型が一致しません。(エラー 3464) となってしまいます。 これはフィルタを掛けようとしているデータ型がオートナンバー型だからでしょうか?

専門家に質問してみよう