2017-05-18 35 views
1

「コンパイルエラー、ByRef引数の型が一致しません」というエラーがあります。誰でも私にこのエラーが発生する理由、またはこれを修正する方法を教えてもらえますか?エラー:コンパイルエラー、ByRef引数のタイプの不一致

+1

が、私は強く[ 'オプションExplicit'](https://msdn.microsoft.com/en-us/を置くことを提案しますライブラリ/ bw9t3484%28v = vs.84%29.aspx)。 コンパイル時に、宣言されていない変数または定数のスペルミスを報告します。 これを新しいモジュールに自動的に追加するには、VBAエディタで[変数宣言が必要](http://www.fmsinc.com/microsoftaccess/modules/options/index.html)オプションを設定します。 – Andre

+0

今、行 "argcount = 0"を指すことによって "変数が定義されていません"と表示されます – Beginner

+1

はい、その点です。これらの問題を防ぐために、すべての変数を明確な変数型で宣言します。*実行時エラーではなくコンパイル時エラーを生成できることは、より良いコードを書くための基本的な部分です。* – Andre

答えて

1

あなたのサブの宣言は次のとおりです。

Private Sub AddtoWhere(FieldValue As Variant, FieldName As String, mycriteria As String, argcount As Integer) 

あなたは(例えば)として、それを呼び出している:あなただけ(StringとしてSearch)他のすべてを一つの変数を宣言しているので

AddtoWhere cboProduct1, "Product", mycriteria, argcount 

変数はデフォルトでVariantと宣言されています。

これはあなたが合格しようとしている意味:

FieldValueVariant)へ
  • cboProduct1Variant) - VariantVariant/Objectことができるので、(cboProduct1は、いくつかの並べ替えの対象となることがありますコンボボックス?)、これは正しく
  • "Product"StringFieldNameに処理されます(String
  • mycriteriamyCriteriaargCountに渡された変数が同じデータ型を持っていないので(VariantmycriteriaString
  • argcountVariant)へargcountInteger

に、あなたが得ますエラー。

問題を回避する最も良い方法は、問題がなければ実行するのが最善の方法です。すべての変数を宣言することです。

だからあなたcmdsearch1_Clickサブルーチンに次の文を(少なくとも)を追加:

Dim mycriteria As String 
Dim argcount As Integer 
+0

私はcmdsearch1で宣言しましたが、今はsql statmentで定義されていないエラー変数を与えています。説明:cboProductは数を持つProductコンボボックスです。 – Beginner

+0

@ABC私は 'Me!sfrmtblCapCrstab.Form.RecordSource = mysource'という行がエラーを出していると仮定します。そうですか? (私たちに推測させるのではなく、そのようなことを教えておけば助けになります)もしそうなら、 'mySource'の値は何ですか?それは有効なSQL文ではないようです。 – YowE3K

+0

@ABCまた、SQL文で使用するすべてのフィールド名は、 '[tblCapCrstab]'テーブルに存在するフィールドの名前ですか? ( '' Source''は予約語ですか?[私はAccessやSQLを使いこなすのに十分ではありません]そうであれば、フィールド名を括弧で囲んでください。つまり、フィールド名として '[Source]'を使用してくださいとにかくそれを行うのは普通は良い考えです。) – YowE3K

1

あなたはそれはあなたが機能を渡すか、あなたは以前に持って同じ値をサブしている意味参照によって引数を渡します。 は同じを受け取ると予想しています。あなたの問題を迅速に解決するには、関数/サブ定義を変種が期待されるように変更するか、正しいタイプを渡しているかどうかを確認することができます。

これは役に立ちました。次回はいくつかのコードを残しておきます。

+0

アタッチメントはコードです、申し訳ありませんが、あなたが言ったことを理解できませんでした。もう少し説明できますか? – Beginner

関連する問題