Access VBAのプログラム処理で「エラー番号13:型が一致しません」エラーが出てしまいます


下記のVBAの処理が行われている際に。
https://gist.github.com/AuroraNorthernQuarter/3cdcd07e620274c147facf3524568cbb
タイトルのエラーが出てしまいます。
型は一致していると思うのですが…。

何が間違っているのか、わからない状況です。
ご指摘いただけますと有り難いです。

よろしくお願い致します。

回答の条件
  • 1人20回まで
  • 登録:
  • 終了:2020/11/21 09:10:58
id:moon-fondu

Private function kansuSQL(ByVal p_no as integer,

ByVal plng_ks as long,

ByVal yz_long as long) as string

の箇所も怪しいような…。引数が3つ、integerとlongで数値型、でもkansuSQL関数はstringで文字列型…なんてあり得るのでしょうか。

ベストアンサー

id:ken3memo No.1

回答回数303ベストアンサー獲得回数107

ポイント2000pt

1.on error goto err_exitをやめて、確認してみる

デバッグが終了するまで、
15: on error goto err_exit
をコメントにして、どこでとまったか?

34: lng_y = (clng(int_y) * 100) + int_z  'ここが怪しいのでしょうか…integer型のint_zは、clng関数でlong型にされてないですし。


Private function kansuSQL(ByVal p_no as integer,
ByVal plng_ks as long,
ByVal yz_long as long) as string

の箇所も怪しいような…。引数が3つ、integerとlongで数値型、でもkansuSQL関数はstringで文字列型…なんてあり得るのでしょうか。


59: month_str = cstr(format(clng(month_g) -1,"00"))
・・・
'☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

'「month_str = cstr(format(clng(month_g) -1,"00"))」まで飛んだその次に、エラー処理のメッセージに飛ばされました。


など、予想をしないで、確実に止まった個所を見ることをお勧めします。


2.clngに""や"May"など、数値以外の文字列を渡すとエラーになるよ

59: month_str = cstr(format(clng(month_g) -1,"00"))


↑怪しいのが、clng(month_g)かなぁ。
month_gの中身を確認してみることを提案します。

58: MsgBox month_g 'やDebug.Printなどで、↓渡す前に引数の中身を確認する
59: month_str = cstr(format(clng(month_g) -1,"00"))


↑私が容疑者として疑っている
month_g ですが、

44: Public month_g as string

ソースの頭で定義はあるのですが、(値のセットをセットした場所が負えません)
突然出てきます。
※何か、隠された証拠やアリバイがあって、容疑者から外されるかもしれませんが


3.CLngのテストしてみました

Access VBAのプログラム処理で「エラー番号13:型が一致しません」エラーが出てしまいます

f:id:ken3memo:20201117204315j:image

58: MsgBox month_g 'やDebug.Printなどで、↓渡す前に引数の中身を確認する
59: month_str = cstr(format(clng(month_g) -1,"00"))


Option Explicit

Public month_g As String

Public Sub test_ng()

    Dim month_str As String
    
    month_g = "" '""で初期化してみる←エラーのテスト

    'たぶんmonth_g As Stringの"5"をFormat関数で"05"にしたいんだと思うけど
    month_str = CStr(Format(CLng(month_g) - 1, "00"))

    MsgBox month_str

End Sub

Public Sub test_ng2()

    Dim month_str As String
    
    month_g = "May" 'わざと数値以外の変な文字列にしてみる

    'たぶんmonth_g As Stringの"5"をFormat関数で"05"
    '05じゃなかった、-1で04にしたいの?前月?1月の時、大丈夫?
    month_str = CStr(Format(CLng(month_g) - 1, "00"))

    MsgBox month_str

End Sub

Public Sub test_OK()

    Dim month_str As String
    
    month_g = "5" '文字の5だったとき

    'たぶんmonth_g As Stringの"5"をFormat関数で"05"
    '05じゃなかった、-1で04にしたいの?前月?1月の時、大丈夫?
    month_str = CStr(Format(CLng(month_g) - 1, "00"))

    MsgBox month_str

End Sub


以上、
思い込みの激しい、冤罪連発のおじさん捜査官の中身の薄い長い推理でした
1.on error goto err_exitをやめて現場確認
2.変数(登場人物)の中身・セットされている場所、あしどりを追う

原因・犯人捜しの参考となれば・・・・

id:moon-fondu

ありがとうございます、ken3memoさんの推理通りでした。

month_gをLong型にすると動いてくれました!

2020/11/21 09:10:09

その他の回答0件)

id:ken3memo No.1

回答回数303ベストアンサー獲得回数107ここでベストアンサー

ポイント2000pt

1.on error goto err_exitをやめて、確認してみる

デバッグが終了するまで、
15: on error goto err_exit
をコメントにして、どこでとまったか?

34: lng_y = (clng(int_y) * 100) + int_z  'ここが怪しいのでしょうか…integer型のint_zは、clng関数でlong型にされてないですし。


