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

vuy*_*182 2 vba 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 fld In tdf.Fields
        If fld.Name = oldcolumn Then
          fld.Name = newcolumn
        End If
      Next
    End If
  Next
  dbs.Close
End Function
Run Code Online (Sandbox Code Playgroud)

我在其他程序中调用此函数

Public Sub querylistboxitems()
  Dim strTableName As String

  strTableName = "Table1"
  Call Rename_Column(strTableName, "old", "New")
End Sub
Run Code Online (Sandbox Code Playgroud)

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

Cod*_*Kid 22

还有其他棘手的情况可能会发生此问题.例如,在一行上声明两个(或更多)变量时:

Dim firstSubMenu, secondSubMenu As CommandBarPopup
Run Code Online (Sandbox Code Playgroud)

现在firstSubMenu的类型为Variant,而secondSubMenu的类型为CommandBarPopup.这可能不是您的意图,也可能是上述错误的原因,通过引用它来引用一个需要CommandBarPopup类型的参数的函数.在这种情况下,解决方案是将它们声明为两行:

Dim firstSubMenu As CommandBarPopup
Dim secondSubMenu As CommandBarPopup
Run Code Online (Sandbox Code Playgroud)

或者,如果你真的想在一行上挤压它,可以这样做:

Dim firstSubMenu As CommandBarPopup, secondSubMenu As CommandBarPopup
Run Code Online (Sandbox Code Playgroud)

请注意,您必须为每个变量重复"As"类型声明.

  • 我已将"Dim string1,string2,string3 As String"的意外行为添加到我的"Excel VBA WTF"列表中.+1并谢谢. (4认同)