我有一个错误,指出“编译错误,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