マンガでよめる痔のこと・薬のこと

ACCESS2010に関しての質問です。

マクロ中にIF文で分岐を設定しています。それ自体は正常に認識されますが、そのIF文中に更にもう一つのIF文を設定すると、

実行時エラー '2766':
このオブジェクトには、オートメーション オブジェクト'|'は含まれません。

というメッセージが表示されます。
構文上に誤りはないのですが、解決策が見つかりません。
どなたか教えていただけませんか?
ちなみに、最初のIF文ではform上の値を判断しており、次のIF文ではテーブル上の値を判断しています。

どうかよろしくお願いします。

A 回答 (4件)

サッパリ分かりません。


>データテーブル1の各フィールドの説明と、
>具体的なデータ例が回答には必要です。

> IsNull([データテーブル1]![申請日])
などという事は出来ませんので
DlookUp関数を調べてください。
    • good
    • 0
この回答へのお礼

色々試してみましたが、最終的に断念しました。
気に留めていただき、真にありがとうございました。

お礼日時:2013/04/26 17:27

途中から失礼します。


何をやりたいのか良く分かりません。
データテーブル1の申請日を参照したいようですが
直接は無理です。

また、
データテーブル1は複数のレコードが有るのでしょう?

データテーブル1の各フィールドの説明と、
具体的なデータ例が回答には必要です。

この回答への補足

色々考えていただきありがとうございます。

 何をやりたいかといえば、
画面入力した不備事由という項目と、申請日という項目の双方が入力されなおかつ確定ボタンが押されたならば、別のボタンを押すことを可能とするようにしたいということなのです。それをマクロで判断して実行するようにしているのですが、フォーム上では申請日を入力させた後に確定ボタンを押すようにしています。
 言い換えると、確定ボタンが押されているかどうかをテーブル上の項目である申請日に値が入っているかどうかで判断しようとしているわけです。フォームの元データはクエリで展開していますのでクエリの項目を使えば可能かとも思い試してみましたが結果は変わりませんでした。確定ボタンを押すことでテーブル内の申請日には値が入る仕組みにしてあります。

これでお分かりいただけるでしょうか?

補足日時:2013/04/18 15:08
    • good
    • 0

> If ([Forms]![顧客絞込み結果1003]![書類不備事由]=0) Then


> If Not IsNull([データテーブル1]![申請日]) Then
>   各マクロの実行文
>  Else
>   メッセージbox
>  If文の最後
> Else
>  メッセージbox
> If文の最後

エラーになるのは
If Not IsNull([データテーブル1]![申請日]) Then
の行ですか?

If ([Forms]![顧客絞込み結果1003]![書類不備事由]=0) Then
msgbox nz([データテーブル1]![申請日], "Null")
If Not IsNull([データテーブル1]![申請日]) Then
としたら、[データテーブル1]![申請日]を表示できますか?

この回答への補足

ケアしていただきありがとうございます。
指示通りに実行してみましたが、表示することができませんでした。
そもそもこのエラーはどんな場合に発生するのでしょうか?
不明で申し訳ありません。

補足日時:2013/04/18 12:09
    • good
    • 0

> 最初のIF文ではform上の値を判断しており、次のIF文ではテーブル上の値を判断しています。



そのIF文を両方とも提示いただけますか?

この回答への補足

早速関心を持っていただきありがとうございます。

IF文は以下の内容です。

If ([Forms]![顧客絞込み結果1003]![書類不備事由]=0) Then
If Not IsNull([データテーブル1]![申請日]) Then
    各マクロの実行文
Else
    メッセージbox
If文の最後
Else
メッセージbox
If文の最後

補足日時:2013/04/17 09:09
    • good
    • 0

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

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

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

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

QAccessVBA 実行時エラー'2766'について質問です。

AccessVBA 実行時エラー'2766'について質問です。

このオブジェクトには、オートメーションオブジェクト'レコードセット'は含まれません。

のエラーが出て困っています。
発生タイミングはフォームで4箇所以上の条件で検索した際に発生してます。
SQLに問題がありそうなのですが、SELECT~FROM文に続けて
WhereSQL = "WHERE List.DeleteCheck <> True "
WhereSQL = WhereSQL & "AND MCate = '" & ![txtFindMachineCate].Column(1) & "' "
WhereSQL = WhereSQL & "AND PName LIKE '%" & ![txtFindProductName] & "%'"
などテキストボックスに入力されているかをIF文でチェックして、
WHERE文をANDで結合しています。(AND文合計30個)
ただし、4個ほどテキストボックスやコンボボックスを選択して検索すると、エラーがでます。

上記の後に、ORDER BY句を結合しています。
SubFormSQL = SubFormSQL & "ORDER BY PNum;"

エラーのタイミングは上記の通りで、どのテキストボックスで起こるかは決まっていません。

何が原因しているのか、さっぱりで大変困っています。
アドバイスよろしくお願いいたします。m(_ _)m

AccessVBA 実行時エラー'2766'について質問です。

このオブジェクトには、オートメーションオブジェクト'レコードセット'は含まれません。

のエラーが出て困っています。
発生タイミングはフォームで4箇所以上の条件で検索した際に発生してます。
SQLに問題がありそうなのですが、SELECT~FROM文に続けて
WhereSQL = "WHERE List.DeleteCheck <> True "
WhereSQL = WhereSQL & "AND MCate = '" & ![txtFindMachineCate].Column(1) & "' "
WhereSQL = WhereSQL & "AND PName LIKE '%" & ![txtFindProductName] & ...続きを読む

Aベストアンサー

連結し生成しているので、空白区切りが要るのにない、シングルコーテーションが片方しかない、こういう観点でSQLが正しいかから探るというのはやりましたか。

QアクセスVBAのMe!と[ ]

基本的なことですみません。

アクセスのイベントプロシージャで、Me!ってありますけど、これはどういう意味なんでしょうか?

また、Me!の後に、Me!.~~と書く場合と、Me!.[~~]と書く場合がありますが、どこが違うのでしょうか?

Aベストアンサー

>プロシージャ内で[]を使う場合は、そのフォーム外のオブジェクトを使う場合と考えてよろしいでしょうか?
別のオブジェクトを使う場合だけではありません。
Hensu = Me![Text1]のようにHensuという変数に自身のTest1の値を代入する場合のように。
[]で括られているのがオブジェクト名やコントロール名だよという事。
クエリの抽出条件に存在しない[?]とすれば?というコントロール等が参照できないので?というダイアログが表示されるように?というオブジェクトやコントロールは何?と聞いてくるように。
>フォーム内のオブジェクトの場合はあくまでMe!で良いのでしょうか
Forms.[フォーム名]![コントロール名]やForms![フォーム名]![コントロール名]が構文。
アクティブなフォームが自分自身ならForms![フォーム名]の変わりにMeでもOKですという事。

と言う解釈の方が良いと思います。

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の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で空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QACCESSで条件によってフォーム上のフィールドの色を変更

一覧形式のフォームがあり、条件によって色を変更したいのですが、その条件というのが下記のような感じです。

フィールドA | フィールドB | フィールドC | チェックボックス
チェックボックスのチェックがあったら、フィールドA・B・Cの色をグレーにする。
チェックがなかったら白いまま。

というものです。
条件付書式だと、色を変更するフィールドそのもののデータを参照にしないといけないんですよね?
フォームオープンのところにVBAをかいてみたんですが、ひとつひとつは認識してないみたいで…。
どのようにすればいいのでしょうか?

よろしくお願いします。

Aベストアンサー

フォームのデザイン画面で3つのフィールドすべて選択し条件付書式画面を表示させる。
条件1のコンボで”式”を選択。
右側の欄に[チェックボックスのコントロール名]=True
と入力し、バケツアイコンでグレーを選択。
(もちろん1フィールドづつ設定してもOK)

QAccessでテーブルの値をテキストボックスに代入するには?

[ID][文字列]の2つのフィールドからなる単純なテーブルがあり、削除クエリを併用して常に最新のデータしか格納されていない状態に工夫できました。(データは常に1つ)
そこでフォーム上にあるテキストボックスにこのテーブルの[文字列]フィールドのデータを表示させたいのですが、
どうしたらよいでしょうか?

また、このテーブルの[文字列]フィールドのデータを直接変数として使いたい場合はVBAでどのように記述すればよいのでしょうか?

Aベストアンサー

テーブルに"データは常に1つ"ならコントロールソースに
「=DLOOKUP("文字列のフィールド名","テーブル名")」
IDごとに"データは常に1つ"ならコントロールソースに
「=DLOOKUP("文字列のフィールド名","テーブル名","[ID]='" & Me.ID & "'")」

Dlookup関数のヘルプ
http://office.microsoft.com/ja-jp/assistance/HP010496551041.aspx

QAccessのマクロでモジュールを実行させたい。

Access2002を勉強中の初心者です。

AccessでDB1という名前のデータベースを作成し、その中で、モジュール1というモジュールを作成しました。これを実行するマクロを作成したく、次のようにマクロを作成しました。
マクロのデザイン画面でアクションに「プロージャの実行」を選択、プロージャ名入力覧の右側の...のボタンを押して式ビルダ画面を表示、ここの「関数」フォルダを開いてDB1を選択、表示されたモジュール1を貼り付けてOK。
しかし、このマクロを実行すると、次のエラーとなります。「DB1 指定されたDB1が見つけることができない関数名が含まれています」

根本的に方法が間違っているのでしょうか?
アドバイスをよろしくお願いします。

Aベストアンサー

#1です。

ちょっと時間ができたので、Accessのヘルプで、
 "RunCode/プロシージャの実行" アクション
についてのトピックを見てみました。

結論から言うと、基本的な考え方が間違っているみたいです^^;。

「プロシージャの実行」アクションでは、「Function」プロシージャを指定するようです。
Subプロシージャではエラーになります。


つまりご質問の件では、
「Subプロシージャを呼び出すFnctionプロシージャ」をまず書かなけれえばならない。
そして、マクロのアクションでは、あらためてこのFunctionプロシージャを指定しなければいけません。

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でクエリで選択した行番号をつけたい

選択結果に1~順に番号をつけたいのですが、過去ログを見ると 番号: DCount("*","データ","[NO]<=" & [NO])とすればいいと書かれてありました。これはNOが昇順になっている場合にしか1~順になりません。
NOはユニークですが、他のフィールドで昇順にしたい場合はどうすればいいのですか?
例)
NO フリガナ
312 タナカ
322 イトウ
333 マツダ
・・・・
番号 フリガナ(昇順)
2 イトウ
1 タナカ
3 マツダ
となってしまうのです。
ACCESS2002

どうぞよろしくお願いします。

Aベストアンサー

 ん~多分、

番号: DCount("*","テーブル名","[フリガナ]&[NO]<='" & [フリガナ] & [NO] & "'")

でいけると思いますが、だめだったら、

番号: DCount("*","テーブル名","[フリガナ]<'" & [フリガナ] & "' OR ([フリガナ]='" & [フリガナ] & "' AND [NO] <= " & [NO] & ")")

かな?


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

人気Q&Aランキング

おすすめ情報