VBA Byref Тип аргумента Тип несоответствие при вызове функции

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

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

Обратите внимание, что вам придется повторить объявление типа типа «как» для каждой переменной.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top