2017-05-18 121 views
1

我有一個錯誤,指出「編譯錯誤,ByRef參數類型不匹配」。任何人都可以讓我知道爲什麼會發生此錯誤或如何解決此問題?錯誤:編譯錯誤,ByRef參數類型不匹配

+1

我強烈建議把['選項Explicit'(https://msdn.microsoft.com/en-us/ library/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) 

要調用它(舉例來說):

AddtoWhere cboProduct1, "Product", mycriteria, argcount 

因爲你只有聲明一個變量(SearchString)所有其他變量默認聲明爲Variant

這意味着你試圖傳遞:

  • cboProduct1(一Variant)到FieldValue(一Variant) - 因爲Variant可以爲Variant/Object,有可能cboProduct1是某種類型的對象(組合框?),這將被正確處理
  • "Product"(一String)到FieldName(一String
  • mycriteria(一Variant)到mycriteria(一String
  • argcount(一Variant)至argcount(一Integer

因爲被傳遞到myCriteriaargCount變數不會有相同的數據類型,你會得到一個錯誤。

解決問題的最佳方法(即使沒有問題也是最好的方法)是聲明所有變量。

所以下面的語句(至少)添加到您的cmdsearch1_Click子程序:

Dim mycriteria As String 
Dim argcount As Integer 
+0

我在cmdsearch1中聲明,現在它給出的錯誤變量沒有在sql語句中定義。解釋:cboProduct是包含數字的產品組合框。 – Beginner

+0

@ABC我假設它是'Me!sfrmtblCapCrstab.Form.RecordSource = mysource'這行給出錯誤 - 是這樣嗎? (如果你告訴我們這種事情,而不是讓我們猜測,它可以幫助我們幫助你。)如果是這樣,mySource的價值是什麼 - 聽起來它不是一個有效的SQL語句。 – YowE3K

+0

@ABC此外,您在SQL語句中使用的所有字段名稱是否存在於您的'[tblCapCrstab]'表格中的字段名稱? (並且'Source'是一個保留字嗎?[我沒有足夠的Access和/或SQL知道]如果是,請確保將字段名稱用括號括起來,即使用'[Source]'作爲字段名稱。無論如何,這通常是一個好主意。) – YowE3K

1

當你經過參考參數它意味着你傳遞函數或子你有先前的相同的值。它預計收到相同的。快速解決您的問題可能是更改函數/子定義以期望變體或確保傳遞正確類型。

希望這會有幫助,下次留下一些代碼,以便我們可以提供更多幫助。

+0

附上是代碼,對不起,我不明白你說的,你能解釋一下更多。 – Beginner