Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Импорт таблиц из access в excel

Помогите пожалуйста с макросом, нужно перенести таблицу из access в определенные столбцы excel.
Офис 2016
Ответ: К сожалению Вы не описали многих важных параметров. Таких как имя листа, номер строки с которой надо заполнять, в какие столбцы. Пришлось (захотелось ) сделать более или менее общую форму для заполнения. Тоже конечно не универсальную: надо самому писать имя листа, а не выбирать из списка, также предполагается, что ексель-файл находится в той же папке, что и БД.

На форме пишете имя листа екселя, номер строки с которой надо начинать писать. Выбираете в списке имя поля и в поле справа пишете имя столбца Excel, типа A, D, XY. В ненужных полях ничего не пишете. Затем нажимаете кнопку и инфа попадет в Excel.
Вопрос: Импорт таблицы Excel в БД Access через VBA через кнопку в Excel

Форумчане, помогите, пожалуйста с кодом макроса в excel.
Задача состоит в следующем:в файле обработчик через кнопку импортировать данные с листа excel в базу данных access. При чем должен импортироваться файл, путь которого указывается в файле "обработчик".

Сейчас у меня есть такая операция, только в базе access, а надо сделать то же самое, только через excel.
Пробовала код из access прогнать в excel, но не получается.
Помогите, пожалуйста, все файлы прикладываю
Ответ: Спасибо большое!
Вопрос: Импорт таблицы excel в access

Всем привет.

Очень нужна Ваша помощь! Есть таблица excel её нужно перенести в access через vba, т.е. нажал кнопку таблица уже в access создана или через макрос. Заранее спасибо
Ответ: помогите разобрать код

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
Sub SaveToMdb()
Dim mdb As String: mdb = ThisWorkbook.Path & "\DataBase.mdb"
Dim SourceSheet As Worksheet
Dim ItemIndex As Long
Dim KDTemp, GrbsT As String
Dim KeyMAX As Long
Dim Ans As Integer
 
MonthN = CStr(Format(ActiveWorkbook.Worksheets(1).Range("E3").Value, "mmmm"))
GrbsT = ActiveWorkbook.Worksheets(1).Range("C5").Value
OrgName = ActiveWorkbook.Worksheets(1).Range("C6").Value
KDTemp = ActiveWorkbook.Worksheets(1).Range("C8").Value
'KoD = ActiveWorkbook.Worksheets(1).Range("C8").Value '+ Format(ActiveWorkbook.Worksheets(1).Range("E3"), "yyyy")'
'CStr(ThisWorkbook.Worksheets("СВОД").YearCh.Value)
 
If Cn.State = adStateClosed Then
    Cn.Provider = "Microsoft.Jet.OLEDB.4.0"
    Cn.CursorLocation = adUseClient
    Cn.Open mdb
End If
 
Set rs = Nothing
SQL = "SELECT * FROM " & KoD & " WHERE НазванОрг='" & OrgName & _
"' AND Месяц='" & MonthN & "';"
rs.Open SQL, Cn
If rs.RecordCount <> 0 Then
    Ans = MsgBox("Данные по " & OrgName & " за " & MonthN & " уже загруженны. ЗАМЕНИТЬ???", vbOKCancel)
    Select Case Ans
        Case vbOK
            Set rs = Nothing
            SQL = "DELETE * FROM " & KoD & " WHERE НазванОрг='" & OrgName & _
            "' AND Месяц='" & MonthN & "';"
            rs.Open SQL, Cn
        Case vbCancel
            GoTo Ends
    End Select
End If
Set rs = Nothing
SQL = "ALTER TABLE " & KoD & " ALTER COLUMN Ключ COUNTER(1,1);"
rs.Open SQL, Cn
Set rs = Nothing
SQL = "SELECT MAX(Ключ) As Keys FROM " & KoD & ";"
rs.Open SQL, Cn
On Error GoTo ERRH1
KeyMAX = rs.Fields("Keys").Value
 
'On Error GoTo Ends
Set rs = Nothing
rs.Open KoD, Cn, adOpenDynamic, adLockOptimistic, adCmdTable
Set SourceSheet = ActiveWorkbook.Worksheets(1)
With SourceSheet
    For ItemIndex = 9 To .Cells(Rows.Count, 1).End(xlUp).Row
    KeyMAX = KeyMAX + 1
    rs.AddNew
    rs.Fields("Ключ") = KeyMAX
    rs.Fields("НазванОрг") = OrgName
    rs.Fields("Месяц") = MonthN
    rs.Fields("ГРБС") = GrbsT
    rs.Fields("БухСчет") = .Cells(ItemIndex, 1).Value
    rs.Fields("КОСГУ") = .Cells(ItemIndex, 2).Value
    rs.Fields(KDTemp) = .Cells(ItemIndex, 3).Value
    rs.Fields("Сумма") = .Cells(ItemIndex, 4).Value
    rs.Fields("ДатаВозн") = .Cells(ItemIndex, 5).Value
    rs.Fields("ДатаПог") = .Cells(ItemIndex, 6).Value
    rs.Fields("Примечание") = .Cells(ItemIndex, 7).Value
    rs.Update
    Next ItemIndex
End With
Set rs = Nothing
 
MonthN = CStr(Format(ActiveWorkbook.Worksheets(2).Range("E3").Value, "mmmm"))
GrbsT = ActiveWorkbook.Worksheets(2).Range("C5").Value
OrgName = ActiveWorkbook.Worksheets(2).Range("C6").Value
KDTemp = ActiveWorkbook.Worksheets(2).Range("C8").Value
KoD = ActiveWorkbook.Worksheets(2).Range("C8").Value + CStr(ThisWorkbook.Worksheets("СВОД").YearCh.Value)
 
Set rs = Nothing
SQL = "DELETE * FROM " & KoD & " WHERE НазванОрг='" & OrgName & _
"' AND Месяц='" & MonthN & "';"
rs.Open SQL, Cn
Set rs = Nothing
SQL = "ALTER TABLE " & KoD & " ALTER COLUMN Ключ COUNTER(1,1);"
rs.Open SQL, Cn
Set rs = Nothing
SQL = "SELECT MAX(Ключ) As Keys FROM " & KoD & ";"
rs.Open SQL, Cn
On Error GoTo ERRH1
KeyMAX = rs.Fields("Keys").Value
 
'On Error GoTo Ends
Set rs = Nothing
rs.Open KoD, Cn, adOpenDynamic, adLockOptimistic, adCmdTable
Set SourceSheet = ActiveWorkbook.Worksheets(2)
With SourceSheet
    For ItemIndex = 9 To .Cells(Rows.Count, 1).End(xlUp).Row
    KeyMAX = KeyMAX + 1
    rs.AddNew
    rs.Fields("Ключ") = KeyMAX
    rs.Fields("НазванОрг") = OrgName
    rs.Fields("Месяц") = MonthN
    rs.Fields("ГРБС") = GrbsT
    rs.Fields("БухСчет") = .Cells(ItemIndex, 1).Value
    rs.Fields("КОСГУ") = .Cells(ItemIndex, 2).Value
    rs.Fields(KDTemp) = .Cells(ItemIndex, 3).Value
    rs.Fields("Сумма") = .Cells(ItemIndex, 4).Value
    rs.Fields("ДатаВозн") = .Cells(ItemIndex, 5).Value
    rs.Fields("ДатаПог") = .Cells(ItemIndex, 6).Value
    rs.Fields("Примечание") = .Cells(ItemIndex, 7).Value
    rs.Update
    Next ItemIndex
End With
MsgBox "Данные успешно соxранены в mdb файл"
GoTo Ends
ERRH1:
    KeyMAX = 0
    Err.Clear
    Resume Next
Ends:
    Err.Clear
    Set rs = Nothing
    If Not rs.State = adStateClosed Then rs.Close
    Set SourceSheet = Nothing
    Cn.Close: Set Cn = Nothing
End Sub
Вопрос: Импорт таблицы excel в БД access 2003

Форумчане, доброго времени суток!

Как запустить процедуру импорта в БД Аксесс кнопкой?

Импортируемый файл скорее всего будет с расширением ".xls"
из файла .xls импортируется лист с наименованием "Сопровождение"
Директория, в которой находится файл .xls скорее всего будет: "D:\Папка1"
Наименование файла будет разное (можно, конечно переименовывать-но это дополнительные сложности)


Подскажите,пожалуйста, как это сделать?
Ответ: ankan, конвертировать PCB в mdb напрямую это значит копаться в кишках PCB с весьма значительными затратами времени. Для меня явно непроизводительных.
Проще найти в сети конвертор PCB в популярный тип, например в XLS и уже из екселя брать данные.
Вопрос: Импорт из Excel 2010 через TransferSpreadsheet

Пытаюсь забрать данные из файла xlsx командой:

Код Visual Basic
1
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "имя табилцы", "имя файла из переменной", True
Выдает ошибку на неправильный формат файла. Перепробовал уже и acSpreadsheetTypeExcel12Xlm и просто индексы от 9 до 14 - не помогает.

Команда без проблем забирает данные с файлов xls, но xlsx не могу победить. Знаю, что такая проблема решается когда имя файла указывается напрямую, вместе с расширением, но в моем случае пользователь хочет иметь возможность выбора файла.

Какие еще есть варианты?
Ответ:
Сообщение от Eujine
Знаю, что такая проблема решается когда имя файла указывается напрямую, вместе с расширением, но в моем случае пользователь хочет иметь возможность выбора файла.
Значит, у вас проблема в имени/адресе файла. Добавьте оператор типа

Код Visual Basic
1
Debug.Print "имя файла из переменной"
и посмотрите, чем будет отличаться выведенное в окне отладки о того, что вы передаете напрямую. Когда станет ясно ЧТО исправлять - придумаем КАК.

Добавлено через 1 минуту
Кроме того, я вот до сих пор храню в рамочке совет mobile, что данные из excel можно получать не только путем импорта, но и просто запросом. Цитирую:

для *.xls

Код SQL
1
2
SELECT *
FROM [ИмяЛиста$] IN 'путь\имяфайла.xls'[Excel 8.0; HDR=FALSE;]
Для файлов *.xlsx

Код SQL
1
2
SELECT *
FROM [ИмяЛиста$] IN 'путь\имяфайла.xlsx'[Excel 12.0 XML; HDR=No;]
Вопрос: Импорт из Excel

Добрый день! Подскажите как сделать импорт из Excel в Access с кнопки. Перерыл интернет так и не нашел. я знаю есть встроенная функция в Access Импорта, мне надо чтоб она открывалась с кнопки, так как пользователям надо чтоб все было на форме. как прописать это открытие?)

И еще вопрос когда файл екселевский загрузиться. у меня в базе идет сплошная нумерация. и с ней работает несколько пользователей. получается она меняется. как мне потом пронумеровать данные загруженные из ексель или при загрузке они автоматом нумеруются? Заранее всем спасибо за помощь)

Добавлено через 1 час 16 минут
Нашел как импортировать, чем макросы можно открыть это окошко. Только вопрос о присвоении порядковых номеров остался.

и еще такой вопрос. никак не получается добавить данные в базу через форму с помощью запроса скл. решил тоже сделать через добавление макрсоом. НО. у меня при занесении данных идет проверка на пустые поля. а кактеперь подцепить эту процедуру к макросу не пойму. чтоб сначало проверяла а потом добавляла?? Подскажите плиз.

и еще при добавлении ново записи у меня должно пояляться на форме номер записи дата и отдел. а уменя они появляются только когда запись добавлена. как еще это реализовать? тогда получиться как update такого вроде в макроах нету(
Ответ:
Visual Basic
1
2
DoCmd.RunSQL "INSERT INTO [Temp_нч]" & _
"SELECT * FROM [Excel 8.0;DATABASE=D:\Общая папка\_Импорт\НчМСС.xlsx].[ОКС$]"
Происвети импорт в таблицу Temp_нч из файла D:\Общая папка\_Импорт\НчМСС.xlsx] где ОКС название листа.
Вопрос: "Умный" импорт из Excel в Access

Добрый день, уважаемые!

Проблема продиктована безграмотностью некоторых сотрудников у меня на работе. Прошу помощи, т.к. в Access никогда не работал.

Итак, есть таблица Excel (и не одна), в которой записаны данные, причем если наименование чего-либо в столбце имеет, допустим, 5 строк, то для его внесения в таблицу задействовано 5 ячеек по вертикали. В некоторых ячейках, записанных подобным образом, содержатся несколько значений (напр. Заказчик, № договора и дата договора), которые хотелось бы разбить по отдельным столбцам.

В общем и целом, написанный мной макрос в Excel VBA выполняет поставленные задачи (Объединяет несколько строк текста в одну, вычленяет необходимую информацию и т.д.), однако при попытке запуска цикла обработки всего документа (около 2000 строк) - Excel зависает. Я решил "разгрузить" ЦПУ и ввел в код 2 InputBox'а, в которые ввожу № строки начала обработки и № строки окончания. По 150-200 строк обрабатывает без зависаний, однако по заполнении 60-80 строк (результаты вывожу на соседний лист) начинают пропадать первые записи и заменяться последующими (такое ощущение, как будто не хватает места и для записи новых, он удаляет последние). Это меня крайне разочаровало и я решил воспользоваться СУБД.

Теперь вопрос: есть ли у кого примерчик макроса VBA, обрабатывающего файл Excel (как это делал я) перед импортом в базу? Или, возможно, если это будет иметь такие же печальные результаты с загрузкой процессора, то пример выполненной мной задачи в Excel, только уже с таблицей Access (SQL, как я понимаю, пошустрее работает)

Заранее благодарю за подсказки
Ответ:
Сообщение от Kkarn
А еще можно по способу, который мне раньше советовал mobile, обращаться прямо к экселевскому файлу через запрос, очень даже удобно.
У него файл неструктурированный. Там где-то по нескольку значений в одном, где-то одно значение в нескольких ячейах.

P.s. ощущение такое, что спарсил что-то откуда-то )))) Вот не верю, что люди руками такое набили и что нельзя с ними договориться нормально набивать.
Вопрос: Программно импортировать таблицу Excel с указанием типов полей

Добрый день.
Допустим, есть таблица Excel, в которой несколько полей имеют довольно таки странные, заданные пользователем, форматы. Например, есть столбец "Размер", в котором хранятся сугубо ЧИСЛА, но с добавлением БУКВЫ, при этом буква добавляется через ФОРМАТ ЯЧЕЙКИ, т.е. в формате данной ячейки задано что-то вида 0"C", и если в ячейке хранится например число 12, то оно отображается как 12С. При этом в этом же столбце используются и куча других форматов типа 0"B", 0"D" и так далее. То есть в данном поле хранятся цифры, например: 12, 25, 14, но ОТОБРАЖАЮТСЯ они в виде 12С, 25D, 14C и так далее. Я без понятия, зачем оно так, но это - данность.

Так вот, существует задача "забрать" эти данные любым доступным способом в Access, чтобы эти буквы сохранились.

1. Делаю стандартно через Внешние данные, при этом хочу сделать присоединенную таблицу. При этом в мастере оно НЕ СПРАШИВАЕТ типы полей, делает вывод о содержимом по первым нескольким записям, и в итоге в присоединенной таблице в столбце Размер мы имеем числа: 12С, #Число!, 14C и т.д. При этом формат данного столбца Access устанавливает автоматически равным 0"C" (по первой ячейке), и соответственно все числа, которые не попадают в данный формат - вылетают как #Число! То есть такой вариант меня не устраивает.

