Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1189 / 2272 ツリー ←次へ | 前へ→

【8317】サブフォーム ハジメ 06/7/20(木) 14:56 質問[未読]
【8326】Re:サブフォーム 小僧 06/7/21(金) 10:11 発言[未読]
【8337】Re:サブフォーム ハジメ 06/7/21(金) 13:57 質問[未読]
【8338】Re:サブフォーム 小僧 06/7/21(金) 14:39 発言[未読]
【8347】Re:サブフォーム ハジメ 06/7/24(月) 13:28 質問[未読]
【8357】Re:サブフォーム 小僧 06/7/25(火) 10:12 発言[未読]
【8358】Re:サブフォーム ハジメ 06/7/25(火) 10:51 質問[未読]
【8359】Re:サブフォーム 小僧 06/7/25(火) 11:38 発言[未読]
【8360】Re:サブフォーム ハジメ 06/7/25(火) 12:23 お礼[未読]

【8317】サブフォーム
質問  ハジメ  - 06/7/20(木) 14:56 -

引用なし
パスワード
   レコードソースに テーブルAをしているサブフォームがあります
メインフォームでサブフォームをクリアするために以下のコードを記述しています。
 SET DB=CURRENTDb
 MySQL = "DELETE * FROM テーブルA"
 DoCmd.SetWarning False
 DoCmd.RunSQL MySQL
 DoCmd.SetWarnings True
 Me.Refresh

サブフォームで「選択」、「枚数」の項目を入力します。
 「選択」に 1 を入力すると「枚数」の変更入力できるようにSETFOCUSします
 コードは次の通りです。
  if me!選択=1 then
   me!枚数.tabstop=False
  else
   me!枚数.tabstop=True
  end if
以上の状態でメインフォームのクリア処理を実行すると、
『実行時エラー '-2147352567(80020009)
指定した式に macrosift Accessが見つけることができないフィールド、
 コントロール、プロパィ名が含まれています』
表示されます。
 エラーの原因は多分レコードソースをDELETEしたためだと推測しています、
それが正しいとした場合に、サブフォームをクリアする方法がわかりません。
どなたかご存知の方、どうぞご指導下さい。お願いします。

【8326】Re:サブフォーム
発言  小僧  - 06/7/21(金) 10:11 -

引用なし
パスワード
   ▼ハジメ さん:
おはようございます。

まず…前回の質問の際の

> 何とか解決しまいた。
> ありがとう御座いました

という事でしたが、
これでは何をやってどう解決したのかが何も解りません。

今後ハジメさんと同じ疑問を持っている方が
過去ログとして参照する価値のあるモノにしていきましょう。


>以上の状態でメインフォームのクリア処理を実行すると、

さて今回の事象ですが、まず
・どのタイミングでクリア処理を行っているのか
 (コマンドボタンを押した際、フォームをロードする際等)

・どの行でエラーが発生するのか

などの情報があるとより的確な回答が付きやすくなると思われます。

> Me!選択 = 1

Accessのウィザードでフォームを作った際など、
コントロールソース名とコントロール名が一緒になっている場合に
今回の様な事象が発生する場合があります。

コントロール名を例えば「cmb選択」「txt枚数」の様に
コントロールソース名と違う名前に変更すると解決するかもしれません。
(全然関係ないかもしれません)

【8337】Re:サブフォーム
質問  ハジメ  - 06/7/21(金) 13:57 -

引用なし
パスワード
   ▼小僧 さん:
早速の返信、ありがとうございます。
前回の件ですが、コードを書き直しをしている内にできまして、原因がわかりません
でした。どうも済みませんでした。

 今回の件ですが宜しくお願いします。
 Private Sub 選択_Exit(Cancel As Integer)
    If Nz(Me!選択) <> 1 Then
      Me!枚数.TabStop = False
    Else
      Me!枚数.TabStop = True
    End If   
  End Sub
クリアするタイミングはメインフォームでも発生しますし、サブフォームにカーソルが
ある場合でもコマンドボタンを押すと発生します。
発生するコードは
  If Nz(Me!選択) <> 1 Then
の行です。
このIF文の前にMSGBOXを試しに挿入すると、挿入したMSGBOXの行で同じく発生します。
また、選択の項目のイベントを削除すると現象は発生しません。
コントロール名を変更して実行しましたが、同じ現象です。
宜しくお願いします。

【8338】Re:サブフォーム
発言  小僧  - 06/7/21(金) 14:39 -

引用なし
パスワード
   ▼ハジメ さん:
こんにちは。

同じ様な環境を作って見たのですがこちらではなかなか再現しません…。


>Me.Refresh

Refresh メソッドですと「#Deleted」というのが残ってしまいませんか?
Requery だと大丈夫だと思うのですが…。

> DoCmd.SetWarning False
         ^^
> DoCmd.SetWarnings True

こちらはただの転記ミス、ですよね。

> このIF文の前にMSGBOXを試しに挿入すると、
> 挿入したMSGBOXの行で同じく発生します。

この辺が凄い怪しいのですが、
ツールバーの [デバッグ] → [xxxxのコンパイル] を実行して
コンパイルエラーは出ませんでしょうか。
(選択できない状態の場合、適当に改行をすると選べるようになります。)

【8347】Re:サブフォーム
質問  ハジメ  - 06/7/24(月) 13:28 -

