С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 24.04.2016
Сообщений: 15

Автоматизировать импорт данных в Access из Excel

16.09.2019, 10:38. Показов 4678. Ответов 6

Студворк — интернет-сервис помощи студентам
Есть база данных, в которой очень много таблиц в хорошем виде. Но данные могут обновляться, нужно чтобы данные из Таблицы можно было бы быстро занести в уже существующую таблицу. Проблема в том, что Таблицы в Excel сами в очень плохом виде. Получилось записать 3 запроса, чтобы это сделать, но все это надо делать ручками, очень долго. Первый запрос просто на импорт Таблицы, потом нужно руками переименовывать первый столбец, потому что туда заносится большой и страшный текст. После этого нужно выполнить запрос на обновление этой Таблицы с функцией trim, чтобы убрать кучу лишних пробелов. И третий запрос на добавление к уже существующей Таблицы данных из этой Таблицы через INSERT.
Есть ли возможность написать какой-нибудь код на vba, чтобы собрать все эти действия в одно?
Заранее спасибо за ответ 😇
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.09.2019, 10:38
Ответы с готовыми решениями:

Экспорт-импорт данных Excel-Access-Excel
Доброе время суток уважаемые форумчане. Приходит информация в экселевской таблице. Скидываю её в общую базу в Access. Для отчета...

Импорт данных из excel в access
Доброе время суток! При создании базы данных я столкнулся с проблемой, которую пока не могу решить, возможно я найду здесь ответ. Проблема...

Импорт данных из Excel в Access
При импорте нескольких страниц таблицы в базу (использовалась возможность связывания) не проставились первичные ключи. Вручную их...

6
Эксперт MS Access
 Аватар для Eugene-LS
12058 / 5843 / 1492
Регистрация: 05.10.2016
Сообщений: 16,432
16.09.2019, 10:45
Цитата Сообщение от Valar_Sosulis Посмотреть сообщение
Проблема в том, что Таблицы в Excel сами в очень плохом виде.
Я обычно поступаю так:
01. Импортирую из Excel во временную таблицу.
02. Исправляю полученные данные
03. Импортирую исправленные данные в рабочую таблицу
04. Удаляю временную таблицу.

Надеюсь и вам такой способ подойдёт.
0
0 / 0 / 0
Регистрация: 24.04.2016
Сообщений: 15
16.09.2019, 10:52  [ТС]
Eugene-LS, ну получается сейчас таким образом все это и делается... А когда таблиц таких штук 100, и для каждой нужно выполнять такие действия, это неделя уйдёт на обновление, вот и хочется как-то упростить себе жизнь ��
0
Эксперт MS Access
 Аватар для Eugene-LS
12058 / 5843 / 1492
Регистрация: 05.10.2016
Сообщений: 16,432
16.09.2019, 11:21
Цитата Сообщение от Valar_Sosulis Посмотреть сообщение
и для каждой нужно выполнять такие действия
А иначе никак!
Проще я не вижу способа.

Добавлено через 14 минут
Цитата Сообщение от Valar_Sosulis Посмотреть сообщение
А когда таблиц таких штук 100, и для каждой нужно выполнять такие действия
Естественно все действия (мои) автоматизированы и исполняются кодом.
Например так:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
'--------------------------------------------------------------------------
' Module    : modImportTabelFromExcel
' Author    : es
' Date      : 12.07.2018
' Purpose   : Импорт справочника "Tabel"
'--------------------------------------------------------------------------
Option Compare Database
Option Explicit
'Private Sub test0001()
'    ImportTabelFromExcel
'End Sub
 
Public Sub ImportTabelFromExcel()
'es - 30.08.2019
'
'--------------------------------------------------------------------------
Dim sFilePath$ 'Ну понятно путь (в аргументе)
Dim sWorksheetName As String
Dim v As Variant, l&, i%, s$
Dim lTotUPD&, lTotAdded&
 
On Error GoTo ImportTabelFromExcel_Err
  
    s = INIRead("Last Import Folder", CurrentProject.Path, "Import from Excel")
    sFilePath = OpenFileDialog(s, , "MS Excel WorkBooks", "*.xls; *.xlsx")
    
    If sFilePath = "" Then
        'Debug.Print "No File!"
        GoTo ImportTabelFromExcel_End
    End If
    
    'Debug.Print "File FromExcel: " & sFilePath
    s = FolderByPath(sFilePath)
 
