• ベストアンサー

「クエリが閉じてるなら」「クエリが開いてるなら」

Sub test() If クエリが閉じてるなら Then  DoCmd.OpenQuery "クエリ1" ElseIf クエリが開いてるなら Then  DoCmd.Close acQuery, "クエリ1" End If End Sub という事をやりたいのですが、 「クエリが閉じてるなら」 「クエリが開いてるなら」 のコードがわかりません。 よろしくお願い致します。

noname#150427
noname#150427

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

横から失礼します。 この事でしょうか。 Debug.Print SysCmd(acSysCmdGetObjectState, acQuery, "Q_hoge") あるいは、 Debug.Print Application.CurrentData.AllQueries("Q_hoge").IsLoaded ビューの種類もある程度分かる様です。データシートビューは2を、デザイン&SQLビューは0を戻しました。 Debug.Print Application.CurrentData.AllQueries("Q_hoge").CurrentView ご参考まで。

noname#150427
質問者

お礼

ありがとうございました。大変参考になりました。

その他の回答 (2)

回答No.2

>ごめんなさい。アクセスVBAです。 >「単にフラグを立てておいてその状態を調べる」で大丈夫だと思います。 だったらそれで試して見て下さい。 >再度ご回答よろしくお願いします。 何を回答すればいいのですか? 先の回答で用が足りているのではないですか。 オープンしたところで  Frg = True クローズした後で Frg = False と設定して If Frg = False Then  DoCmd.OpenQuery "クエリ1 のようにして試して期待した動作をすればいいのでは。

noname#150427
質問者

お礼

なるほど。再度ご回答ありがとうございます。

回答No.1

単にフラグを立てておいてその状態を調べるのではだめですか? 質問されるのなら、言語やバージョンを含め状況を5W1Hを含めるようにして投稿されないと これを見ている人には適切に伝わりませんよ(レスがつかない)

noname#150427
質問者

お礼

ごめんなさい。アクセスVBAです。 「単にフラグを立てておいてその状態を調べる」で大丈夫だと思います。 再度ご回答よろしくお願いします。