2. Делаю через Внешние данные, но делаю импорт, а не присоединенную таблицу. В таком случае оно дает выставить для данного поля формат Текстовый - и все нужные буковки сохраняются. Ура-ура. НО

Возникает задача - как бы сделать такой вот импорт, с указанием типов полей, ПРОГРАММНО?..
DoCmd.TransferSpreadsheet - в нем я не нахожу, куда вписать, чтобы именно полю Размер задать текстовый формат...
Может, нужно воспользоваться чем-то другим?..
Заранее большое спасибо за подсказки)
Ответ: Если я правильно понимаю, то в исходном запросе должна быть не таблица, а сохраненный запрос, уже учитывающий все необходимые ограничения. И имя этого запроса передается в функцию. И вот в этом сохраненном запросе и надо задавать все требуемые условия:
Код SQL
1
FROM Сохраненный_Запрос_С_Условиями
И тогда не потребуются усилия, чтобы внедряться в функцию и что-то там менять. Сам исходный набор данных, построенный на сохраненном запросе, уже учтет все ограничения
Вопрос: Ошибка при импорте из Excel

Недавно начал изучать Access, но база нужна была "еще вчера", поэтому вопрос, может и смешной, но сам еще не смог разобраться
Есть заготовка базы, в которую регулярно должны импортироваться данные из файла Excel. Данные всегда добавляются в базу к предыдущим. При импорте ошибка, и удаляются нужные поля, и их надо заполнять потом вручную (а импорт может быть очень большим). Я понимаю, что это как-то связанно с ключами, но, за 2 дня, так и не понял в чём именно дело. Собственно, почему возникает эта ошибка, и как ее избежать, чтобы регулярно импортировать файлы Excel в таком виде?
База и файл импорта в приложении.
Ответ: Проблему, можно сказать Вы себе создали сами :-). Вы использовали в таблице поля подстановки из справочников и они показывали Вам знакомый текст. А на самом деле поля в таблице числовые и засунуть туда текст из екселя никак невозможно. Я в запросе, в коде ВБА, соединил справочники с таблицей Complectation по полям связи и подставлял в запрос на вставку уже числовые значения из справочников.

Вот такие они подлые эти поля подстановок. Все подстановки надо делать в формах. Не в таблицах. Таблица хранилище данных и только в этой ипостаси их надо использовать.
Вопрос: Макрос для быстрого импорта из Excel

Доброе время суток!
Есть два десятка excel-файлов. Регулярно требуется часть листов с этих файлов импортировать в Access-файлы с теми же именами файлов.
Как я решал эту задачу. Импортировал каждый лист каждого файла и сохранял опции импорта в меню "Сохраненные операции импорта". В дальнейшем, запуская импорт по сохраненным параметрам, обновлял нужные таблицы.
Все это хорошо... Но обновление баз даже с применением сохранения настроек занимает довольно продолжительное время. Подскажите, пожалуйста, можно ли это автоматизировать? Есть опыт написания макросов в Excel.
Ответ: Анатолий ( Киев ),

Private Sub Кнопка0_Click()
Dim db As Database, i As Integer, sName As String, sFilePath
    sFilePath = CurrentProject.Path & "\" & "M.xls"
    'Открываем файл Excel как БД
    Set db = OpenDatabase(sFilePath, False, True, "Excel 8.0;HDR=NO;IMEX=1")
    For i = 0 To db.TableDefs.Count - 1
    'Возвращает имена листов (с "$" в конце) и имена интервалов.
        sName = db.TableDefs(i).Name
     If sName Like "*$" Then
        'Обрабатываем только листы
        sName = Left$(sName, Len(sName) - 1)
        If sName <> "ПереченьМОП" Then
        'Импортируем текущий лист
            DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "Таблица_" & sName, sFilePath, True, sName & "$"
        End If
     End If
    Next
End Sub



У меня этот код таблицы создаёт, а данные не перекидывает.
только одну пустую строку в таблице, при повторном запуске кода - ещё строку в таблице создаёт.