vba Byref incompatibilidade de tipo de argumento ao chamar a função
-
21-12-2019 - |
Pergunta
Eu tenho um método para mudar o nome da tabela nome da coluna.
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 eu estou chamando esta função em outras procedimento
Public Sub querylistboxitems()
Dim strTableName As String
strTableName = "Table1"
Call Rename_Column(strTableName, "old", "New")
End Sub
Mas está dando um erro "argumento Byref tipo incompatível"
Solução
Não para mim, porque você não definir "fld".O seguinte é muito mais direta do que um loop através de todos os tabelas / 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
Outras dicas
Há outras situações complicadas onde este problema poderá ocorrer.Por exemplo, quando declarar duas (ou mais) variáveis em uma linha:
Dim firstSubMenu, secondSubMenu As CommandBarPopup
Agora firstSubMenu é do tipo Variant, enquanto secondSubMenu é do tipo CommandBarPopup.Este pode não ser o que você pretende e pode também ser uma causa para o erro acima mencionado, quando a passagem deles por referência a uma função que espera um parâmetro de tipo de CommandBarPopup.Neste caso, uma solução é declarar-los em duas linhas:
Dim firstSubMenu As CommandBarPopup
Dim secondSubMenu As CommandBarPopup
Ou, se você realmente quer para espremê-lo em uma linha, ele pode ser feito assim:
Dim firstSubMenu As CommandBarPopup, secondSubMenu As CommandBarPopup
Note que você terá que repetir o 'Como' declaração de tipo para cada variável.