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,谢谢。