Sub マクロ()
DoCmd.OpenTable "Tテーブル", acViewNormal, acEdit
DoCmd.ApplyFilter , "番号 = '123'"
End Sub

Tテーブルを開き、フィルタをかけたいのですが
テーブルを開くまではできるのですが、
フィルタをかける行では
『ApplyFilter アクションの実行はキャンセルされました。』
になってしまいます。

DoCmd.OnFilter , "質問番号 = '0'"
でもエラーになり、コードの実行すら行えません。

フォームではなくテーブルにフィルタをかけるにはどうすればいいでしょうか?
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

普通に考えて・・・


> DoCmd.ApplyFilter , "番号 = '123'"
> DoCmd.OnFilter , "質問番号 = '0'"
の「番号」「質問番号」は、数字じゃなくて、数値じゃないの?
だから、「'」で囲むのは不要!って、落ちじゃないかな?
    • good
    • 0
この回答へのお礼

数値のときは「'」は不要なのですね。
ありがとうございます。
しかし
DoCmd.ApplyFilter , "番号 = 123"
ならエラーにならずに実行できるのですがフィルタはかけられませんでした。
DoCmd.OnFilter , "番号 = 0"
だとエラーになってしまいます。

お礼日時:2009/05/19 22:48

#2です



フィルタが掛からない?と、言う状況がどう言う状況なのか、判りませんが・・・
「番号」と言うフィールドが無い?とか・・・
(表題が「番号」で、フィールド名は別物って事ね)
Acc2000だと、漢字で始まるフィールド・コントロール等は、バグで挙動が怪しくて、動かない等
色々な要素が考えられます

後、確認不足だったのですが、当方Acc2002では、
> DoCmd.OnFilter , "番号 = 0"
の、OnFilterは、DoCmdの命令群の中に存在しません
ネットで調べても・・・そう言う命令が見当たりませんので、そもそもエラーが出て正解ですね
    • good
    • 0
この回答へのお礼

DoCmd.OnFilter はエラーになるのですね。
ちょっとまだうまくいかないのでもっと調べてみます。
ありがとうございます。

お礼日時:2009/05/20 21:09

何故テーブルにフィルターを掛けたいのでしょうか?



フォームでフィルターを掛けて何か不都合が有るのでしょうか?
    • good
    • 0
この回答へのお礼

テーブルでもできないかな~と思い質問してみました。

お礼日時:2009/05/19 22:45

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qaccessvba 複数条件で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

のような感じにしたいです。
ご回答よろしくお願いします。

テーブル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 テーブ...続きを読む

Aベストアンサー

Private Sub ID_テキスト_AfterUpdate()
Me.Form.Filter = _
"ID like '" & "*" & Me.ID_テキスト.Value & "*" & "' and " _
& "フィールド1 like '" & "*" & Me.フィールド1_テキスト.Value & "*" & "'"
Me.Form.FilterOn = True
End Sub
でしょ。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QACCESS で マクロの中でフィルタを使用する方法

ACCESS初心者です
フォームを使用してテーブルのデータを単にマクロでフィルタ実行をかけて検索をしたいのですが、where条件式のところで文字列をあいまい検索したいのです。(フォームでテーブルの項目の一部を入力して検索をかけたい)like * を使用したいのですが記述の方法がわかりません。教えてください。
よろしくお願いいたします!

Aベストアンサー

No.2です。

> 現在[顧客マスタ]![顧客カナ]=[Forms]![顧客情報検索]![顧客カナ] と式を入れている

「顧客情報検索」フォームの「顧客カナ」コントロールの値であいまい検索をしたい、ということですね。
でしたら、以下のように変えれば可能になると思います。

現在:
[顧客マスタ]![顧客カナ]=[Forms]![顧客情報検索]![顧客カナ]
変更後:
[顧客マスタ]![顧客カナ] Like "*" & [Forms]![顧客情報検索]![顧客カナ] & "*"


これで、「顧客カナ」に入力した文字列を含むものを検索できます。
なお、「先頭一致/後方一致をユーザーが選択できるようにしたい」という場合は、

変更後:
[顧客マスタ]![顧客カナ] Like [Forms]![顧客情報検索]![顧客カナ]

としておいた上で、ユーザーに「*」を含めて入力してもらう、というのが、プログラムを
組む側としては一番簡単かと思います。
(「モリ」を含む場合は「*モリ*」、「モリ」で始まる場合は「モリ*」、「モリ」で終わる場合は
 「*モリ」、「モリ」の完全一致の場合は「モリ」と、それぞれ入力してもらいます)

No.2です。

> 現在[顧客マスタ]![顧客カナ]=[Forms]![顧客情報検索]![顧客カナ] と式を入れている

「顧客情報検索」フォームの「顧客カナ」コントロールの値であいまい検索をしたい、ということですね。
でしたら、以下のように変えれば可能になると思います。

現在:
[顧客マスタ]![顧客カナ]=[Forms]![顧客情報検索]![顧客カナ]
変更後:
[顧客マスタ]![顧客カナ] Like "*" & [Forms]![顧客情報検索]![顧客カナ] & "*"


これで、「顧客カナ」に入力した文字列を含むものを検索できます。
なお...続きを読む

Qアクセエスのレコードの更新をVBAでするには?

アクセスで、一覧表のフォームにボタンを取りつけています。レコードの内容を変更したら、ペンの形のマークが現れますね。これは変更中ということですが、そこでボタンを押しても変更は確定されないから、更新確定させたいのです。

それで、DoCmd.Requery を最初の行に入れてみたら、元の一覧表は最初のレコードに飛んでしまう。

元の一覧表の位置を動かさないために、Ctrl+Enter キーを押して更新確定させたような状態をVBAで実現する方法あるのでしょうか?

よろしくお願いします。

Aベストアンサー

No1 です。
今回の場合には
Docmd.RunCommand acCmdSaveRecord の方が良かったですね
文字通りレコードを保存します。
Requery に引きづられてしまいました (^_^;)

Recalc、Refresh、Requery の使い分けは下記が参考にはなりますか?
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QAccessで別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

何卒よろしくお願い致します

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む

QACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入力画面
       ↓
レコード番号を入れると、そのレコードのデーターが画面に表示され、
その画面で修正可能
       ↓
 保存 ボタンで保存

という流れです。

レコードナンバーはIDを使おうと思っています。

データの量が莫大な為、コンポボックスなどは使えません。

できるだけ、VBAなどは使わずに作りたいです。

よろしくお願い致します。

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入...続きを読む

Aベストアンサー

まずそのテーブルを基にしてフォームを作成します。
そのフォームのヘッダー部分にテキストボックスを配置後、一旦
上書き保存。
フォームのレコードソースを
SELECT *
FROM テーブル名 WHERE ID=[Forms]![フォーム名]![テキストボックス名]
とします。
次にテキストボックスの更新後処理に
Me.Requery
とすれば完成です。
フォームを開いてテキストボックスにID入力後エンターしてください。

保存に関しては、コマンドボタン作成後クリック時イベントに
DoCmd.RunCommand acCmdSaveRecord
とすれば良いでしょう。

この手のモノは検索すれば相当数ヒットするので、そちらを参考にされるのもよろしいかと。

QACCESSでVBAから選択クエリの抽出条件を指定したい

選択クエリの抽出条件はデザインビューの「抽出条件」欄に直接条件式を書き込むのが普通だと思いますが、この条件式をVBAで記述することは出来るでしょうか?

DoCmd.RunSQL ではアクションクエリしか実行できないようだし、
DoCmsOpenQuery では引数に抽出条件を指定することが出来ないし困っています。

Aベストアンサー

おつかれさま~(^_^)
惜しいですね!
もう少しですね

さてさて、明日出張なので今日はたぶん最後のレスになってしまいますが、
ちなみに明日は返答できないのであしからず。。。

> Forms("サブフォーム").RecordSource = strSQL
駄目でしたか。。。

もし私が記載した内容で埋め込みのサブフォームを
利用しているのであれば
自分を参照する為に「Me」を使って

Me.埋め込みフォーム.Form.RecordSource = StrSQL
Me.埋め込みフォーム.Requery

に変更すれば動くと強く思います。
# 念じてます(^^)

ちなみに、
Me.
と打ち込んだ時点でオートコンプリート(名称あってるかな~)
機能が働いて参照できるオブジェクトが表示される
はずです。
その中にKojiさんが書いた埋め込みオブジェクトが
きっとあるはず
もしかすると"FormA"とか名前を付けたつもりでも
Visual Basic Editor君が気を利かせて
Form_formA
とかになってる場合があります。
最近やってないんでうろ覚えなんですが、こんな処を注意すれば大丈夫!