関連するQ&A

  • エクセルVBAでアクセスの更新クエリを実行

    エクセルVBAでアクセスの更新クエリを実行する方法はありますか? アクセスもエクセルも常に起動している状態です。 エクセルからアクセスの更新クエリを実行するコードを教えてください。 アクセスで実行するとしたら Sub test1() DoCmd.OpenQuery "更新クエリ" End Sub というコードになります。 できれば、ADODBを使ったやり方がいいのですが、 エクセルからアクセスのプロシージャーのtest1を呼ぶしかないのでしょうか?

  • If~Elseif分で複数の条件式を書くには?

    毎度です。Access2000で悩んでいます。 フォームにいくつかのコンボボックスを設定してあります。 (コンボ1、コンボ2、コンボ3) この時に各コンボボックスの値を元にそれぞれ違うクエリを走らせたいのですがどうやって書けばいいのでしょうか? If Me!コンボ1 = 1 + コンボ2 = 1 + コンボ3 = 1 Then Docmd.OpenQuery "Query1" ElseIf Me!コンボ1 = 1 + コンボ2 = 1 + コンボ3 = 2 Then Docmd.OpenQuery "Query2" って書いてみたのですが、ダメでしょうか? 条件を複数書く時って「+」でつなげないのでしょうか? 素人です。やさしく教えてください。  

  • DAOでテーブルの内容を検索したいのですが…

    DAOでテーブルの内容を検索したいのですが… アクセス初心者です。 フォームで取得した値をテーブルで検索して命令するために,次のようなことをしてみましたが,FindFirstのところでエラーがでます。 どうしたらよいのかご指導ください。 コマンドボタンのイベントプロシージャで Private Sub テストテーブル作成_Click() Dim gakki As Integer Dim test As Integer Me.学期 = gakki Me.テスト = test Call testテーブル作成 End Sub として,標準モジュールに Sub testテーブル作成() Dim myDB As DAO.Database Dim myRS As DAO.Recordset Set myDB = CurrentDb Set myRS = myDB.OpenRecordset("T_生徒テスト") myRS.FindFirst "学期ID=" & "" & "gakki" & "" & "AND テストID =" & "" & "test" & "" If myRS.NoMatch = False Then DoCmd.OpenQuery "Q_TSテストA" DoCmd.OpenForm "F_テスト" DoCmd.Close Else DoCmd.OpenQuery "Q_TSテスト" DoCmd.OpenQuery "Q_テスト" DoCmd.Close DoCmd.OpenForm "F_テスト" End If myRS.Close: Set myRS = Nothing myDB.Close: Set myDB = Nothing End Sub としました。よろしくお願いします。

  • アクセス 帳票ビュー・単票ビューをボタンで切り替え

    帳票ビュー・単票ビューをボタンで切り替えたいのですが、どの定数を指定すればいいのかわかりません。 Private Sub 単票ビュー_Click() Call test End Sub Private Sub 帳票ビュー_Click() Call test End Sub Sub test() If ActiveControl.Caption = "帳票ビュー" Then DoCmd.RunCommand acCmdFormView '単票ビューにする ElseIf ActiveControl.Caption = "単票ビュー" Then DoCmd.RunCommand acCmdFormView '帳票ビューにする End If End Sub こんな感じで作ったのですが、「acCmdFormView」ではダメで、単票ビュー、帳票ビューをそれぞれ指定したのですが、コードを教えていただけますか?

  • クエリーから入力フォームの作成

    access2000を使って簡単な注文用のフォームを作っています。VBAは初心しゃです。 テーブルとしては、納品伝票(伝票番号、顧客コード)、顧客管理(顧客コード)を作り( )ないのものでリレーション組んでます。 クエリーでリレーションを組み、それを元にフォームを作りました。 希望としては(1)伝票番号の重複がないようにする。 (2)顧客コードから住所を表示させる、顧客コードが登録されていないときにはメッセージを出し、正しい顧客コード(顧客コードのみ)を入力させる。 (1)はクエリーでテキストのデータを条件にし、フォームのVBAで Private Sub 伝票番号_AfterUpdate() If DCount("伝票番号", "Q_納品伝票") >= 1 Then MsgBox "すでに登録されています" Me.Undo DoCmd.GoToControl "顧客名" DoCmd.GoToControl "伝票番号" End If End Sub で上手くできましたが、同じクエリーで(2)も(1)と同様なVBAを組んだところ(顧客デーブルの顧客コードに重複があるときをチェックさせる)、(1)の重複をチェックしなくなってしましまいました。 うまく説明できたが心配ですが、根本的に何か違っていますでしょうか?

  • アクセスで複数データ削除

    myPath = "D:\" myfilename = Dir(TxB04) Do Until myfilename = "" DoCmd.TransferText acImportDelim, , "tbl1", myPath & myfilename, False myfilename = Dir Loop MsgBox "取込が正常に終了しました。" MsgBox "二重打刻をチェックしてます。" '取込ファイル名を変換します。 DoCmd.SetWarnings False DoCmd.OpenQuery "データ変換" DoCmd.OpenQuery "実績追加" DoCmd.OpenQuery "重複データ削除" DoCmd.OpenQuery "削除クエリ" DoCmd.SetWarnings True Cmd21.Enabled = False ★Kill (strInFPath)★ 'メッセージマスタ取得 Sqlstate2 = "SELECT * FROM 氏名登録なし;" Set M_MSG2 = MyDB2.OpenRecordset(Sqlstate2, dbOpenSnapshot) If M_MSG2.RecordCount > 0 Then DoCmd.SetWarnings False DoCmd.OpenQuery "くえり1" DoCmd.SetWarnings True End If Exit Sub Err_Set_Seisan_Click: End Sub 今、vbでこのようなデータ取込を作っており★のところで取込データを削除させてます。 ただこれだと1つのデータしか削除できず、複数あったときには対応が困ってます。 こちら歯どのような対応でできるでしょうか? ご指導お願いします。

  • AccessVBA エクセル出力時にエラー

    Private Sub コマンド1_Ckick() If リスト = "1"Then DoCmd. TransferSpreadsheet acExport_ , , "クエリ1","MicrosoftExcel(*.xlxs)" ElseIf リスト = "2"Then DoCmd. TransferSpreadsheet acExport_ , , "クエリ2","MicrosoftExcel(*.xlxs)" End If End Sub ------------ リスト(1 Or 2)を選択後、コマンド1をクリックすると、 リストの選択に合わせてクエリをエクセル出力したいです。 行数が10万行と多い為、 行数制限があるマクロビルダーの「書式を保持してエクスポート」を使わず XLXS形式で出力したいです。 しかし、上のVBAを実行したところ、 「データベースまたはオブジェクトは読み取り専用なので更新できません」 というエラーが出てしまいます。 どこを訂正すればよいのかわからず困っています。 どうかご教授の程、よろしくお願いいたします。

  • Excel VBAを簡素化したいのですが動きません

    お世話になります。VBA初心者です。 下記TESTは動くのですが、『If myINT= Then』が永遠に続くので簡素化したく 『Rows("myINT : myINT").Select』これを入れてみたのですが全く動きません。 簡素化した記述を教えて下さい。宜しくお願い致します。 Sub TEST() Dim myINT As Integer myINT = ActiveSheet.Cells.SpecialCells(xlLastCell).Row   If myINT = 1 Then    Rows("1:1").Select    ElseIf myINT = 2 Then    Rows("2:2").Select   ElseIf myINT = 3 Then    Rows("3:3").Select   Else MsgBox "TEST" End If End Sub

  • テーブル・クエリ・フォーム どれがいい?

    アクセス初心者の為、よくわからないので教えてください。 テーブル1があり そこには ID(主キー/オートナンバー型) フィールド1(テキスト型)があります。 そのテーブルを基にクエリ1作成してます。 [SELECT テーブル1.* FROM テーブル1;] です。 また、テーブル1をレコードソースとしたフォーム1も作成しています。 そして図のようにメインメニューフォームを作成し それぞれのコマンドボタンを設置しました。 モジュールには --------------------------------------------------------- Option Compare Database Option Explicit Private Sub コマンド0_Click() DoCmd.OpenTable "テーブル1", acViewPivotTable End Sub Private Sub コマンド1_Click() DoCmd.OpenQuery "クエリ1", acViewPivotTable End Sub Private Sub コマンド2_Click() DoCmd.OpenForm "フォーム1", acFormPivotTable End Sub --------------------------------------------------------- と書いたので どのボタンを押してもピボットテーブルを開けます。 しかしどれか一つにしたいのですが 今後運用するにおいてどれで開けばいいのでしょうか? ピボットテーブルビューで開くならどれも同じでしょうか? 今回はピボットテーブルビューで表示していますが データシートビューでも表示させたい場合があれば 「フォームなら条件付き書式が設定できるからフォームが良いかなー」 と思っています。 確かテーブルやクエリでは条件付き書式はできなかったような・・・ 全てのビューで開くにおいて テーブル・クエリで開くメリットがあれば教えてください。 ご回答よろしくお願いします。

  • Access レイアウト変更したサブフォーム内のクエリを保存しないようにするには?

    OS:WindowsXP Access Version:Access2003 メインフォームにチェックボックスを配置、非連結のサブフォームにクエリを表示させています。 チェックボックスラベルにはクエリのフィールド名を表示させており、チェックボックスをオン/オフにすることでクエリのフィールドを表示/非表示に切り換えております。 ※切り替え方法はColumnWidthで操作しています。 ところで、表示/非表示と切り替え操作をしてメインフォームを閉じるコマンドボタンをクリックして閉じようとすると、 「”○○○(クエリ名)”のレイアウトが変更されています。保存しますか?」 という内容のメッセージが表示されてしまいます。 ここでレイアウトの変更は保存したくないのです。 そこで、私のした処置とは、 (1)メインフォームを閉じるコマンドボタンに DoCmd.Close acForm "○○○(フォーム名)" DoCmd.Close acQuery "○○○(クエリ名)",acSaveNo と記述しました。 acSaveNoのヘルプを見ると、 メッセージを表示せずに保存しないで閉じる、 とあったのですがこれでもメッセージが表示されてしまいました。 そこで、 (2) DoCmd.SetWarning False DoCmd.Close acForm "○○○(フォーム名)" DoCmd.Close acQuery "○○○(クエリ名)",acSaveNo DoCmd.SetWarninf True と記述したところ、メッセージを表示させなくすることには成功したのですが、無条件でレイアウトしたクエリが保存されてしまいました。 どのように記述すればメッセージを表示させず、かつレイアウト変更したクエリを保存せずに閉じることができますか? 初心者のため、誤字脱字があると思いますがすみません。 丁寧に教えていただければ幸いです。よろしくお願いいたします。