2017-05-18 115 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