none
アクセス2019で、型が一致しませんとエラー表示され、動かなくなったVBA RRS feed

  • 質問

  • 下記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

                                                                                        
    2020年1月27日 2:02

回答

  • 変数宣言が無いということは、「Option Explicit」宣言が無い状態でしょうか?

    宣言があるのに変数が見つからない場合、その BBB はフォームやレポート上のコントロールやフィールドである可能性もあります(標準モジュール上に書かれているコードだとすると当てはまりませんが)。

    コントロール等でも無い場合には、とりあえず一時的に As Variant な変数を用意して、ステップインできるかどうかを確認してみてください。それでも実行できそうにないでしょうか。

    問題の原因として思いつくのは、Access を開く環境の差異によって、参照設定の不整合が生じている可能性です。このような場合、本来の障害箇所とは別の箇所でコンパイルエラーとなることがあります。参照設定を可能な限り外してからファイルを開きなおし、改めて、参照設定をやりなおしてみると回復するかもしれません。ActiveX コントロールや追加の参照設定が含まれている場合は、32bit/64bit の違いが無いかも確認しておきましょう。

    それ以外では、Access ファイルの部分的な破損の可能性もありえます。この場合、完全に修復できる保証はありませんが、特定のフォームだけが失敗するのなら、新しい Access ファイルを用意して、問題となっているフォームやモジュールを一つずつ移植してみることで改善されるかもしれません。

    あるいは可能性は低いですが、ファイル形式変換時の照合順序指定に問題が生じていたという可能性もあるかもしれません。たとえば長音記号「ー」が問題となることもあるため、念のため、SQL 文中のテーブル名やフィールド名を角括弧で囲ってみてください(たとえば " FROM 転室一時データ " を " FROM [転室一時データ] " のように)。とはいえ照合順序の問題だとしたら、コンパイルエラーではなく実行時エラーになるのが普通なので、今回のケースには当てはまらない可能性が高いのですが。

    2020年1月27日 5:30

すべての返信

    1. Debug.Print TypeName(rs1.RecordCount) を実行した場合、イミディエイトには何と表示されますか?
    2. 変数 BBB のデータ型は何ですか? Variant、Long、Integer、LongLong、Currency、それとも…?
    2020年1月27日 2:20
  • 早速のご返答ありがとうございます。

    ステップインもできないためDebug.Print TypeName(rs1.RecordCount)の結果も得られません。

    変数BBBのデータ型なのですがどうやら定義していないようです。

    変数BBBの定義がなされていないのが問題なのでしょうか、このVBAを記述した前任者が退職してしまっているのでなぜ定義していないのかは不明なのですが。

    2020年1月27日 4:56
  • 変数宣言が無いということは、「Option Explicit」宣言が無い状態でしょうか?

    宣言があるのに変数が見つからない場合、その BBB はフォームやレポート上のコントロールやフィールドである可能性もあります(標準モジュール上に書かれているコードだとすると当てはまりませんが)。

    コントロール等でも無い場合には、とりあえず一時的に As Variant な変数を用意して、ステップインできるかどうかを確認してみてください。それでも実行できそうにないでしょうか。

    問題の原因として思いつくのは、Access を開く環境の差異によって、参照設定の不整合が生じている可能性です。このような場合、本来の障害箇所とは別の箇所でコンパイルエラーとなることがあります。参照設定を可能な限り外してからファイルを開きなおし、改めて、参照設定をやりなおしてみると回復するかもしれません。ActiveX コントロールや追加の参照設定が含まれている場合は、32bit/64bit の違いが無いかも確認しておきましょう。

    それ以外では、Access ファイルの部分的な破損の可能性もありえます。この場合、完全に修復できる保証はありませんが、特定のフォームだけが失敗するのなら、新しい Access ファイルを用意して、問題となっているフォームやモジュールを一つずつ移植してみることで改善されるかもしれません。

    あるいは可能性は低いですが、ファイル形式変換時の照合順序指定に問題が生じていたという可能性もあるかもしれません。たとえば長音記号「ー」が問題となることもあるため、念のため、SQL 文中のテーブル名やフィールド名を角括弧で囲ってみてください(たとえば " FROM 転室一時データ " を " FROM [転室一時データ] " のように)。とはいえ照合順序の問題だとしたら、コンパイルエラーではなく実行時エラーになるのが普通なので、今回のケースには当てはまらない可能性が高いのですが。

    2020年1月27日 5:30
  • 「Option Explicit」宣言はありません。

    おっしゃる通りフォーム上の記述です。

    参照設定を可能な限り取り外してみたところ3つだけ残りました、この状態でVBAを走らせてみたところ正常に動作しました。

    無事解決に至りました有難うございました。

    2020年1月27日 6:16