Mancata corrispondenza del tipo di argomento Byref VBA quando si chiama la funzione
-
21-12-2019 - |
Domanda
Ho un metodo per rinominare il nome della colonna della tabella.
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
.
e sto chiamando questa funzione in un'altra procedura
Public Sub querylistboxitems()
Dim strTableName As String
strTableName = "Table1"
Call Rename_Column(strTableName, "old", "New")
End Sub
.
Ma sta dando un errore "Mismatch di tipo argomento byref"
Soluzione
ha fallito per me perché non hai definito "fld".Quanto segue è molto più diretto del looping attraverso tutte le tabelle / campi:
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
. Altri suggerimenti
Ci sono altre situazioni difficili in cui potrebbe verificarsi questo problema.Ad esempio, quando dichiarando due (o più) variabili su una riga:
Dim firstSubMenu, secondSubMenu As CommandBarPopup
.
Ora FirstSubmenu è di tipo Variante, mentre SOLSUBMENU è di tipo CommandBarpopup.Questo potrebbe non essere ciò che hai intenzione e può anche essere una causa per l'errore sopra menzionato quando li passano in riferimento a una funzione che si aspetta un parametro di commandbarpopup di tipo tipo. In questo caso una soluzione è di dichiararli su due linee:
Dim firstSubMenu As CommandBarPopup
Dim secondSubMenu As CommandBarPopup
.
O, se vuoi davvero spremere su una riga, può essere fatto come questo:
Dim firstSubMenu As CommandBarPopup, secondSubMenu As CommandBarPopup
.
Nota che dovrai ripetere la dichiarazione del tipo "AS" per ciascuna variabile.