VBA BYREF Type d'argument MisMatch lors de l'appel de la fonction
-
21-12-2019 - |
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"
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.