Private function kansuSQL(ByVal p_no as integer,
ByVal plng_ks as long,
ByVal yz_long as long) as string

の箇所も怪しいような…。引数が3つ、integerとlongで数値型、でもkansuSQL関数はstringで文字列型…なんてあり得るのでしょうか。


59: month_str = cstr(format(clng(month_g) -1,"00"))
・・・
'☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

'「month_str = cstr(format(clng(month_g) -1,"00"))」まで飛んだその次に、エラー処理のメッセージに飛ばされました。


など、予想をしないで、確実に止まった個所を見ることをお勧めします。


2.clngに""や"May"など、数値以外の文字列を渡すとエラーになるよ

59: month_str = cstr(format(clng(month_g) -1,"00"))


↑怪しいのが、clng(month_g)かなぁ。
month_gの中身を確認してみることを提案します。

58: MsgBox month_g 'やDebug.Printなどで、↓渡す前に引数の中身を確認する
59: month_str = cstr(format(clng(month_g) -1,"00"))


↑私が容疑者として疑っている
month_g ですが、

44: Public month_g as string

ソースの頭で定義はあるのですが、(値のセットをセットした場所が負えません)
突然出てきます。
※何か、隠された証拠やアリバイがあって、容疑者から外されるかもしれませんが


3.CLngのテストしてみました

Access VBAのプログラム処理で「エラー番号13:型が一致しません」エラーが出てしまいます

f:id:ken3memo:20201117204315j:image

58: MsgBox month_g 'やDebug.Printなどで、↓渡す前に引数の中身を確認する
59: month_str = cstr(format(clng(month_g) -1,"00"))


Option Explicit

Public month_g As String

Public Sub test_ng()

    Dim month_str As String
    
    month_g = "" '""で初期化してみる←エラーのテスト

    'たぶんmonth_g As Stringの"5"をFormat関数で"05"にしたいんだと思うけど
    month_str = CStr(Format(CLng(month_g) - 1, "00"))

    MsgBox month_str

End Sub

Public Sub test_ng2()

    Dim month_str As String
    
    month_g = "May" 'わざと数値以外の変な文字列にしてみる

    'たぶんmonth_g As Stringの"5"をFormat関数で"05"
    '05じゃなかった、-1で04にしたいの?前月?1月の時、大丈夫?
    month_str = CStr(Format(CLng(month_g) - 1, "00"))

    MsgBox month_str

End Sub

Public Sub test_OK()

    Dim month_str As String
    
    month_g = "5" '文字の5だったとき

    'たぶんmonth_g As Stringの"5"をFormat関数で"05"
    '05じゃなかった、-1で04にしたいの?前月?1月の時、大丈夫?
    month_str = CStr(Format(CLng(month_g) - 1, "00"))

    MsgBox month_str

End Sub


以上、
思い込みの激しい、冤罪連発のおじさん捜査官の中身の薄い長い推理でした
1.on error goto err_exitをやめて現場確認
2.変数(登場人物)の中身・セットされている場所、あしどりを追う

原因・犯人捜しの参考となれば・・・・

id:moon-fondu

ありがとうございます、ken3memoさんの推理通りでした。

month_gをLong型にすると動いてくれました!

2020/11/21 09:10:09
  • id:kaitesukkiri
    「エラー番号13:型が一致しません」エラーが出てしまいます
    「month_str = cstr(format(clng(month_g) -1,"00"))」まで飛んだその次に、エラー処理のメッセージに飛ばされました。


    だったら、その行で型キャストエラーが起きたんでしょう、普通に考えて。
    その行で型キャストが起きるのはclng(month_g)だけ。
    FormatはStringを返すからCStrで型変換エラーにはなりえないし、そもそもStringをCStrする意味がない。
    clng(month_g)でエラーになる理由はmonth_gの中身がLongっぽい内容じゃないからでしょう。
    実際にmonth_gに何が入っているかはDebug.PrintなりMsgboxなりで確認すればいいことかと。


    こんな単純明快な内容で「何が間違っているのか、わからない状況です」って、プログラム開発者としたらそうとうなことよ。

    なぜmonth_gにLongっぽい値が入っていないかは、また別の問題だけど、提示されたコードの範囲じゃなんとも言えない。
  • id:moon-fondu
    ごろえもんさん、ken3memoさんの仰る通りでした。
    Debug.Print、Msgboxで確認はしたことないですね。ありがとうございます、試してみます。VBAの本に書いていた記憶がうっすらありますが…いつもイミディエイトウインドウで変数の値を確認して終わりという感じでしたので。

    確かに相当ヤバいです…そんな人間でもITの現場に潜り込んでいるというのも、雇う方は面接だけだと気付かないのかもしれませんね…「VBAばりばり書けます」といった嘘をついた覚えはないですが…今はテストと改修・保守が中心ですが。開発は程遠いレベルだという自覚はあります。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません