• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA 「実行エラー”13” 型が一致しません。」の対処方法を教えてください。)

VBA実行エラー”13”型が一致しません。の対処方法とは?

このQ&Aのポイント
  • はじめての質問。66歳でVBAに挑戦中。エラー対処に苦労中。Excel2003使用。
  • エラーが出るコードの一部を示したが、実行時エラー13が発生。
  • 収入データの取得と表示に関する訂正ルーチンがエラー。具体的な指導を求める。

質問者が選んだベストアンサー

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.5

ANo.5です。 >uf出納簿訂正.cb月.Value = my月  ← ここでエラー cd月ってどのコントロールなのでしょう。 TextBox?Label? Label1.Caption = my月 TextBox1.Value = my月 TextBoxなら問題なさそうですが、LabelならValueではダメですし。 ようはプロパティでValueが使えないコントロールなのでしょう。

yamato3zan
質問者

お礼

n-junさん cb月は、uf出納簿訂正(ユーザフォーム)上にコンボボックスで定義しています。そして、Stylプロパティで「fmStyleDownList(値=2)を設定していました。これを、「fmStyleDownCombo(値=0)に変更すると、バグ吸収しました。 他の更新ルーチンでは、うまく動作していたので、テキストボックに設定するmy内容、My備考の設定をmy月、my日の前に移すと正常に動作したため、ユーザフォームの作り方ではなく、コントロールの違いの問題と判断して、個々のコントロールの設定内容を確認した所、バグ原因にたどり着きました。 今回、n-junさんには、Withステートメントの使い方、Debugオブジェクトの使用方法など、非常に参考となるご指示を頂き、ありがとうございました。 Withステートメントについては、一部使用していたのですが、コマンドと組み合わせた使い方を教えていただき、プログラムに見直し時に訂正をかけて、見やすいプログラムにしたいと思います。 また、Debugオブジェクトについても、その使い方について参考書を、今一度、見直しを行い、今後使用していきたいと思います。 VBAでのプログラム作成は、適当に部品(サブルーチン)を組み合わせれば、簡単に作成できるものと考えてプログラム作成に挑戦しました。が、40数年前にアッセンブラでプログラムを組んで以来の作業であり、ロジックは組めても、なかなかコーディングができません。参考書を読んでいる時は、このルーチンが使えると思っていても、いざコーディングになると、再び参考書をひっくり返すことになり、なかなか新しいルーチンのコーディングには時間がかかります。でも、40数年前のプログラム開発を考えると非常に楽ですね。40数年前は、コーディングの後の紙カードのパンチ作業が大変でしたが、VBAは、参考情報まで見せてくれますから、非常に楽ですね。 この後、出納簿などの月計、決算報告資料の作成に取り掛かりますが、また、今回の様な事態になった時には、よろしくお願いします。 ありがとうございました。

その他の回答 (4)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

ANo.3です。 直接の回答ではないですが。 Cells(my訂正行, 1).Activate ~ my支出 = ActiveCell.Value までは、 With Cells(my訂正行, 1) 'my訂正行は、引継情報      my年月日 = .Value      my月 = Month(my年月日)      my日 = Day(my年月日)      my科目 = .Offset(0, 1).Value      my細科目 = .Offset(0, 2).Value      my領収書 = .Offset(0, 3).Value      my内容 = .Offset(0, 4).Value      my備考 = .Offset(0, 5).Value      my収入 = .Offset(0, 6).Value      my支出 = .Offset(0, 7).Value End With こんな感じでもいいのでは。

yamato3zan
質問者

お礼

n-junさん & bin-chanさん。 お二人のご協力いただき、先週の木曜日から頭を抱えていた問題が解決しました。インターネットで色々調べて、バグ対応でユーザフォームをいじっている時、よく「パスが違う」のようなエラーメッセージが出るため、ユーザフォームの作成の問題があると思い、何度も同じことを行っていました。手に負えなくなり、はじめてOWWebで質問をさせていただきました。(OKWebの仕組みが分からず、同じ質問を2度送信するなと、ご迷惑をかけることが多くありましたが、おゆるしください。) 結果的に今回のバグ原因は、コンボボックス(スタイル)の使用方法の問題でした。データベースのキーとなる項目については、「リストからの選択のみ可能」に設定していたためで、Styleプロパティの値を「2」から「0」に変更するとバグの箇所を抜けました。 訂正項目の表示と訂正操作時の使用方法について、今一度、仕様を見直したいと思います。 これから先、月計、年度末資料の作成、印刷と、参考書とインターネットで学びつつ作成しようと思っています。完成までには、今回のように息詰まることが多々あると思いますが、その節は、ご指導よろしくお願いします。ありがとうございました。

yamato3zan
質問者

補足