'Запись
    INIWrite "Last Import Folder", s, "Import from Excel"
    DoCmd.Hourglass True 'Показать часики
  
'Проверка данных в книге
    s = "DateReport, Affilate, TabNum, FIO, HirDate, DisDate, SR_Name_Rus, Pr_Name_Rus, MainArea_VC, PersCatName, " & _
        "GrafikCode, Klg_Collar, Holiday_Beg, Holiday_End, Illness_Beg, Illness_End, DecretN, UhodN"
   
   
    sWorksheetName = CheckFieldsInExcelWB(sFilePath, s, 64) 'вообще = 57 полей
'GoTo ImportTabelFromExcel_End
 
    If sWorksheetName = "" Then
        MsgBox "В файле:" & vbCrLf & sFilePath & vbCrLf & _
        "Не обнаружено данных для импорта." & vbCrLf & _
        "Пожалуйста укажите другой файл.", vbExclamation, "Ошибка данных"
        GoTo ImportTabelFromExcel_End
    End If
 
'Debug.Print "Найден лист: " & sWorksheetName & " i=" & i
'--------------------------------------------------------------------------
    
    
    l = LinkExcelList(sFilePath, sWorksheetName, "TabelExcelImport")
    If l > 0 Then GoTo ImportTabelFromExcel_End
 
'Зачистка
    s = "DELETE FROM tp_TabelFromExcel" 'на усякий случай чистим от прошлых данных !
    CurrentDb.Execute s
 
'md_ImportTabelFromExcel_01 - Заполнение времянки
    s = "md_ImportTabelFromExcel_01"
    CurrentDb.Execute s '
 
'Обновление всех полей у существующих
    s = "md_ImportTabelFromExcel_02"
    CurrentDb.Execute s
    
    lTotUPD = DCount("*", "tp_TabelFromExcel", "impUpdated = True") 'считаем сколько обновлено
 
'Добавление новых
    s = "md_ImportTabelFromExcel_03"
    CurrentDb.Execute s
 
    
    lTotAdded = DCount("*", "tp_TabelFromExcel", "impUpdated = False") 'считаем сколько Добавлено
 
'Отсутствующие НЕ УДАЛЯЕМ!!!
'GoTo ImportTabelFromExcel_End ' END
 
 
'END! ...
    MsgBox "Импорт из файла:" & vbCrLf & _
        sFilePath & vbCrLf & _
        "Произведён." & vbCrLf & _
        "Обновлено: " & lTotUPD & " записей." & vbCrLf & _
        "Добавлено: " & lTotAdded & " записей.", vbInformation, "OK!"
 
 
 
ImportTabelFromExcel_End:
    On Error Resume Next
    
    DoCmd.Hourglass False 'Вернуть нормальный курсор
    
    CurrentDb.TableDefs.Delete "TabelExcelImport"
    CurrentDb.TableDefs.Refresh
 
    Err.Clear
    Exit Sub
 
ImportTabelFromExcel_Err:
    MsgBox "Error: " & Err.Number & vbCrLf & Err.Description & vbCrLf & _
    "in Sub: ImportTabelFromExcel in module: modImportTabelFromExcel", vbCritical, "Error in Application"
    Err.Clear
      Debug.Print "Line: " & Erl & "."
    Resume ImportTabelFromExcel_End
End Sub
 
 
Private Function CheckFieldsInExcelWB(sFilePath$, sFieldsList$, Optional iFieldsEndCol% = 100) As String
'es - 30.08.2019
'Проверка полей в книге (перед импортом например) в произвольном порядке
'Возвращает название первого листа прошедшего проверку
'----------------------------------------------------------------
'Аргументы:
'   sFilePath$     'Ну понятно = путь к книге
'   sFieldsList    'Список названий полей через запятую
'   iFieldsEndCol  'Номер столбца = Конец заголовка полей (по умолч =100)
'----------------------------------------------------------------
Dim objExcelApp As Object
Dim objWorkBook As Object
Dim objWorkSheet As Object
Dim s$, iVal%, iValSub%, xVal%, vVal As Variant
Dim iTotalFields%, iFoundFields%
Dim arrFielsCheck() As String 'Массив полей которые проверяем
Dim arrFielsIn() As String    'Массив полей где проверяем
 
On Error GoTo CheckFieldsInExcelWB_Err
    
    s = Replace(sFieldsList, " ", "") 'Убираем пробелы!
    arrFielsCheck = Split(s, ",")     'Загоняем список в массив
    
    iTotalFields = UBound(arrFielsCheck)
    If iTotalFields = 0 Then
        MsgBox "Проверяемые поля не обнаружены!", vbCritical
        GoTo CheckFieldsInExcelWB_End
    End If
    
    iTotalFields = iTotalFields + 1
'Debug.Print "Проверяемых полей: " & iTotalFields
    
    For iVal = LBound(arrFielsCheck) To xVal
        arrFielsCheck(iVal) = Trim(arrFielsCheck(iVal)) 'На всякий случай ...
        'Debug.Print Format(iVal + 1, "000"); ". " & arrFielsCheck(i) '& "."
    Next iVal
 
    Set objExcelApp = CreateObject("Excel.Application")
    Set objWorkBook = objExcelApp.Workbooks.Open(sFilePath)
 
    
'Перебор всех листов книги
    s = ""
    For Each objWorkSheet In objWorkBook.WorkSheets
        'Debug.Print "Название листа: " & objWorkSheet.Name
        With objWorkSheet
            For iVal = 1 To iFieldsEndCol
                vVal = .Cells(1, iVal).Value
                'Debug.Print Format(i, "000") & " = " & vVal
                If vVal <> "" Then s = s & vVal & ";"
            Next iVal
        End With
        
        arrFielsIn = Split(s, ";") 'Загоняем список в массив
 
        For iVal = LBound(arrFielsCheck) To UBound(arrFielsCheck)
            'Поиск среди обнаруженных в листе полей:
            For iValSub = LBound(arrFielsIn) To UBound(arrFielsIn)
                s = arrFielsIn(iValSub)
                If arrFielsCheck(iVal) = s Then 'поле найдено!
                    iFoundFields = iFoundFields + 1
                    'Debug.Print Format(iValSub + 1, "000"); " = " & arrFielsIn(iValSub)
                    Exit For
                End If
            Next iValSub
        Next iVal
        
        If iFoundFields = iTotalFields Then 'всё найдено
            CheckFieldsInExcelWB = objWorkSheet.Name
            Exit For
        End If
 
    Next objWorkSheet
  
'Debug.Print "Найдено полей: " & iFoundFields
'Debug.Print "Найден лист: " & CheckFieldsInExcelWB & " iVal=" & iVal
 
CheckFieldsInExcelWB_End:
    On Error Resume Next
    
    objWorkBook.Close
    Set objWorkBook = Nothing
    objExcelApp.Quit
    Set objExcelApp = Nothing
    
    Err.Clear
    Exit Function
 
CheckFieldsInExcelWB_Err:
    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in Function CheckFieldsInExcelWB.", _
        vbCritical, "Произошла ошибка!"
    Debug.Print "Line: " & Erl & "."
    Err.Clear
    Resume CheckFieldsInExcelWB_End
 
End Function
 
Private Function LinkExcelList(FilePath As String, listName As String, tableName As String) As Long
' es 18.01.04
' Подлинковка листа книги Excel в режиме: READONLY - редакция данных не доступна
' Возвращает код ошибки или 0
'-------------------------------------------------------------------------
'Аргументы:
'   filePath   = Полный путь к файлу
'   listName   = Название листа
'   tableName  = Название таблицы (в текущей базе)
'-------------------------------------------------------------------------
Dim strLink As String
Dim tdf As TableDef
'Удаляем старую таблицу (если есть)
On Error Resume Next
    DoCmd.DeleteObject acTable, tableName
    Err.Clear
 
On Error GoTo LinkExcelListErr
'Задаем строку подключения
    
    'strLink = "Excel 8.0;DATABASE=" & filePath
    'или так:
    strLink = "Excel 12.0 Xml;HDR=YES;IMEX=2;DATABASE=" & FilePath
    Set tdf = CurrentDb.CreateTableDef(tableName)
    tdf.Connect = strLink
'Задаем название листа
    tdf.SourceTableName = listName & "$"
'Создание подлинкованной таблицы
    CurrentDb.TableDefs.Append tdf
    Set tdf = Nothing
    CurrentDb.TableDefs.Refresh
    DoEvents
    Exit Function
 
LinkExcelListErr:
    LinkExcelList = Err.Number
    MsgBox "Функция [LinkExcelList] привела к ошибке:" & vbCrLf & _
    Err.Description & vbCrLf & " Err#" & Err.Number, vbCritical
End Function
3
0 / 0 / 0
Регистрация: 24.04.2016
Сообщений: 15
16.09.2019, 14:31  [ТС]
Спасибо!

Добавлено через 3 часа 9 минут
Цитата Сообщение от Eugene-LS Посмотреть сообщение
А иначе никак!
Проще я не вижу способа.

Добавлено через 14 минут

Естественно все действия (мои) автоматизированы и исполняются кодом.
Например так:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
'--------------------------------------------------------------------------
' Module    : modImportTabelFromExcel
' Author    : es
' Date      : 12.07.2018
' Purpose   : Импорт справочника "Tabel"
'--------------------------------------------------------------------------
Option Compare Database
Option Explicit
'Private Sub test0001()
'    ImportTabelFromExcel
'End Sub
 
Public Sub ImportTabelFromExcel()
'es - 30.08.2019
'
'--------------------------------------------------------------------------
Dim sFilePath$ 'Ну понятно путь (в аргументе)
Dim sWorksheetName As String
Dim v As Variant, l&, i%, s$
Dim lTotUPD&, lTotAdded&
 
On Error GoTo ImportTabelFromExcel_Err
  
    s = INIRead("Last Import Folder", CurrentProject.Path, "Import from Excel")
    sFilePath = OpenFileDialog(s, , "MS Excel WorkBooks", "*.xls; *.xlsx")
    
    If sFilePath = "" Then
        'Debug.Print "No File!"
        GoTo ImportTabelFromExcel_End
    End If
    
    'Debug.Print "File FromExcel: " & sFilePath
    s = FolderByPath(sFilePath)
 
'Запись
    INIWrite "Last Import Folder", s, "Import from Excel"
    DoCmd.Hourglass True 'Показать часики
  
'Проверка данных в книге
    s = "DateReport, Affilate, TabNum, FIO, HirDate, DisDate, SR_Name_Rus, Pr_Name_Rus, MainArea_VC, PersCatName, " & _
        "GrafikCode, Klg_Collar, Holiday_Beg, Holiday_End, Illness_Beg, Illness_End, DecretN, UhodN"
   
   
    sWorksheetName = CheckFieldsInExcelWB(sFilePath, s, 64) 'вообще = 57 полей
'GoTo ImportTabelFromExcel_End
 
    If sWorksheetName = "" Then
        MsgBox "В файле:" & vbCrLf & sFilePath & vbCrLf & _
        "Не обнаружено данных для импорта." & vbCrLf & _
        "Пожалуйста укажите другой файл.", vbExclamation, "Ошибка данных"
        GoTo ImportTabelFromExcel_End
    End If
 
'Debug.Print "Найден лист: " & sWorksheetName & " i=" & i
'--------------------------------------------------------------------------
    
    
    l = LinkExcelList(sFilePath, sWorksheetName, "TabelExcelImport")
    If l > 0 Then GoTo ImportTabelFromExcel_End
 
'Зачистка
    s = "DELETE FROM tp_TabelFromExcel" 'на усякий случай чистим от прошлых данных !
    CurrentDb.Execute s
 
'md_ImportTabelFromExcel_01 - Заполнение времянки
    s = "md_ImportTabelFromExcel_01"
    CurrentDb.Execute s '
 
'Обновление всех полей у существующих
    s = "md_ImportTabelFromExcel_02"
    CurrentDb.Execute s
    
    lTotUPD = DCount("*", "tp_TabelFromExcel", "impUpdated = True") 'считаем сколько обновлено
 
'Добавление новых
    s = "md_ImportTabelFromExcel_03"
    CurrentDb.Execute s
 
    
    lTotAdded = DCount("*", "tp_TabelFromExcel", "impUpdated = False") 'считаем сколько Добавлено
 
'Отсутствующие НЕ УДАЛЯЕМ!!!
'GoTo ImportTabelFromExcel_End ' END
 
 
'END! ...
    MsgBox "Импорт из файла:" & vbCrLf & _
        sFilePath & vbCrLf & _
        "Произведён." & vbCrLf & _
        "Обновлено: " & lTotUPD & " записей." & vbCrLf & _
        "Добавлено: " & lTotAdded & " записей.", vbInformation, "OK!"
 
 
 
ImportTabelFromExcel_End:
    On Error Resume Next
    
    DoCmd.Hourglass False 'Вернуть нормальный курсор
    
    CurrentDb.TableDefs.Delete "TabelExcelImport"
    CurrentDb.TableDefs.Refresh
 
    Err.Clear
    Exit Sub
 
ImportTabelFromExcel_Err:
    MsgBox "Error: " & Err.Number & vbCrLf & Err.Description & vbCrLf & _
    "in Sub: ImportTabelFromExcel in module: modImportTabelFromExcel", vbCritical, "Error in Application"
    Err.Clear
      Debug.Print "Line: " & Erl & "."
    Resume ImportTabelFromExcel_End
End Sub
 
 
Private Function CheckFieldsInExcelWB(sFilePath$, sFieldsList$, Optional iFieldsEndCol% = 100) As String
'es - 30.08.2019
'Проверка полей в книге (перед импортом например) в произвольном порядке
'Возвращает название первого листа прошедшего проверку
'----------------------------------------------------------------
'Аргументы:
'   sFilePath$     'Ну понятно = путь к книге
'   sFieldsList    'Список названий полей через запятую
'   iFieldsEndCol  'Номер столбца = Конец заголовка полей (по умолч =100)
'----------------------------------------------------------------
Dim objExcelApp As Object
Dim objWorkBook As Object
Dim objWorkSheet As Object
Dim s$, iVal%, iValSub%, xVal%, vVal As Variant
Dim iTotalFields%, iFoundFields%
Dim arrFielsCheck() As String 'Массив полей которые проверяем
Dim arrFielsIn() As String    'Массив полей где проверяем
 
On Error GoTo CheckFieldsInExcelWB_Err
    
    s = Replace(sFieldsList, " ", "") 'Убираем пробелы!
    arrFielsCheck = Split(s, ",")     'Загоняем список в массив
    
    iTotalFields = UBound(arrFielsCheck)
    If iTotalFields = 0 Then
        MsgBox "Проверяемые поля не обнаружены!", vbCritical
        GoTo CheckFieldsInExcelWB_End
    End If
    
    iTotalFields = iTotalFields + 1
'Debug.Print "Проверяемых полей: " & iTotalFields
    
    For iVal = LBound(arrFielsCheck) To xVal
        arrFielsCheck(iVal) = Trim(arrFielsCheck(iVal)) 'На всякий случай ...
        'Debug.Print Format(iVal + 1, "000"); ". " & arrFielsCheck(i) '& "."
    Next iVal
 
    Set objExcelApp = CreateObject("Excel.Application")
    Set objWorkBook = objExcelApp.Workbooks.Open(sFilePath)
 
    
'Перебор всех листов книги
    s = ""
    For Each objWorkSheet In objWorkBook.WorkSheets
        'Debug.Print "Название листа: " & objWorkSheet.Name
        With objWorkSheet
            For iVal = 1 To iFieldsEndCol
                vVal = .Cells(1, iVal).Value
                'Debug.Print Format(i, "000") & " = " & vVal
                If vVal <> "" Then s = s & vVal & ";"
            Next iVal
        End With
        
        arrFielsIn = Split(s, ";") 'Загоняем список в массив
 
        For iVal = LBound(arrFielsCheck) To UBound(arrFielsCheck)
            'Поиск среди обнаруженных в листе полей:
            For iValSub = LBound(arrFielsIn) To UBound(arrFielsIn)
                s = arrFielsIn(iValSub)
                If arrFielsCheck(iVal) = s Then 'поле найдено!
                    iFoundFields = iFoundFields + 1
                    'Debug.Print Format(iValSub + 1, "000"); " = " & arrFielsIn(iValSub)
                    Exit For
                End If
            Next iValSub
        Next iVal
        
        If iFoundFields = iTotalFields Then 'всё найдено
            CheckFieldsInExcelWB = objWorkSheet.Name
            Exit For
        End If
 
    Next objWorkSheet
  
