トップ回答者
アクセス2019で、型が一致しませんとエラー表示され、動かなくなったVBA

質問
-
下記VBAが
Access2019では”RecordCount”の部分が青く反転し
”コンパイルエラー:型が一致しません”とエラー表示されVBAが動作しません。
Access2010~2016では正常に動作します。
OSはすべてWindows10Pro64bですVBAに不慣れで適切な質問なのかもよくわかっていません、申し訳ありませんがご指導お願いします。
Sub フォーム別対処()
'-----オブジェクト変数の宣言
Dim cn1 As ADODB.Connection
Dim rs1 As ADODB.Recordset
Select Case Mode
※中略
Case 2 '転室入力からのアクセス
'-----オブジェクト変数へ代入
Set cn = Application.CurrentProject.Connection
Set rs = New ADODB.Recordset
rs.Open "転室一時データ", cn, adOpenKeyset, adLockOptimistic
rs.Find "カルテNo='" & ptNo & "'"
If rs.EOF = False Then
MsgBox "その患者さんは先程選んだはずですが。やり直しっす。"
Exit Sub
End If
DoCmd.SetWarnings False '警告メッセージをオフにします。
DoCmd.OpenQuery "転室一時追加Q"
DoCmd.SetWarnings True '警告メッセージをオンにします。
'-----オブジェクト変数へ代入
Set cn1 = Application.CurrentProject.Connection
Set rs1 = New ADODB.Recordset
strSQL1 = "SELECT 転室一時データ.* "
strSQL2 = "FROM 転室一時データ "
strSQL3 = "ORDER BY 転室一時データ.[No]"
strSQL = strSQL1 & strSQL2 & strSQL3
rs1.Open strSQL, cn1, adOpenKeyset, adLockOptimistic
BBB = rs1.RecordCount(ここの部分が青く反転)
rs1.MoveFirst
For i = 1 To rs1.RecordCount
Forms("転室入力F")("患者名" & i).Value = DLookup("患者氏名", "ta_患者基本", "[カルテNo]=" & rs1![カルテNo])
Forms("転室入力F")("転室元" & i).Value = rs1![ステータス詳細]
Forms("転室入力F")("No." & i).Value = rs1![ステータスNo]
rs1.MoveNext
Next i
DoCmd.Close acForm, "病室表"
Forms("転室入力F")("転室元" & BBB).Visible = True
Forms("転室入力F")("矢印" & BBB).Visible = True
Forms("転室入力F")("転室先" & BBB).Visible = True
Forms("転室入力F")("転室先" & BBB).SetFocus
Forms("転室入力F")("転室先" & BBB).Dropdown
※中略
End Select
End Sub
回答
-
変数宣言が無いということは、「Option Explicit」宣言が無い状態でしょうか?
宣言があるのに変数が見つからない場合、その BBB はフォームやレポート上のコントロールやフィールドである可能性もあります(標準モジュール上に書かれているコードだとすると当てはまりませんが)。
コントロール等でも無い場合には、とりあえず一時的に As Variant な変数を用意して、ステップインできるかどうかを確認してみてください。それでも実行できそうにないでしょうか。
問題の原因として思いつくのは、Access を開く環境の差異によって、参照設定の不整合が生じている可能性です。このような場合、本来の障害箇所とは別の箇所でコンパイルエラーとなることがあります。参照設定を可能な限り外してからファイルを開きなおし、改めて、参照設定をやりなおしてみると回復するかもしれません。ActiveX コントロールや追加の参照設定が含まれている場合は、32bit/64bit の違いが無いかも確認しておきましょう。
それ以外では、Access ファイルの部分的な破損の可能性もありえます。この場合、完全に修復できる保証はありませんが、特定のフォームだけが失敗するのなら、新しい Access ファイルを用意して、問題となっているフォームやモジュールを一つずつ移植してみることで改善されるかもしれません。
あるいは可能性は低いですが、ファイル形式変換時の照合順序指定に問題が生じていたという可能性もあるかもしれません。たとえば長音記号「ー」が問題となることもあるため、念のため、SQL 文中のテーブル名やフィールド名を角括弧で囲ってみてください(たとえば " FROM 転室一時データ " を " FROM [転室一時データ] " のように)。とはいえ照合順序の問題だとしたら、コンパイルエラーではなく実行時エラーになるのが普通なので、今回のケースには当てはまらない可能性が高いのですが。
- 編集済み 魔界の仮面弁士MVP 2020年1月27日 5:45
- 回答としてマーク T.uchi 2020年1月27日 6:17
すべての返信
-
変数宣言が無いということは、「Option Explicit」宣言が無い状態でしょうか?
宣言があるのに変数が見つからない場合、その BBB はフォームやレポート上のコントロールやフィールドである可能性もあります(標準モジュール上に書かれているコードだとすると当てはまりませんが)。
コントロール等でも無い場合には、とりあえず一時的に As Variant な変数を用意して、ステップインできるかどうかを確認してみてください。それでも実行できそうにないでしょうか。
問題の原因として思いつくのは、Access を開く環境の差異によって、参照設定の不整合が生じている可能性です。このような場合、本来の障害箇所とは別の箇所でコンパイルエラーとなることがあります。参照設定を可能な限り外してからファイルを開きなおし、改めて、参照設定をやりなおしてみると回復するかもしれません。ActiveX コントロールや追加の参照設定が含まれている場合は、32bit/64bit の違いが無いかも確認しておきましょう。
それ以外では、Access ファイルの部分的な破損の可能性もありえます。この場合、完全に修復できる保証はありませんが、特定のフォームだけが失敗するのなら、新しい Access ファイルを用意して、問題となっているフォームやモジュールを一つずつ移植してみることで改善されるかもしれません。
あるいは可能性は低いですが、ファイル形式変換時の照合順序指定に問題が生じていたという可能性もあるかもしれません。たとえば長音記号「ー」が問題となることもあるため、念のため、SQL 文中のテーブル名やフィールド名を角括弧で囲ってみてください(たとえば " FROM 転室一時データ " を " FROM [転室一時データ] " のように)。とはいえ照合順序の問題だとしたら、コンパイルエラーではなく実行時エラーになるのが普通なので、今回のケースには当てはまらない可能性が高いのですが。
- 編集済み 魔界の仮面弁士MVP 2020年1月27日 5:45
- 回答としてマーク T.uchi 2020年1月27日 6:17