Добрый день. есть макрос который собирает данные на лист "rezultat" нужно данную информацию сохранить в отдельный .dbf (желательно без надстроек) P.S. макро подсказал "МатросНаЗебре" и переделан под себя за что ему
офис - 2010 знания VBA - нулевые
Добрый день. есть макрос который собирает данные на лист "rezultat" нужно данную информацию сохранить в отдельный .dbf (желательно без надстроек) P.S. макро подсказал "МатросНаЗебре" и переделан под себя за что ему
Sub insert_into_dbf() Dim objRS: Set objRS = CreateObject("ADODB.Recordset") objRS.Open "insert into 4726539 SELECT * from [rezultat$] in '" & ThisWorkbook.FullName & "' 'Excel 8.0;'", _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.path & ";Extended Properties=dBASE IV" Set objRS = Nothing End Sub
[/vba] вместо 4726539 напишите имя вашего dbf файла без расширения
если файлы в одной папке [vba]
Код
Sub insert_into_dbf() Dim objRS: Set objRS = CreateObject("ADODB.Recordset") objRS.Open "insert into 4726539 SELECT * from [rezultat$] in '" & ThisWorkbook.FullName & "' 'Excel 8.0;'", _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.path & ";Extended Properties=dBASE IV" Set objRS = Nothing End Sub
[/vba] вместо 4726539 напишите имя вашего dbf файла без расширенияkrosav4ig
спасибо. "krosav4ig" 2-пример работает но надо подправить код на строчку .Cells(iY2, 13).Value = Cells(iY1, 6).Value поставить 2 контроля 1 - ограничить данные до 38 знаков, в "rezultat" забирать только первые 38 знаков (если больше то .dbf не создаётся) 2 - замена "і" кириллица на "і" англий с соблюдением регистра (в .dbf попадает ?????) ишчо один момент - если поправил данные и запускаю макрос заново то в .dbf новые данные добавлялись к старим - надо чтобы затирало старые или создавало каждый раз новый фаил с новыми данными с новым именем
спасибо. "krosav4ig" 2-пример работает но надо подправить код на строчку .Cells(iY2, 13).Value = Cells(iY1, 6).Value поставить 2 контроля 1 - ограничить данные до 38 знаков, в "rezultat" забирать только первые 38 знаков (если больше то .dbf не создаётся) 2 - замена "і" кириллица на "і" англий с соблюдением регистра (в .dbf попадает ?????) ишчо один момент - если поправил данные и запускаю макрос заново то в .dbf новые данные добавлялись к старим - надо чтобы затирало старые или создавало каждый раз новый фаил с новыми данными с новым именемdocdim
Сообщение отредактировал docdim - Понедельник, 02.03.2015, 16:44
Sub insert_into_dbf() Dim objRS: Set objRS = CreateObject("ADODB.Recordset") Dim ConStr$: ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & ";Extended Properties=dBASE IV" Dim fields$: fields = "kb_a, kk_a, kb_b, kk_b, d_k, summa, vid, ndoc, i_va, da, da_doc, left(nk_a, 38) as nk_a, Left(nk_b, 38) as nk_b, nazn, kod_a, kod_b" With Sheets("rezultat").[L:M]: .Replace "і", "i": .Replace "І", "I": End With 'создаем пустую таблицу и копируем в нее структуру из 4726539.dbf objRS.Open "SELECT * INTO tmp FROM 4726539 WHERE 1>1 ", ConStr 'записываем значения в созданную таблицу objRS.Open "insert into tmp SELECT " & fields & " from [rezultat$] in '" & ThisWorkbook.FullName & "' 'Excel 8.0;'", ConStr Set objRS = Nothing 'переименовываем полученный файл Name ThisWorkbook.Path & "\TMP.DBF" As ThisWorkbook.Path & "\resultat " & Format(Now(), "DD_MM_YYYY hh_mm_ss") & ".dbf" End Sub
[/vba]
ну тогда держите [vba]
Код
Sub insert_into_dbf() Dim objRS: Set objRS = CreateObject("ADODB.Recordset") Dim ConStr$: ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & ";Extended Properties=dBASE IV" Dim fields$: fields = "kb_a, kk_a, kb_b, kk_b, d_k, summa, vid, ndoc, i_va, da, da_doc, left(nk_a, 38) as nk_a, Left(nk_b, 38) as nk_b, nazn, kod_a, kod_b" With Sheets("rezultat").[L:M]: .Replace "і", "i": .Replace "І", "I": End With 'создаем пустую таблицу и копируем в нее структуру из 4726539.dbf objRS.Open "SELECT * INTO tmp FROM 4726539 WHERE 1>1 ", ConStr 'записываем значения в созданную таблицу objRS.Open "insert into tmp SELECT " & fields & " from [rezultat$] in '" & ThisWorkbook.FullName & "' 'Excel 8.0;'", ConStr Set objRS = Nothing 'переименовываем полученный файл Name ThisWorkbook.Path & "\TMP.DBF" As ThisWorkbook.Path & "\resultat " & Format(Now(), "DD_MM_YYYY hh_mm_ss") & ".dbf" End Sub
.Select End With 'Sub insert_into_dbf() Dim objRS: Set objRS = CreateObject("ADODB.Recordset") Dim ConStr$: ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & ";Extended Properties=dBASE IV" Dim fields$: fields = "kb_a, kk_a, kb_b, kk_b, d_k, summa, vid, ndoc, i_va, da, da_doc, left(nk_a, 38) as nk_a, Left(nk_b, 38) as nk_b, nazn, kod_a, kod_b" 'With Sheets("Лист1").[L:M]: .Replace "?", "i": .Replace "?", "I": End With On Error Resume Next objRS.Open "drop table tmp", ConStr 'создаем пустую таблицу и копируем в нее структуру из 4726539.dbf objRS.Open "SELECT * INTO tmp FROM rezultat WHERE 1>1 ", ConStr 'записываем значения в созданную таблицу objRS.Open "insert into tmp SELECT " & fields & " from [rezultat$] in '" & ThisWorkbook.FullName & "' 'Excel 8.0;'", ConStr Set objRS = Nothing 'переименовываем полученный файл Name ThisWorkbook.Path & "\TMP.DBF" As ThisWorkbook.Path & "\rezultat " & Format(Now(), "DD_MM_YYYY hh_mm_ss") & ".dbf" End Sub
[/vba]
весь код - может можно почистить ненужные строки типа 'On Error Resume Next - 2 раза (оставить там где он действительно нужен)
[vba]
Код
Sub Собрать() Dim iY1 As Long Dim iY2 As Long Dim iX1 As Integer
iY2 = 2 With Sheets("Лист1").[F:F]: .Replace "і", "i", , , 1: .Replace "І", "I", , , 1: .Replace "ААА", "БББ", , , 1: End With 'On Error Resume Next Sheets("Лист1").Select
With Sheets("rezultat") .Range(.Cells(2, 1), .Cells(Rows.Count, 16)).Clear
.Select End With 'Sub insert_into_dbf() Dim objRS: Set objRS = CreateObject("ADODB.Recordset") Dim ConStr$: ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & ";Extended Properties=dBASE IV" Dim fields$: fields = "kb_a, kk_a, kb_b, kk_b, d_k, summa, vid, ndoc, i_va, da, da_doc, left(nk_a, 38) as nk_a, Left(nk_b, 38) as nk_b, nazn, kod_a, kod_b" 'With Sheets("Лист1").[L:M]: .Replace "?", "i": .Replace "?", "I": End With On Error Resume Next objRS.Open "drop table tmp", ConStr 'создаем пустую таблицу и копируем в нее структуру из 4726539.dbf objRS.Open "SELECT * INTO tmp FROM rezultat WHERE 1>1 ", ConStr 'записываем значения в созданную таблицу objRS.Open "insert into tmp SELECT " & fields & " from [rezultat$] in '" & ThisWorkbook.FullName & "' 'Excel 8.0;'", ConStr Set objRS = Nothing 'переименовываем полученный файл Name ThisWorkbook.Path & "\TMP.DBF" As ThisWorkbook.Path & "\rezultat " & Format(Now(), "DD_MM_YYYY hh_mm_ss") & ".dbf" End Sub
[/vba]
весь код - может можно почистить ненужные строки типа 'On Error Resume Next - 2 раза (оставить там где он действительно нужен)docdim
Сообщение отредактировал docdim - Среда, 04.03.2015, 11:14