Pregunta

Tengo un método para cambiar el nombre del nombre de la columna de la tabla.

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

y estoy llamando a esta función en otro procedimiento

Public Sub querylistboxitems()
  Dim strTableName As String

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

Pero está dando un error "Byref Argument Type Mismatch"

¿Fue útil?

Solución

Falló por mí porque no definió "FLD".Lo siguiente es mucho más directo que el bucle a través de todas las tablas / campos:

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

Otros consejos

Hay otras situaciones difíciles donde puede ocurrir este problema.Por ejemplo, al declarar dos (o más) variables en una línea:

Dim firstSubMenu, secondSubMenu As CommandBarPopup

ahora Firstsubmenu es de variante de tipo, mientras que los segundos son de tipo CommandBarpopup.Esto puede no ser lo que pretendía y también puede ser una causa del error mencionado anteriormente cuando los pasa por referencia a una función que espera un parámetro de CommandBarPopPop. En este caso, una solución es declararlos en dos líneas:

Dim firstSubMenu As CommandBarPopup
Dim secondSubMenu As CommandBarPopup

O, si realmente quieres apretarlo en una línea, se puede hacer así:

Dim firstSubMenu As CommandBarPopup, secondSubMenu As CommandBarPopup

Tenga en cuenta que tendrá que repetir la Declaración de tipo 'AS' para cada variable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top