n-junさん & bin-chanさん。 お二人のご指導により、次のとおり修正しました。また、ユーザフォームに問題があるのではないかと考え、再作成して組み込みました。ユーザフォーム名は、「uf出納簿訂正」に変更しました。 イミティエイトウィンドウには、日付とTrueが表示されましたが、やはりエラーとなりました。 エラーコードは、「実行時エラー”380” Valueプロパティを設定できません。プロパティの値が無効です。」に変わりました。ご指導よろしくお願いします。 Sub sub出納簿訂正データ編集() Dim my年 As Integer Dim my月 As Integer Dim my日 As Integer Dim my年月日 As Date Dim my科目 As String Dim my細科目 As String Dim my領収書 As String Dim my内容 As String Dim my備考 As String Dim my収入 As Long Dim my支出 As Long Dim my金額 As Long With Cells(my訂正行, 1) 'my訂正行は、引継情報 my年月日 = .Value: Debug.Print my年月日, IsDate(my年月日) my月 = Month(my年月日) my日 = Day(my年月日) my科目 = .Offset(0, 1).Value my細科目 = .Offset(0, 2).Value my領収書 = .Offset(0, 3).Value my内容 = .Offset(0, 4).Value my備考 = .Offset(0, 5).Value my収入 = .Offset(0, 6).Value my支出 = .Offset(0, 7).Value End With uf出納簿訂正.cb月.Value = my月  ← ここでエラー uf出納簿訂正.cb日.Value = my日 uf出納簿訂正.cb科目.Value = my科目 uf出納簿訂正.cb細科目.Value = my細科目 If my領収書 = "有" Then uf出納簿訂正.cb領収書有.Value = True End If uf出納簿訂正.cb内容.Value = my内容 uf出納簿訂正.cb備考.Value = my備考 If my科目 = "収入" Then uf出納簿訂正.cb金額.Value = my収入 Else uf出納簿訂正.cb金額.Value = my支出 End If End Sub

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

#1です。 > Dim my収入 As Integer > Dim my支出 As Integer > Dim my金額 As Integer 32767を越えるとエラーになっている、なんでしょうね。 IntegerをLongに変更してください。2億円くらいまで大丈夫です。

yamato3zan
質問者

補足

bin-chanさん、そして、n-junさん ご指導ありがとうございます。 どうも、出納簿、台帳、名簿に対して同じルーチンを組んでおり、コーディングの際に、コピー操作を行っているために、若干、混乱しています。 今から、お二人のご指示を受けて、今一度、全体的に見直しをしてみたいと思います。閣下については、ANo5でご報告させていただきます。その節はよろしくお願いします。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

my年月日 = ActiveCell.Value: Debug.Print my年月日, IsDate(my年月日) としてみて、イミディエイトウィンドウに何が表示されるのか? アクティブセルが”日付”と認識できる物であれば、 セルの日付と"TRUE"と表示されるはずです。 そうでない場合アクティブセルが意図しない位置にあるのでしょう。 イミディエイトウィンドウはVBE画面のツールバーで 表示>イミディエイトウィンドウです。

yamato3zan
質問者

補足

n-junさん 早速、回答を頂きありがとうございます。 イミディエイトウィンドウは使用したことがないので、ご指導に従って今夜取り組んでみたいと思います。 私は、ディバッグにMsgbonを使用しており、my年月日、my月、などの項目についてしています。その都度、予想通りの値を得ており、正しいものと思っていますが、今一度、ご指示に従って確認したいと思います。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> my収入 = ActiveCell.Value ⇒ データベースから値を取得 > fom出納簿訂正.cb金額.Value = my収入 my収入はどのような型宣言をなさってますか? 「データベースから値を取得」とありますが、データベースの値とはどのような型宣言をなさってますか?

yamato3zan
質問者

お礼

bin-chanさん データベース側の説明が漏れていました。 各シートの列ごとのセルの書式で、年月日は日付データ、収入、支出、合計は数値データ、その他の項目は標準データとしています。 (追記コメントをどのようにすればよいかが分からず、本コーナーを使用させていただきました。)

yamato3zan
質問者

補足

bin-chanさん 早速、回答を頂きありがとうございます。 また、QKWebの操作誤り、同じ質問を2度送ってしまいました。 気がついて質問を削除しようとしましたが、投降後24時間以内は、削除できないとのことで、明日にも訂正を行いたいと思います。 第1の質問については、先ほど、n-junさんから回答を頂き、解決しました。 追加の質問に回答を頂きありがとうございます。 関連のコーディングは、次のとおりです。このサブルーティンでデータベースの各内容を、UserFormsのプロパティにセットしています。なお、データベースでは日付を年月日で持っており、UserFormsでは、入力画面に合わせて、月と日を表示しています。 Sub sub出納簿訂正データ編集() Dim my年 As Integer Dim my月 As Integer Dim my日 As Integer Dim my年月日 As Date Dim my科目 As String Dim my細科目 As String Dim my領収書 As String Dim my内容 As String Dim my備考 As String Dim my収入 As Integer Dim my支出 As Integer Dim my金額 As Integer Cells(my訂正行, 1).Activate 'my訂正行は、引継情報 my年月日 = ActiveCell.Value my月 = Month(my年月日) my日 = Day(my年月日) ActiveCell.Offset(0, 1).Activate my科目 = ActiveCell.Value ActiveCell.Offset(0, 1).Activate my細科目 = ActiveCell.Value ActiveCell.Offset(0, 1).Activate my領収書 = ActiveCell.Value ActiveCell.Offset(0, 1).Activate my内容 = ActiveCell.Value ActiveCell.Offset(0, 1).Activate my備考 = ActiveCell.Value ActiveCell.Offset(0, 1).Activate my収入 = ActiveCell.Value ActiveCell.Offset(0, 1).Activate my支出 = ActiveCell.Value fom出納簿訂正.cb月.Value = my月  ← ここでエラー fom出納簿訂正.cb日.Value = my日 fom出納簿訂正.cb科目.Value = my科目 fom出納簿訂正.cb細科目.Value = my細科目 If my領収書 = "有" Then fom出納簿訂正.cb領収書有.Value = True End If fom出納簿訂正.cb内容.Value = my内容    fom出納簿訂正.cb備考.Value = my備考 If my科目 = "収入" Then fom出納簿訂正.cb金額.Value = my収入 Else fom出納簿訂正.cb金額.Value = my支出 End If End Sub

関連するQ&A