追伸
このコードって検索とかで使えますから
覚えておくときっと役に立ちますよ♪

おつかれさま~(^_^)
惜しいですね!
もう少しですね

さてさて、明日出張なので今日はたぶん最後のレスになってしまいますが、
ちなみに明日は返答できないのであしからず。。。

> Forms("サブフォーム").RecordSource = strSQL
駄目でしたか。。。

もし私が記載した内容で埋め込みのサブフォームを
利用しているのであれば
自分を参照する為に「Me」を使って

Me.埋め込みフォーム.Form.RecordSource = StrSQL
Me.埋め込みフォーム.Requery

に変更すれば動くと強く思います。
# 念じてま...続きを読む

Q【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには

バージョン:Access2002

フォーム「frm01」にテキストボックス「tb01」が作ってある場合、
Forms.frm01.tb01.Value="あいう"
とすれば、フォームもコントロールも指定できるのですが、
Dim strTxt As String
strTxt = "tb01"
Forms.frm01.strTxt.Value="あいう"
だと、文字列型変数"strTxt"が展開されないのでフォーム「frm01」のコントロール「strTxt」を探してしまいエラーになってしまいます。

文字列型変数でフォームやコントロールを指定するには、どのようにすればよいのでしょうか?

Aベストアンサー

フォームの場合
 Forms(strFrm)

フォームのコントロールの場合
 Forms(strFrm).Controls(strTxt)


これでも参照できますが、普通ここまで省略しませんね。
 Forms(strFrm)(strTxt)

あとで見たとき、訳がわからなくなりそう。

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

Qaccess マクロでのフィルタの解除の方法

フィルタをかける時は、

***************************
アクション:フィルタの実行
フィルタ名:なし
Where条件式:[フィールド1]="あ"
***************************

で、できますが、
フィルタを解除する時はどのようなマクロを作ればいいのでしょうか?

VBAでやるなら、
Me.Form.FilterOn = False
をマクロでやりたいです。

アドバイスよろしくお願いします。

Aベストアンサー

> VBAでやるなら、
> Me.Form.FilterOn = False
> をマクロでやりたいです。

ご質問の趣旨が「並べ替えは維持した状態で、フィルタだけ解除したい」という
ことでしたら、以下の方法で対応できます。


a)フィルタの解除専用の場合
***************************
アクション:コマンドの実行
コマンド:フィルタをすべて解除
***************************
※フィルタが適用されていない状態で実行するとエラーになります。
  (コマンドボタンで実行させる場合、フィルタ未適用時はボタンを使用不可
  にするか、マクロの『条件』欄に「~.FilterOn = True」の記述が必要、と)
  また、フォームのプロパティシートの『データ』タブにある『フィルタ』欄(VBAでの
  Me.Form.Filterに相当)に設定された文字列も削除されます。


b)フィルタの適用/解除を交互に切り替える場合
***************************
アクション:コマンドの実行
コマンド:フィルタの実行/解除
***************************
※当該フォームにフィルタが設定されていない場合、エラーとなります。
 (フォームのプロパティシートの『データ』タブにある『フィルタ』欄に
  フィルタとなる文字列が設定されていればOk:)
 (フィルタが適用済みなら解除、解除済みなら適用、となります)


因みに、マクロのデザインビューで、『デザイン』リボンの『表示/非表示』グループ
内にある『すべてのアクションを表示』をオンにしてもよいのでしたら、以下の
方法もあります。
(VBAでの方法をご存知の上でマクロで対応ということは、勤務先のセキュリティ
 方針によるものかと思いますので、この方法も不可かもしれませんが(汗))

***************************
アクション:値の代入
アイテム:Forms!フォーム名.Form.FilterOn
式:False
***************************

※サブフォームの場合の『アイテム』は以下のようになります:
 Forms!フォーム名!サブフォームコントロール名.Form.FilterOn

> VBAでやるなら、
> Me.Form.FilterOn = False
> をマクロでやりたいです。

ご質問の趣旨が「並べ替えは維持した状態で、フィルタだけ解除したい」という
ことでしたら、以下の方法で対応できます。


a)フィルタの解除専用の場合
***************************
アクション:コマンドの実行
コマンド:フィルタをすべて解除
***************************
※フィルタが適用されていない状態で実行するとエラーになります。
  (コマンドボタンで実行させる場合、フィルタ未適用時はボタンを使用不可
  にするか、...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報