Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2010, 02:47   #1
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
Восклицание Слияние одного dbf в другой с одинаковым названием, но из разных директорий

Возникла проблема слияния одного dbf в другой. Проблема усугубляется тем, что они имеют одинаковое название, причем dbf сохранить нужно в 866-й кодировке.

Т.е. имеем два файла adr.dbf - лежат они в разных директориях (dir1, dir2 - директории не меняются, путь постоянный), к тому который лежит в dir1 нужно подлить второй. Звучит просто, но не тут то было!!!

Помогите разрулить ситуёвину!

Виновники торжества прилагаются немного в упрощенно-искаженном виде...
Вложения
Тип файла: rar join dbf.rar (1.2 Кб, 16 просмотров)
xamillion вне форума Ответить с цитированием
Старый 16.09.2010, 06:14   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Может так устроит?
Код:
Sub Main()
    Dim ws As Worksheet, i As Long, p As String: Application.ScreenUpdating = False
    Set ws = ThisWorkbook.Sheets(1): ws.Cells.ClearContents
    p = ThisWorkbook.Path & "\"
    Workbooks.Open Filename:=p & "dir1\adr.dbf"
    Cells.Copy ws.[A1]: ActiveWorkbook.Close False
    i = Cells(Rows.Count, 1).End(xlUp).Row + 1
    Workbooks.Open Filename:=p & "dir2\adr.dbf"
    Range([A2], Cells(Rows.Count, 3).End(xlUp)).Copy ws.Cells(i, 1)
    ActiveWorkbook.Close False: Application.DisplayAlerts = False
    ThisWorkbook.SaveAs p & "MyDBF.dbf", xlDBF2, False
End Sub
Естественно, пути к файлам источникам и к папке, в которую тредуется сохранять объединенный файл, а также имя итогового файла, подставьте требуемые.
Пример во вложении. Откройте файл "Merging.xls" и запустите макрос "Main".
Вложения
Тип файла: rar Merging.rar (6.9 Кб, 14 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 16.09.2010, 09:08   #3
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Может так устроит?

Естественно, пути к файлам источникам и к папке, в которую тредуется сохранять объединенный файл, а также имя итогового файла, подставьте требуемые.
Пример во вложении. Откройте файл "Merging.xls" и запустите макрос "Main".
При обработке строчки ThisWorkbook.SaveAs p & "MyDBF.dbf", xlDBF2, False выдает ошибку "Run time error '1004' Команда не может быть выполнена над указанным диапазоном. Выберите одну ячейку из диапазона и повторите попытку."

Спасибо что откликнулись.
xamillion вне форума Ответить с цитированием
Старый 16.09.2010, 09:43   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Это все потому, что Вы игнорируете правила раздела и в вопросе не указываете свою версию Excel.
Приведенный выше код будет работать в Excel 2003. С Excel 2007 дело обстоит несколько иначе. Этот вопрос уже обсуждался здесь.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 16.09.2010, 10:02   #5
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Тогда такой вариант для любой версии .Папки с файлами не забудье изменить на свои
Вложения
Тип файла: rar DBF.rar (15.0 Кб, 20 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 16.09.2010, 21:00   #6
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Это все потому, что Вы игнорируете правила раздела и в вопросе не указываете свою версию Excel.
Приведенный выше код будет работать в Excel 2003. С Excel 2007 дело обстоит несколько иначе. Этот вопрос уже обсуждался здесь.
Извиняюсь... всегда забываю про версию... причем работаю строго в Excel 2003! На другой машине с Excel 2003 выдает тоже самое...

Цитата:
Сообщение от doober Посмотреть сообщение
Тогда такой вариант для любой версии .Папки с файлами не забудье изменить на свои
Спасибо... пытаюсь разобраться... поменял на свои папки, но что-то не то...

Последний раз редактировалось xamillion; 16.09.2010 в 21:44.
xamillion вне форума Ответить с цитированием
Старый 16.09.2010, 21:16   #7
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте xamillion.
для решения подобных задач предложение от doober использующее технологию применяемую в БД (базах данных) является правильным решением.
(да и Ваша задача была бы уместнее здесь)
но позволю себе несколько подкорректировать его предложение избавив конструкцию от перебора записей.
Код:
Sub addDBF_fromDBF()
Const sPath1 = "C:\join dbf\dir1"
Const sPath2 = "C:\join dbf\dir2"
'sPath1 и sPath2 папки размещения файлов adr.dbf исходного и целевого
Const sQ1 = "INSERT INTO adr IN '", sQ2 = "'[dBase IV;HDR=NO;IMEX=2] SELECT * FROM adr IN '", _
sQ3 = "'[dBase IV;HDR=NO;IMEX=2]"
Dim oCn As New ADODB.Connection
Const sCn = "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq="
 oCn.Open sCn + sPath1 + ";"
 oCn.Execute sQ1 + sPath2 + sQ2 + sPath1 + sQ3
oCn.Close
Set oCn = Nothing
End Sub
минусом является только то, что конструкция при повторном выполнении создаст набор дублей.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 16.09.2010, 21:23   #8
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Век живи век учись.Не знал.что так таблицы можно объеденить
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 16.09.2010, 22:32   #9
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
Здравствуйте xamillion.
для решения подобных задач предложение от doober использующее технологию применяемую в БД (базах данных) является правильным решением.
(да и Ваша задача была бы уместнее здесь)
но позволю себе несколько подкорректировать его предложение избавив конструкцию от перебора записей.
................................
минусом является только то, что конструкция при повторном выполнении создаст набор дублей.
Евгений.
Код исполняется без ошибок, но оба файла без изменений... что я не так делаю?
Спасибо за помощь!
xamillion вне форума Ответить с цитированием
Старый 16.09.2010, 23:51   #10
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Сообщение от xamillion Посмотреть сообщение
Код исполняется без ошибок, но оба файла без изменений... что я не так делаю?
Спасибо за помощь!

Не знаю,наверное на жучка не по центру жмете
А если серьезно-посмотрите правильность указания директории
Вложения
Тип файла: rar Жучек.rar (963.0 Кб, 16 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
зайти с одного windows на другой Arassir Windows 4 07.08.2010 01:19
DBGrid из одного в другой MSD БД в Delphi 3 28.04.2010 15:41
Наложение одного компонента на другой rusell Компоненты Delphi 3 26.01.2010 22:49
переход из одного типа в другой Лонли-Локли Общие вопросы Delphi 8 27.08.2009 12:39
Перенос проги с одного ПК на другой Azef Помощь студентам 2 13.05.2008 18:07