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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2010, 00:40   #11
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Может так устроит?
Код:
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
....................
Офис 2003 на 2-х машинах, но все же не работает на обеих...

Цитата:
Сообщение от doober Посмотреть сообщение

Не знаю,наверное на жучка не по центру жмете
А если серьезно-посмотрите правильность указания директории
Жучок, конечно оригинальный, еще б веселее было бы если он ползал бы...

Спасибо за ролик! Очень даже помог - точнее эпизод с прокруткой после многократного нажатия на жучка, который натолкнул на мысль с пустыми строками (откуда взялись пустые строки для меня непонятно)... Но как мог не заметить бегунок справа и количество записей внизу в количестве за 300 000? Нужно сходить к окулисту

Еще раз спасибо за помощь! Вы все очень помогли!
xamillion вне форума Ответить с цитированием
Старый 17.09.2010, 06:30   #12
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Офис 2003 на 2-х машинах, но все же не работает на обеих...
Все должно работать. Попробуйте включить макрорекордер и сохранить (как) файл Excel 2003, указав формат "DBF 2". Отключите запись и посмотрите полученный код.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 17.09.2010, 16:19   #13
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте xamillion.
"..оба файла без изменений... что я не так делаю?..": думаю ошибка в том, что Вы пытаетесь увидеть изменения внутри в самой таблицы, но обе таблицы содержат очень много записей (строк) без значений - т.е. пустых. Проконтролируйте размер файла до и после выполнения кода, такая проверка продемонстрирует изменения нагляднее чем поиск девяти записей содержащих значения из 4917 записей в таблице. Убедиться так же можно открыв таблицу dbf с помощью MS Access.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 17.09.2010, 18:45   #14
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Все должно работать. Попробуйте включить макрорекордер и сохранить (как) файл Excel 2003, указав формат "DBF 2". Отключите запись и посмотрите полученный код.
В том то и дело что другой dbf нормально сохраняет. Буду разбираться... спасибо!!!

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
Здравствуйте xamillion.
"..оба файла без изменений... что я не так делаю?..": думаю ошибка в том, что Вы пытаетесь увидеть изменения внутри в самой таблицы, но обе таблицы содержат очень много записей (строк) без значений - т.е. пустых. Проконтролируйте размер файла до и после выполнения кода, такая проверка продемонстрирует изменения нагляднее чем поиск девяти записей содержащих значения из 4917 записей в таблице. Убедиться так же можно открыв таблицу dbf с помощью MS Access.
Евгений.
Спасибо, Евгений! Именно так и есть!!! открытие в MS Access как раз наглядно подтверждает!!!

Последний раз редактировалось xamillion; 17.09.2010 в 19:25.
xamillion вне форума Ответить с цитированием
Старый 17.09.2010, 21:10   #15
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
Здравствуйте 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
минусом является только то, что конструкция при повторном выполнении создаст набор дублей.
Евгений.
Решение задачи подобным образом избавляет от многих проблем (самым страшным для меня в данном случае - это ограничение Excel в 65536 строк), но заводит в некоторый ступор, так как совершенно с этим работать не умею и понимаю, что это является действительно правильным решением!!!

Теперь пытаюсь решить следующие вопросы подобным образом:
1. В нашем примере из adr.dbf в dir1 данные копируются в adr.dbf в dir2. Как теперь удалить строки из adr.dbf в dir1, например, если в столбце поля «PHONE» присутствует запись «439964», «140606» или «476340» перед тем как подлить в adr.dbf в dir2?
2. Как проверить наличие одинаковых значений в столбце поля «PHONE» (условимся что их не должно быть) в adr.dbf в dir2 после слияния и впоследствии вывести сообщение об этом?
3. Как проверить наличие пустых значений в столбце поля «ADR» (опять условимся что их не должно быть) в adr.dbf в dir2 после слияния и также впоследствии вывести сообщение об этом?
4. Как запретить исполнение макроса если он уже был запущен до следующего открытия книги соответственно (это самая понятная задача из всех для меня)?

Направьте, пожалуйста, на путь истинный!!!
Вложения
Тип файла: rar join dbf.rar (15.2 Кб, 7 просмотров)

Последний раз редактировалось xamillion; 17.09.2010 в 21:16.
xamillion вне форума Ответить с цитированием
Старый 17.09.2010, 21:29   #16
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Направим,только немного прийдется подождать , по мере поступления просьб сначала заставлю ползать
Цитата:
Жучок, конечно оригинальный, еще б веселее было бы если он ползал бы..
потом создам макрос

«PHONE» присутствует запись «439964», «140606» или «476340»
это условные номера.как предполагается их вводить


Для решения таких задач прямая дорога изучать язык SQL
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 17.09.2010, 22:00   #17
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
«PHONE» присутствует запись «439964», «140606» или «476340»
это условные номера.как предполагается их вводить
Значения будут постоянные, так что прям в коде будет нормально.

Цитата:
Сообщение от doober Посмотреть сообщение
Для решения таких задач прямая дорога изучать язык SQL
Это я уже даже очень понимаю. Так что если есть на примете хорошая и доступная книга в электронном виде, я б скачал...
xamillion вне форума Ответить с цитированием
Старый 17.09.2010, 23:00   #18
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
4. Как запретить исполнение макроса если он уже был запущен до следующего открытия книги соответственно (это самая понятная задача из всех для меня)?
Я думаю сами решите этот вопрос


Путь поменяете на свой .забыл вернуть исходное значение
Вложения
Тип файла: rar addDBF_fromDBF.rar (42.3 Кб, 14 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 17.09.2010, 23:44   #19
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

xamillion, эта задача как и все подобные ей задачи работы с систематизированными табличными данными, решается "в два клика" при использовании SQL.
"..открытие в MS Access как раз наглядно подтверждает!!! .." - у Вас не появлялась мысль о необходимости переложить решение задачи "на плечи" MS Access, он ведь является "инструментом" для решения подобных задач.
Предполагая что в поле PHONE должны быть только уникальные значения, в нем легко можно построить две исполняемые SQL конструкции (запрос на обновление существующих записей (строк) и запрос на добавление новых)
после выполнения которых отпадут вопросы:
1. "..Как..удалить строки из adr.dbf в dir1,.." - записи из таблицы удалять нет необходимости, достаточно ограничить их отображение в условии отбора запроса.
2. "..наличие одинаковых значений в столбце поля «PHONE» .." - групповой запрос может отобразить кол-во повторений.
3. "..наличие пустых значений ..их не должно быть.." - запрос на удаление с условием отбора, удалит все записи по заданному критерию
4. "..запретить исполнение макроса.." - запрещать нет необходимости если будут добавляться только новые записи и редактироваться только существующие.

Мнение: в Вашем случае "путь истинный", это применение СУБД (система управления базами данных, ярким представителем является MS Access)

"..хорошая и доступная книга..": не просто хорошая книга, а Азбука -
Мартин Грубер - Понимание SQL 1.28 Мб

Успехов Вам.
Евгений.

Последний раз редактировалось Teslenko_EA; 18.09.2010 в 00:05.
Teslenko_EA вне форума Ответить с цитированием
Старый 18.09.2010, 00:11   #20
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Путь поменяете на свой .забыл вернуть исходное значение
Вложения: addDBF_fromDBF.rar
Просто нет слов чтобы выразиться без мата - офигинительно... даже с формочкой!!!

Только вот "Пустые" ошибку выдает, если пустых значений нет: "Run-time error '3021': BOF или EOF имеет значение True, либо текущая запись удалена. Для выполняемой операции требуется текущая запись." Ругается на эту строчку: "ListBox1.Column() = Rs1.GetRows"...

Удобней было бы если бы за один раз макрос все делал: удалил значения, объединил, а затем выдал в виде MSGBox: операция завершена, пустых - х, дублей - у.

И сразу сколько всего в голову приходит, сколько всего хочется: сделать, чтобы случайно не испортить файлики копировать dir1 и dir2 в папку, например, d:\database\dd-mm-yyyy\ и потом с этим работать, а результат скинуть в d:\done\ при чем папку dd-mm-yyyy заархивировать и удалить ... но это меня через чур понесло что-то... совсем разнаглелся ... лучше наверно так не баловать, а то мотивация к самостоятельному изучению ослабевает!

А вот из этого ехе-шник можно ж наверное сделать? От помощи в пояснении не отказался бы!!!

Даже не знаю как благодарить за такое

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
xamillion, эта задача как и все подобные ей задачи работы с систематизированными табличными данными, решается "в два клика" при использовании SQL.
"..открытие в MS Access как раз наглядно подтверждает!!! .." - у Вас не появлялась мысль о необходимости переложить решение задачи "на плечи" MS Access, он ведь является "инструментом" для решения подобных задач.
Предполагая что в поле PHONE должны быть только уникальные значения, в нем легко можно построить две исполняемые SQL конструкции (запрос на обновление существующих записей (строк) и запрос на добавление новых)
после выполнения которых отпадут вопросы:
1. "..Как..удалить строки из adr.dbf в dir1,.." - записи из таблицы удалять нет необходимости, достаточно ограничить их отображение в условии отбора запроса.
2. "..наличие одинаковых значений в столбце поля «PHONE» .." - групповой запрос может отобразить кол-во повторений.
3. "..наличие пустых значений ..их не должно быть.." - запрос на удаление с условием отбора, удалит все записи по заданному критерию
4. "..запретить исполнение макроса.." - запрещать нет необходимости если будут добавляться только новые записи и редактироваться только существующие.

Мнение: в Вашем случае "путь истинный", это применение СУБД (система управления базами данных, ярким представителем является MS Access)

"..хорошая и доступная книга..": не просто хорошая книга, а Азбука -
Мартин Грубер - Понимание SQL 1.28 Мб

Успехов Вам.
Евгений.
Абсолютно с Вами согласен! Потихоньку учусь, времени на это не хватает, от компьютера тошнит уже (от него не убежишь - работа такая, ну нет у нас программеров, даже какие были совершенно не хотели заниматься чем-то творческим, пусть люди тупо ручками все делают...), но тупо выполнять все вышеописанные процедуры по 3 раза на день каждый день это сумасшествие, поэтому и вынужден потихоничку программить (бывает совсем топорно - через макрорекордер, ну а что делать) ... Не знаю чтобы люди без таких как Вы, ребята, делали - к некоторым вещам я б наверное года пол бы шел... применение СУБД это просто прекрасно, глаза начинают открываться... За книгу спасибо - буду осваивать...

Последний раз редактировалось xamillion; 18.09.2010 в 00:29.
xamillion вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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