引用なし
パスワード
   ▼小僧 さん:
お世話かけています。
 コンパイルをして実行しましたが、結果は同じ現象でした。

>Refresh メソッドですと「#Deleted」というのが残ってしまいませんか?
>Requery だと大丈夫だと思うのですが…。
 Requeryにすると「#Deleted」が残りました。

>> このIF文の前にMSGBOXを試しに挿入すると、
>> 挿入したMSGBOXの行で同じく発生します。
  MSGBOX me!選択 と挿入しました。(説明洩れでした)

 取敢えず選択のところはコメントにして実行することにしました。
  Private Sub 選択_Exit(Cancel As Integer)
  '  If Nz(Me!選択) <> 1 Then
  '    Me!個数.TabStop = False
  '    Me!枚数.TabStop = False
  '  Else
  '    Me!個数.TabStop = True
  '    Me!枚数.TabStop = True
  '  End If   
  End Sub
そして、枚数を入力した時に入力値とデータの枚数が異なればその行の背景色を
変えるようにしたら、別の現象が出ました。
サブフォームの背景色の変更は条件付書式設定で行っています

  Private Sub 枚数_Exit(Cancel As Integer)
  
   Dim DB As DAO.Database
   Dim RS As DAO.Recordset    
   Dim MySQL As String 
   Set DB = CurrentDb
   MySQL = "select * from Q_荷札用合計データ where 出庫No. = " & Me!出庫No.
   Set RS = DB.OpenRecordset(MySQL)    
   If RS.RecordCount = 0 Then
    Cancel = True
   Else
    If (Me!枚数 <> RS!枚数) Then
      Me!選択 = "1"        '←この行の背景色を変えるため
    End If
   End If
'------最終行のチェック
    If Me.CurrentRecord = Me.Recordset.RecordCount Then
      Me.Parent.cmd印刷.Enabled = True
      Me.Parent.cmd印刷.SetFocus
    End If    
  End Sub
上記のようなコードで表示されている枚数と異なる枚数を入力するとカーソルは
移動せずに枚数のところで動きません。カーソルは表示されています。
ENTERキーを押下すると画面の下に「計算中」と一瞬表示されます。
つづいて、 
  '  If (Me!枚数 <> RS!枚数) Then
  ’    Me!選択 = "1"        '←この行の背景色を変えるため
  '  End If
コメントにすると上記のような現象は出ずに次行にカーソルは進みます。
以上のようなことですので、よいアドバイスをお願いします。

【8357】Re:サブフォーム
発言  小僧  - 06/7/25(火) 10:12 -

引用なし
パスワード
   ▼ハジメ さん:

>  MSGBOX me!選択 と挿入しました。(説明洩れでした)

空のメッセージボックスを表示させるのにエラーが出るのでしたら
コードそのものがおかしいので

>> コンパイルエラーは出ませんでしょうか。

という事だったのですが…。

レコードの削除うんぬんやサブフォームの背景色の変更いうより、
結局「Me!選択」という記述において
全てエラーが出ている事になっていませんか?

まず事象の切り分けとして
「選択」のExit のタイミングでなくもっと単純なものから試していきましょう。
サブフォームに適当にコマンドボタンを配置し、

Private Sub コマンド0_Click
  Msgbox Me![選択].Value
End Sub

このコードが通らないようでしたら
「選択」というコントロール名がおかしいという事になりませんでしょうか。

【8358】Re:サブフォーム
質問  ハジメ  - 06/7/25(火) 10:51 -

引用なし
パスワード
   小僧さん。
お世話になっています。

Private Sub コマンド14_Click()
  MsgBox Nz(Me!選択.Value)
End Sub

  Private Sub 選択_Exit(Cancel As Integer)
    If Nz(Me!選択) <> 1 Then  <−ここでエラーが発生します
      Me!枚数.TabStop = False
    Else
      Me!枚数.TabStop = True
    End If
  End Sub
コマンドボタンを作り、「選択」に1を入力した時点でコマンドボタンを
クリックしたら 1 を表示します。また未入力の状態でクリックしても
空白を表示します。
しかし、画面クリアのコマンドを実行すると矢張り同じ現象
『実行時エラー -21473252567 云々』がでます。
(サブフォームでビュー設定を フォーム/データシートに設定していますが
エラーに関係しているのでしょうか。)
宜しくお願いします。

【8359】Re:サブフォーム
発言  小僧  - 06/7/25(火) 11:38 -

引用なし
パスワード
   ▼ハジメ さん:
こんにちは。
データシートビューにして色々操作していたらこちらでも再現致しました。
そして MDB ファイルが一部破損した模様です…。
(全然関係のない箇所で「指定されたレコード云々」記述が出て、
強制終了で対応するしかない状況になります。)


・新規MDBを作成
・テーブルやフォームを全てそちらにインポート
・コントロールソースとコントロール名全て違う名前にする

上記対応でもエラーが発生するようでしたら
申し訳ありませんがこれ以上原因が思いつかないです、すみません。

【8360】Re:サブフォーム
お礼  ハジメ  - 06/7/25(火) 12:23 -

引用なし
パスワード
   小僧さん。

新規DBにコピーして実行しましたが結果は同じでした。

色々と調べていただきありがとう御座いました。

別の仕様を考えてやり直します。

本当にありがとう御座いました。

1189 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078216
(SS)C-BOARD v3.8 is Free