プロが教えるわが家の防犯対策術!

ACCESS2000を使用しています。

フォームを作り、画面のテキストボックスに値を入れると、エラーになります。
エラーコードは 2448。
エラーメッセージは オブジェクトに値を代入できない と出ますが、ヘルプが参照できません。
どういうことなのでしょうか。

A 回答 (4件)

返答が遅くなりましてすいません。



>連結<->非連結はプロパティでマニュアル変更が出来そうな気がするのですが、>その方法が見つかりません。
マニュアルでプロパティを操作する場合、
「プロパティ」ウィンドウの「データ」タグの「コントロールソース」を設定します。
連結コントロールの場合、ここに連結されている項目名が表示されています。
非連結にするには、ここを消してください。
(普通にBackSpaceとかで消えます。)
これでOKです。

>今度はクエリーで2つのファイルをマッチングして作成したのですが・・・・
これは、別の問題になると思いますので、これでもう一つ質問を投げてはいかがでしょうか?
そうすればこの質問を見た方以外の方の目にも触れますから、それだけ回答が来る可能性が高くなりますよ。
また、記入していただいた内容だけでは原因を特定するのは厳しいと思いますので、今回で補足していただいたようにサンプルソースや、テーブルの関係、どのタイミングでどのように操作したか、エラーNoはこれ・・・
といったようにできるだけ細かく書いたほうが回答される可能性が高いと思いますよ。(めんどくさいんですけどね。)

では、がんばってください。
    • good
    • 0

これが原因かわかりませんが、


こちらで試して同じようなエラーが出るものをお知らせします。
1・連結テキストボックスの連結項目が、
  現在のフォームにリンクしているテーブルの項目にない。
2・連結テキストボックスの連結項目が、
  オートナンバー型などの入力を許さないデータ型になっている。

別のフォームからコピーされたものということなので、
そのテキストに設定されている項目が違う可能性はあります。また、内部的にそのリンクの設定がコピーによって変になっている
可能性もありますので、一度そのテキストのデータ項目を再設定して
みてはいかがでしょうか?

コントロール自体をコピーして使うということは通常やってます。
そのほうが効率いいですからね。
ですから、やり方自体は問題はないはずです。

駄目なようでしたら補足してください。
    • good
    • 0
この回答へのお礼

早速回答いただきましてありがとうございます。

 ウィザードで作成するということは、フォームに貼り付ける項目は非連結以外はすべてテーブルにリンクしていなければなら無いということですね。
連結<->非連結はプロパティでマニュアル変更が出来そうな気がするのですが、その方法が見つかりません。

 今度はクエリーで2つのファイルをマッチングして作成したのですが、マッチングキーに新しい値をセットしようとすると、エラーになります。
テーブル”xxx”のレコードに、'一'側と対応するレコードがなくなります。
と、いうエラーが出て、またヘルプを参照できません。
結合プロパティで、両方一致するものだけという条件をはずしてあるので構わないと思ったのですが、うまくいきません。

 それに、こういう処理をすると、ACCESSが正常に終了しません。
どういうことなのでしょうか。

お礼日時:2001/09/22 15:13

 テキストボックスに値を入れるタイミングは?


ユーザが入れるの?
 → 例えば、キーボード等から値を入力するのですか? これでエラーになる様なら、その時のコードと作成手順を書いて下さい。また、再現方法等が解りましたら、教えて下さい。

コード(VBA)から入れるの?
 この場合が多いと思いますが、どのタイミングでいれるかでエラーになります。フォームのロード時では、またテキストボックスのオブジェクトができていないので、上記の様なエラーになります。その場合には、フォームのアクティブ時等にコードを移して実行してみて下さい。

この回答への補足

回答ありがとうございます。
説明が不足していました。 コードは No.1 の補足に記述しました。

フォームをウィザードで作成したのですが、うまくいかない部分は、別のフォームからコピーして張り付けたテキストボックスです。 こんなやり方は出来ないのでしょうか。
よろしくお願いいたします。

補足日時:2001/09/21 23:27
    • good
    • 0

エラーの状況をもう少し詳しくうかがってよろしいですか?


>フォームを作り、画面のテキストボックスに値を入れると、エラーになります。
テキストボックスに値を入れるとは?
テキストボックスにキーボードから入れている。
VBAで、テキストコントロールに値を代入している。
などなど

また、VBAでやられているのでしたら、エラーの出るコードも教えていただけると助かります。

この回答への補足

回答ありがとうございます。
説明が不足しておりました。
コードを記述します。

Private Sub Furigana_Change()
'==============================================
Set SB = DBEngine.Workspaces(0).OpenDatabase("\acs\skw.mdb")

Set CUrc = SB.OpenRecordset("custom")
Set CTrc = SB.OpenRecordset("karte")

CUrc.Index = "cualtkey"
CTrc.Index = "ctaltymd"

CUrc.Seek "=", Me!furigana
Me!shimei = CUrc!shimei        ' (1) ok

CTrc.Seek "=", CUrc!cuscd
Me!raitendate = CTrc!raikyakudate   ’(2) ok

Me!PermaKusuri = CTrc!PermaKusuri ' (3) err

End Sub

(1)はウィザードでフォームを作成しました。
(2)は非連結です。
(3)は 元は別のフォームで作成し、コピーして、該当フォームに貼り付けたのです。 どうもこのやり方がうまくいかないのか指定の仕方が違うのかと思います。(2)も最初は(3)と同様でしたが、うまくいかないので非連結にしました。
(2)と(3)のフォームレイアウトは帳票形式です。
(1)は単票形式です。

このぐらいでお分かりでしょうか。

補足日時:2001/09/21 23:09
    • good
    • 0

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

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

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

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

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初心者です。

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

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

Aベストアンサー

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

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

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


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

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

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

Me.CurrentRecord

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

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

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

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

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

Aベストアンサー

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

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

Qレコードを保存するコード アクセスvba

アクセスですが
DoCmd.Save acForm, Me.Name
このコードはフォームを保存するコードですよね?
フォームではなく、レコードを保存するコードはありますか?

Aベストアンサー

フォームのカレントレコードの保存ということですよね。

Docmd.RunCommand acCmdSaveRecord

または、

Me.Refresh

でどうぞ。
Refresh は再読み込みも行われます。

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 VBA エラー2448について

初めて投稿します。

Access2013にてレポート出力の為のフォーム、レポートを作成しております。

Form:F_01
①txt_A/受付番号
②txt_B/担当者名
③txt_C/日付



Report:R_99
❶txt_A/受付番号
❷txt_B/担当者名
❸txt_C/日付

サブレポート:
受付番号に紐づいた明細表示

フォームからレポートへこれらの情報を受け渡すのにOpenArgsを使いしました。

Form側**********************************************
Private Sub cmd_PrintPVW_Click()
Dim sDATA As String

sDATA = Me.txt_NO.Value & "," & _
Me.txt_KPPSN.Value & "," & _
Me.txt_Customer.Value & "," & _
Me.txt_ANKEN.Value & "," & _
Me.txt_RQDate.Value

DoCmd.OpenReport "R_Order", acViewPreview, , , , sDATA

End Sub

Report側**********************************************
Private Sub Report_Open(Cancel As Integer)
Dim rDATA() As String

If IsNull(Me.OpenArgs) = True Then
Cancel = True
Exit Sub
End If

rDATA = Split(Me.OpenArgs, ",")

Me.txt_JNO = rDATA(0)
Me!txt_KPPSN = rDATA(1)
Me.txt_Customer = rDATA(2)
Me.txt_ANKEN = rDATA(3)
Me.txt_RQDate = rDATA(4)

End Sub

この様にしてみたのですが、いざレポートプレビューを開こうとすると表題のエラーが出て
「このオブジェクトに値を代入する事はできません」と言われてしまいます。

どなたかご教示願えれば幸いです。
どうぞよろしくお願い致します。

初めて投稿します。

Access2013にてレポート出力の為のフォーム、レポートを作成しております。

Form:F_01
①txt_A/受付番号
②txt_B/担当者名
③txt_C/日付



Report:R_99
❶txt_A/受付番号
❷txt_B/担当者名
❸txt_C/日付

サブレポート:
受付番号に紐づいた明細表示

フォームからレポートへこれらの情報を受け渡すのにOpenArgsを使いしました。

Form側**********************************************
Private Sub cmd_PrintPVW_Click()
Dim sDATA As String

sDATA = M...続きを読む

Aベストアンサー

レポートに値は代入できなかったと思います。
どうしてもVBAで行いたいのであればレポートをデザインで開きラベルを書き換えて下さい。

フォームの値を持ってくるだけなら
レポートのテキストボックスのコントロールソースに
=[Forms]![F_Main]![txt_NO]
と入れるだけでフォームの値を持ってこれます。

Q親フォームからサブフォームのレコードソースを設定

親フォームからサブフォームのレコードソースを設定するには?
フォーム1にテーブル1をドロップアンドドラッグして、「テーブル1のサブフォーム」を作成しました。

フォーム1にあるコマンドボタンから「テーブル1のサブフォーム」のRecordSourceを設定する方法を教えてください。

「テーブル1のサブフォーム」からなら
Private Sub Form_Load()
Me.RecordSource = ""
End Sub

とできるのですが、
やりたいことはフォーム1からのイベントなので
「テーブル1のサブフォーム」からのイベントは使えません。

だからってフォーム1の
Private Sub コマンド2_Click()
Me.テーブル1のサブフォーム.RecordSource = "テーブル1のサブフォーム"
End Sub

とするとコンパイルエラーになります。

良い方法があれば教えてください。アドバイスよろしくお願いします。

Aベストアンサー

No2です。説明もれがあったので追加しておきます。
No2のところで、

>このとき、「テーブル1のサブフォーム」
>のフィールドには「#Name?」のような表示がされていると
>思います。すなわちこときはサブフォームにはレコードソースが
>設定されていないからです。

としていますが、「#Name?」と表示される理由はフィールドの
コントロールソースが設定されているために、「#Name?」のような
表示が出てきます。


ここからは蛇足ではありますが、コントロールソースが設定されていなければ
こうした表示はでませんが、もしコントロールソースも取り除いて
いるならば、コマンド1でもコマンド2のクリックイベントでもどちらでも
かまいませんが、たとえば「テーブル1のサブフォーム」の
フィールドのコントロールソースをすべて取り除いておいて、
コマンド2のクリックイベントで設定するとすれば、一応
「テーブル1のサブフォーム」のフィールドの名前をID、名前、住所として
テーブル1のフィールド名を同じくID、名前、住所とするならば、

Private Sub コマンド2_Click()
Me.テーブル1のサブフォーム.Form.RecordSource = "テーブル1"
Me.テーブル1のサブフォーム.Form.Controls("ID").ControlSource = "ID"
Me.テーブル1のサブフォーム.Form.Controls("名前").ControlSource = "名前"
Me.テーブル1のサブフォーム.Form.Controls("住所").ControlSource = "住所"
End Sub

として、レコードソース、コントロールソースを設定します。

No2です。説明もれがあったので追加しておきます。
No2のところで、

>このとき、「テーブル1のサブフォーム」
>のフィールドには「#Name?」のような表示がされていると
>思います。すなわちこときはサブフォームにはレコードソースが
>設定されていないからです。

としていますが、「#Name?」と表示される理由はフィールドの
コントロールソースが設定されているために、「#Name?」のような
表示が出てきます。


ここからは蛇足ではありますが、コントロールソースが設定されていなければ
こうした表示はで...続きを読む

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のレポート上のテキストボックス値を設定したい

AccessのVBAを使っているのですが、作成したレポートに貼り付けたテキストボックスに値を入れることができません。

Report名.textbox名 = "設定したいデータ"

↑とすると「このオブジェクトに値を代入することはできません。」とエラーメッセージが出ます。
どのようにすれば、値を代入することができるのか教えてください。

Aベストアンサー

質問の意図が不明ですので、複数の回答を・・・。

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  Me.テキスト0 = "AAA"
End Sub

Private Sub コマンド0_Click()
  DoCmd.OpenReport "レポート1", acViewDesign
  Reports("レポート1").Controls("ラベル0").Caption = "AAA"
  DoCmd.Close acReport, "レポート1", acSaveYes
End Sub

前者は、テキストボックスにレポートを表示、印刷する際に"AAA"を代入しています。
後者は、テキストボックスではなくラベルコントロールを利用して"AAA"をフォームのコマンドボタンで代入しています。

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...続きを読む


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

人気Q&Aランキング