我有一個錯誤,指出「編譯錯誤,ByRef參數類型不匹配」。任何人都可以讓我知道爲什麼會發生此錯誤或如何解決此問題?錯誤:編譯錯誤,ByRef參數類型不匹配
回答
你子的聲明是:
Private Sub AddtoWhere(FieldValue As Variant, FieldName As String, mycriteria As String, argcount As Integer)
要調用它(舉例來說):
AddtoWhere cboProduct1, "Product", mycriteria, argcount
因爲你只有聲明一個變量(Search
爲String
)所有其他變量默認聲明爲Variant
。
這意味着你試圖傳遞:
cboProduct1
(一Variant
)到FieldValue
(一Variant
) - 因爲Variant
可以爲Variant/Object
,有可能cboProduct1
是某種類型的對象(組合框?),這將被正確處理"Product"
(一String
)到FieldName
(一String
)mycriteria
(一Variant
)到mycriteria
(一String
)argcount
(一Variant
)至argcount
(一Integer
)
因爲被傳遞到myCriteria
和argCount
變數不會有相同的數據類型,你會得到一個錯誤。
解決問題的最佳方法(即使沒有問題也是最好的方法)是聲明所有變量。
所以下面的語句(至少)添加到您的cmdsearch1_Click
子程序:
Dim mycriteria As String
Dim argcount As Integer
我在cmdsearch1中聲明,現在它給出的錯誤變量沒有在sql語句中定義。解釋:cboProduct是包含數字的產品組合框。 – Beginner
@ABC我假設它是'Me!sfrmtblCapCrstab.Form.RecordSource = mysource'這行給出錯誤 - 是這樣嗎? (如果你告訴我們這種事情,而不是讓我們猜測,它可以幫助我們幫助你。)如果是這樣,mySource的價值是什麼 - 聽起來它不是一個有效的SQL語句。 – YowE3K
@ABC此外,您在SQL語句中使用的所有字段名稱是否存在於您的'[tblCapCrstab]'表格中的字段名稱? (並且'Source'是一個保留字嗎?[我沒有足夠的Access和/或SQL知道]如果是,請確保將字段名稱用括號括起來,即使用'[Source]'作爲字段名稱。無論如何,這通常是一個好主意。) – YowE3K
當你經過參考參數它意味着你傳遞函數或子你有先前的相同的值。它預計收到相同的。快速解決您的問題可能是更改函數/子定義以期望變體或確保傳遞正確類型。
希望這會有幫助,下次留下一些代碼,以便我們可以提供更多幫助。
附上是代碼,對不起,我不明白你說的,你能解釋一下更多。 – Beginner
- 1. 編譯錯誤:ByRef參數類型不匹配創建新圖紙
- 2. Join()上的ByRef參數類型不匹配錯誤
- 3. VB6:編譯錯誤類型不匹配
- 4. Excel VBA ByRef參數類型不匹配
- 5. Excel宏:ByRef參數類型不匹配
- 6. VBA ByRef參數類型不匹配
- 7. 類型不匹配錯誤
- 8. 類型不匹配錯誤
- 9. 類型不匹配錯誤
- 10. 錯誤類型不匹配
- 11. Java:通配符類型不匹配導致編譯錯誤
- 12. 編譯錯誤匹配器
- 13. 如何解決VB6中的「編譯錯誤:類型不匹配」錯誤?
- 14. Apache-poi「編譯錯誤:類型不匹配」
- 15. 類型不匹配錯誤編譯復古F77代碼
- 16. 斯卡拉:強制編譯錯誤類型別名不匹配
- 17. Typescript 1.4聯盟類型,錯誤類型錯誤匹配錯誤
- 18. 數類型不匹配錯誤
- 19. 數據類型不匹配錯誤
- 20. 'operator =='不匹配C++編譯錯誤
- 21. Java泛型 - 類型不匹配錯誤
- 22. VBS類型不匹配錯誤800a000d類型不匹配:ReadFile的
- 23. 類裝飾類型不匹配錯誤
- 24. SQLite錯誤:錯誤#3132:數據類型不匹配。在Adobe AIR
- 25. 類型的錯誤編譯
- 26. Fsharp - 類型編譯錯誤
- 27. QTP VBScript類型不匹配錯誤函數沒有參數
- 28. 編譯器錯誤:類型不匹配時,分配的接口變量類
- 29. JSF convertNumber拋出java.lang.IllegalArgumentException:參數類型不匹配錯誤
- 30. Excel VBA - 使用參數的類型不匹配錯誤
我強烈建議把['選項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
現在它通過指向「argcount = 0」行表示「變量未定義」 – Beginner
是的,就是這一點。聲明具有良好定義的變量類型的所有變量以防止這些問題。*能夠生成編譯時錯誤而不是運行時錯誤是編寫更好代碼的基本部分。* – Andre