Ms access 调用函数时vba Byref参数类型不匹配

Ms access 调用函数时vba Byref参数类型不匹配,ms-access,vba,Ms Access,Vba,我有一个重命名表列名的方法 Public Function Rename_Column(tablename As String, oldcolumn As String, newcolumn As String) Dim dbs As Database, tdf As TableDef Set dbs = CurrentDb For Each tdf In dbs.TableDefs If tdf.Name = tablename Then For Each f

我有一个重命名表列名的方法

Public Function Rename_Column(tablename As String, oldcolumn As String, newcolumn As String)
  Dim dbs As Database, tdf As TableDef
  Set dbs = CurrentDb

  For Each tdf In dbs.TableDefs
    If tdf.Name = tablename Then
      For Each fld In tdf.Fields
        If fld.Name = oldcolumn Then
          fld.Name = newcolumn
        End If
      Next
    End If
  Next
  dbs.Close
End Function
我在另一个过程中调用这个函数

Public Sub querylistboxitems()
  Dim strTableName As String

  strTableName = "Table1"
  Call Rename_Column(strTableName, "old", "New")
End Sub

但是它给出了一个错误“Byref参数类型不匹配”

我失败了,因为您没有定义“fld”。以下内容比在所有表/字段中循环更直接:

Public Function Rename_Column(tablename As String, oldcolumn As String, newcolumn As String)
    Dim dbs As Database
    Dim tdf As TableDef
    Dim fld As Field

    Set dbs = CurrentDb
    Set tdf = dbs.TableDefs(tablename)
    Set fld = tdf.Fields(oldcolumn)
    Set fld = Nothing
    Set tdf = Nothing
    dbs.Close
    Set dbs = Nothing
End Function

在其他一些棘手的情况下,可能会出现此问题。例如,在一行上声明两个(或多个)变量时:

Dim firstSubMenu, secondSubMenu As CommandBarPopup
现在,第一个子菜单的类型为Variant,而第二个子菜单的类型为CommandBarPopup。这可能不是您想要的,也可能是在通过引用将它们传递给需要CommandBarPopup类型参数的函数时出现上述错误的原因。 在这种情况下,解决方案是在两行上声明它们:

Dim firstSubMenu As CommandBarPopup
Dim secondSubMenu As CommandBarPopup
或者,如果你真的想把它挤在一条线上,可以这样做:

Dim firstSubMenu As CommandBarPopup, secondSubMenu As CommandBarPopup

请注意,您必须为每个变量重复“As”类型声明。

在哪一行?VBE应点亮不匹配的线路。。。对我来说,这个电话似乎设置得很好。你有3个字符串,所以你应该可以…它是在querylistboxitems过程中高亮显示strTableName,在你的函数中的变量声明前面抛出ByVal,在测试你的代码之前,我已经完成了这项工作,它对我来说很好。还有一些其他问题,例如,strTableName是在别处定义的。尝试编译并确保使用OptionExplicit。只需很少的工作,您就可以更快地完成此任务。@swa1234始终使用option explicit。我看不出会发生错误的原因。您确定您的代码中的所有内容都是您在上面键入的吗?另外,如果不返回值,您可能只想使用另一个子函数,而不是Rename_Column函数。是否有人找到其他方法来解决此错误?如果有许多不同的变量要传递到函数中,这可能会很烦人。我已将
Dim string1、string2、string3的意外行为添加到我的“Excel VBA WTF”列表中,+1,谢谢。