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

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
.

现在Firstsubmenu是类型变体,而stinkubmenu是commandbarpopup。这可能不是您所想要的,并且在通过引用函数的函数通过Type CommandBarpopup的参数时,也可以是上述错误的原因。 在这种情况下,解决方案是在两行中声明它们:

Dim firstSubMenu As CommandBarPopup
Dim secondSubMenu As CommandBarPopup
.

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

Dim firstSubMenu As CommandBarPopup, secondSubMenu As CommandBarPopup
.

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top