MyTetra Share
Делитесь знаниями!
Импорт Excel таблиц в Access
Время создания: 10.10.2019 07:28
Текстовые метки: vba_access, insert into, замена точки в названиях полей
Раздел: Разные закладки - VBA - Access - Excel->Access
Запись: xintrea/mytetra_db_adgaver_new/master/base/1570681726igo32t52y2/text.html на raw.githubusercontent.com

Импорт Excel таблиц в Access (VBA) [new]

Вопрос следующий: в Access импортируются таблицы Excel с помощью обычного SELECT'a из листа -

INSERT INTO (Поля Access) SELECT Поля Excel FROM [Excel 12.0 xml;HDR=Yes;IMEX=1;DATABASE=" & currentFilePath & "]


Проблемы возникают, когда в Excel файле попадаются столбцы с нестандартными именами, содержащими в себе, например, точки.
Каким образом можно перед импортом открыть файл, c помощью REPLACE заменить точки на пробелы, и импортировать из уже отредактированного файла, не сохраняя его, чтобы не испортить исходник? Методы типа DoCmd.TransferSpreadsheet и "поячеечного" чтения не подходят, поскольку таблица содержит несколько десятков столбцов и около полумиллиона строк, что делает эти методы не совсем подходящими из-за времени выполнения.


Например, вот так:

CurrentDb.TableDefs(Table).Fields("Field#").Name=Replace(CurrentDb.TableDefs(Table).Fields("Field#").Name, "#", "")


Но существует и другие способы



или вот так:

CurrentDb.TableDefs(Table).Fields(I).Name=Replace(CurrentDb.TableDefs(Table).Fields(I).Name, "#", "")

Спс, отлично сработало.
Для вар-тов кучи полей в исходных эксельках самое то.
Sub ReplaceCharInTableName(strTableName As String)
Dim bytTableFieldCount As Byte, i As Byte
bytTableFieldCount = CurrentDb.TableDefs(strTableName).Fields.Count
For i = o To bytTableFieldCount - 1
    CurrentDb.TableDefs(strTableName).Fields(i).Name = Replace(CurrentDb.TableDefs(strTableName).Fields(i).Name, "#", " ")
Next i
'MsgBox CurrentDb.TableDefs(strTableName).Fields.Count
End Sub

Sub ReplaceCharInFieldsName(strTableName As String)
    Dim fld As DAO.Field
    With CurrentDb
        With .TableDefs(strTableName)
            For Each fld In .Fields
                fld.Name = Replace(fld.Name, "#", vbNullString)
            Next
        End With
    End With
End Sub





Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования