VBA Byref Тип аргумента Тип несоответствие при вызове функции
-
21-12-2019 - |
Вопрос
У меня есть метод, чтобы переименовать имя столбца таблицы.
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
.
И я вызываю эту функцию в другой процедуре
Public Sub querylistboxitems()
Dim strTableName As String
strTableName = "Table1"
Call Rename_Column(strTableName, "old", "New")
End Sub
.
Но это дает ошибку «Byref Argument Type Missatch»
Решение
Это не удалось для меня, потому что вы не определяли «FLD».Ниже приведено намного лучше, чем зацикливание через все таблицы / поля:
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
. Другие советы
Есть другие сложные ситуации, когда эта проблема может произойти.Например, при объявлении двух (или более)) переменных на одной строке:
Dim firstSubMenu, secondSubMenu As CommandBarPopup
.
Теперь FirstSubmenu имеет вариант типа, в то время как Secentubmenu имеет тип Commandbarpopup.Это может быть не то, что вы предполагаете, и также могут быть причиной вышеупомянутой ошибки при передаче их посредством ссылки на функцию, которая ожидает параметра Type CommandBarPOPUP. В этом случае решение - объявить их по двум линиям:
Dim firstSubMenu As CommandBarPopup
Dim secondSubMenu As CommandBarPopup
.
или, если вы действительно хотите сжать его на одну строку, это можно сделать так:
Dim firstSubMenu As CommandBarPopup, secondSubMenu As CommandBarPopup
.
Обратите внимание, что вам придется повторить объявление типа типа «как» для каждой переменной.