Question

J'ai une méthode pour renommer le nom de la colonne de table.

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

Et j'appelle cette fonction dans une autre procédure

Public Sub querylistboxitems()
  Dim strTableName As String

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

mais il donne une erreur "Mismatch de type argument BYREF"

Était-ce utile?

La solution

Cela a échoué pour moi parce que vous n'avez pas défini "FLD".Ce qui suit est beaucoup plus directement que de boucler à travers toutes les tables / champs:

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

Autres conseils

Il existe d'autres situations difficiles dans lesquelles ce problème peut se produire.Par exemple, lors de la déclaration de deux (ou plus) variables sur une ligne:

Dim firstSubMenu, secondSubMenu As CommandBarPopup

Maintenant, FirstSubmenu est de type variante, tandis que SECONDUMENU est de type CommandBarPopup.Cela peut ne pas être ce que vous avez voulu et peut également être une cause à l'erreur mentionnée ci-dessus lors de leur transmission par référence à une fonction qui attend un paramètre de type CommandBarPopup. Dans ce cas, une solution consiste à les déclarer sur deux lignes:

Dim firstSubMenu As CommandBarPopup
Dim secondSubMenu As CommandBarPopup

ou, si vous voulez vraiment le serrer sur une ligne, cela peut être fait comme ceci:

Dim firstSubMenu As CommandBarPopup, secondSubMenu As CommandBarPopup

Notez que vous devrez répéter la déclaration de type «comme» pour chaque variable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top