Mancata corrispondenza del tipo di argomento Byref VBA quando si chiama la funzione

StackOverflow https://stackoverflow.com//questions/22023034

  •  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"

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top