'Debug.Print "Найдено полей: " & iFoundFields
'Debug.Print "Найден лист: " & CheckFieldsInExcelWB & " iVal=" & iVal
 
CheckFieldsInExcelWB_End:
    On Error Resume Next
    
    objWorkBook.Close
    Set objWorkBook = Nothing
    objExcelApp.Quit
    Set objExcelApp = Nothing
    
    Err.Clear
    Exit Function
 
CheckFieldsInExcelWB_Err:
    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in Function CheckFieldsInExcelWB.", _
        vbCritical, "Произошла ошибка!"
    Debug.Print "Line: " & Erl & "."
    Err.Clear
    Resume CheckFieldsInExcelWB_End
 
End Function
 
Private Function LinkExcelList(FilePath As String, listName As String, tableName As String) As Long
' es 18.01.04
' Подлинковка листа книги Excel в режиме: READONLY - редакция данных не доступна
' Возвращает код ошибки или 0
'-------------------------------------------------------------------------
'Аргументы:
'   filePath   = Полный путь к файлу
'   listName   = Название листа
'   tableName  = Название таблицы (в текущей базе)
'-------------------------------------------------------------------------
Dim strLink As String
Dim tdf As TableDef
'Удаляем старую таблицу (если есть)
On Error Resume Next
    DoCmd.DeleteObject acTable, tableName
    Err.Clear
 
On Error GoTo LinkExcelListErr
'Задаем строку подключения
    
    'strLink = "Excel 8.0;DATABASE=" & filePath
    'или так:
    strLink = "Excel 12.0 Xml;HDR=YES;IMEX=2;DATABASE=" & FilePath
    Set tdf = CurrentDb.CreateTableDef(tableName)
    tdf.Connect = strLink
'Задаем название листа
    tdf.SourceTableName = listName & "$"
'Создание подлинкованной таблицы
    CurrentDb.TableDefs.Append tdf
    Set tdf = Nothing
    CurrentDb.TableDefs.Refresh
    DoEvents
    Exit Function
 
LinkExcelListErr:
    LinkExcelList = Err.Number
    MsgBox "Функция [LinkExcelList] привела к ошибке:" & vbCrLf & _
    Err.Description & vbCrLf & " Err#" & Err.Number, vbCritical
End Function
Eugene-LS, ещё один вопрос к Вам, если не сложно
Я так понимаю, что это не весь код, потому что есть функции, которые не объявлены. Скорее всего, они объявляются в другом месте... Можно попросить Вас прислать все остальное?) мне этот код очень бы помог, но я не особо сильна в этом деле
0
Эксперт MS Access
 Аватар для Eugene-LS
12058 / 5843 / 1492
Регистрация: 05.10.2016
Сообщений: 16,432
17.09.2019, 11:09
Лучший ответ Сообщение было отмечено Valar_Sosulis как решение

Решение

Цитата Сообщение от Valar_Sosulis Посмотреть сообщение
Можно попросить Вас прислать все остальное?
Можно ...
Вложения
Тип файла: zip ImportTabelFromExcel_v01.zip (49.0 Кб, 83 просмотров)
2
0 / 0 / 0
Регистрация: 24.04.2016
Сообщений: 15
17.09.2019, 13:11  [ТС]
Eugene-LS, спасибо большое, добрый человек!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.09.2019, 13:11
Помогаю со студенческими работами здесь

Импорт данных из Excel в Access
День добрый, уважаемое сообщество! Прошу помощи в настройке импорта данных из Excel в Access. Посмотрел похожие задачи, рассмотренные...

импорт данных из Excel в Access
Добрый день форумчане, очень нужна ваша поддержка, у меня такой вопрос: Как можно импортировать данные из Excel в Access, в которой уже...

Импорт данных из excel в БД Access
Не получается сделать кнопку на форме в access, которая смогла бы импортировать выбранный файл exсel. Сам плохо знаю VBA, но путем проб и...

Импорт данных из Excel в Access
Всех с наступающими! =) Проблема такая: есть база данных в access, есть в той же директории несколько книг excel под названием 1.xslm,...

Импорт данных из Access в Excel
Добрый день!!! Нужна помощь... Как поменять путь в эксель из акцесс. Дело в том что базу Акцес перенесли в другую сетевую папку,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru