powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Открытие или перенос данных из dbf файла в Excel макросом
32 сообщений из 32, показаны все 2 страниц
Открытие или перенос данных из dbf файла в Excel макросом
    #37523240
Semennuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, начну с того что я только учусь и с этим никогда не сталкивался :-)
У меня задачка такого рода: есть папка с файлами dbf. Каждый день она пополняется новой партией файлов из которых мне надо только 3 определённых файла. На работе делал так - Сортировал за возрастанием по дате, потом выберал нужные файли и открывал екселем, данные копировал в листы другой книги, где макрос делал выборку нужной информации и збивал в кучу.
Так как этот процес нужно делать по пару раз в день, хотелось бы его автоматизировать (бывають промахи - человеческий фактор). Помогите пожалуйста, с кодом макроса. Необезательно что бы он был крутой - простенький. Дальше я бы уже разобрался...

Папку с файлами прикрепил.
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37523367
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используя ADODB.connection/recordset и ODBC -драйвер для dBase выборка делается легко. Хоть всего содержимого на лист/листы. Хоть только необходимых данных. Можно сделать и запрос с JOIN сразу из всех необходимых таблиц-источников и получить нужный результат.

Далее уже автоматизировать процесс работы с самими файлами. Например, появились файлы на входе - отследили и обработали (или сверили список и кнопочку нажали), результат получили - файлы стерли/убрали в другое место. И ждем следующих...

Напишите, что за выборки и своды вы делаете (или дайте пример вашего Excel-файла с выборками).
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37523408
Semennuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так, а зачем? Там очень простой код.
Я не силён в программировании и незнаю что такое ADODB.connection/recordset и ODBC -драйвер для dBase. Мне бы только простенький код для того что бы найти нужные файлы и с них перенести данные в листы ексель.
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37523423
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как бы вам объяснить...

Если вы попытаетесь "автоматизировать" свои _действия как человека_ (нашел, открыл, выделил, скопировал, переключил...) - это одно. Так можно сделать, но комп - не человек, и неспособен _оценивать_ всю сопутствующую информацию (если, конечно, он не AI со всеми аналогами человеческих чувств). И все равно, многие начинающие, вместо того, чтобы немного подумать или посоветоваться, как раз и начинают "автоматизировать" действия, которые выполняли бы сами. В результате программа манипулирует окнами, приложениями, эмуляцией нажатий кнопок, обменом через буфер, многократным пересохранением, вписыванием кучи формул для вычислений и т.д. Конечно, в результате обычно получается нужный результат, но написание и отладка такого кода выливается в сущий кошмар. Поскольку требует учитывать множество дополнительных факторов.

А правильные действия - определиться с предметной областью. Определиться, что вы имеете и что желаете получить в результате. И какими программными средствами вы располагаете для решения. И начинать реализовывать действия заложенными в ПО возможностями.

Я вам в предыдущем посте практически все, что нужно, расписал. И код при таком подходе будет не только "наипростейшим" но и почти минимальным.

Вы пишете, что "только учитесь, не сильны в программировании" - так всё равно, раз взялись за автоматизацию некоего процесса - будьте добры учиться по данной теме. И не стОит учиться на ошибках (своих и чужих), если есть практически стандартизованные методы решения определенных задач.

Вот я и говорю - "Дайте еще пример вашего готового Excel-файла с выборками (где заполнены листы, перенесенные из DBF, и есть формулы/своды (или чего там вы делаете потом)). И укажите, из каких файлов DBF взяты данные" . И мы попробуем вместе с вами разобраться, как нужно решать вашу задачу, причем быстро и "правильно".
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37523458
Semennuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM , я Вас понял и спасибо что откликнулись. Даю код макроса, но это не конечный результат. Дальше я хочу обходиться вовсе без него. И два файла эксель которые я использую при вычеслении.
Код: plaintext
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.
 Sub RUN_412()
'
' RUN_412 Макрос
' Макрос записан 19.10.2011 (2000_sip)
'

'Ділення сум бюджетів на  100   000 , переведення в тис.грн.
    Workbooks.Open Filename:="C:\Program Files\SIP\F412\Budgetu.xls"
    Sheets("DerBud").Select
    Range("J1").Select
    ActiveCell.FormulaR1C1 = "100000"
    Range("J1").Copy
    Range("G2:H3").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlDivide, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Selection.NumberFormat = "0.0"
    Sheets("MiscBud").Select
    Range("J1").Select
    ActiveCell.FormulaR1C1 = "100000"
    Range("J1").Select
    Selection.Copy
    Range("G2:H3").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlDivide, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Selection.NumberFormat = "0.0"
    Sheets("OblBud").Select
    Range("J1").Select
    Selection.FormulaR1C1 = "100000"
    Selection.Copy
    Range("G2:H2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlDivide, SkipBlanks _
        :=False, Transpose:=False
    Range("G2:H3").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWindow.SmallScroll Down:=- 12 
    Application.CutCopyMode = False
    Selection.NumberFormat = "0.0"
    
    Sheets("Zagalna").Select
    Range("I7:J53").Copy
    Windows("F412.xls").Activate
    Sheets("Держ.бюд.").Select
    Range("I7").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Місц.Бюдж.").Select
    Windows("Budgetu.xls").Activate
    Range("I57:J134").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("F412.xls").Activate
    Range("I4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("412").Select
    Range("B2").Select
    Application.CutCopyMode = False
    
    
     Windows("Budgetu.xls").Activate
    Range("I142:J229").Select
    Selection.Copy
    Windows("F412.xls").Activate
    Sheets("Міськ.Бюдж.").Select
    Range("I8").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
     
    ActiveWorkbook.Save
    Windows("Budgetu.xls").Activate
    ActiveWorkbook.Save
     ActiveWindow.Close
     Windows("F412.xls").Activate
    Sheets("412").Select
    Range("C4:C65").Select
End Sub

У меня есть 2 файла эксель - Budgetu.xls и F412.xls. Сначала я открывал Budgetu.xls и с dbf файлов копировал данные в листы DerBud, MiscBud и OblBud. Сохранял и закрывал. Потом открывал F412.xls - запускал макрос RUN_412, который копировал данные в себе в книгу и выводил уже общую, нужную информацию в таблицы. Дальше в планах я хотел это сделать в одном файле и уже без макроса копирования, формулы ведь все работают нормально. Но сначала я хотел бы, чтоб не вручную копировать с dbf, а например, запустил макрос - появилось окно требующее ввести дату - после ввода он бы находил нужные файлы с нужной датой - переносил данные - ну а дальше ... результат, который я просто использую как мне надо.
Какие именно 3 файла DBF мне надо было открывать: я сортировал по дате за возрастанием, потом, например, там 6 файлов за 10.05.2011, я открывал 4-ый сверху и копировал в лист DerBud, последний файл нужной даты я копировал в MiscBud и предпоследний в OblBud.
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37523518
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В целом, я посмотрю, и постараюсь что-нибудь сваять, показывая вам. И интерфейс, и код. По частям, чтобы вы поняли подход. Впереди выходные - попробуем за это время управиться...
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37523528
Semennuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большущее спасибо, что взялись...
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37523618
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SemennuchКакие именно 3 файла DBF мне надо было открывать: я сортировал по дате за возрастанием, потом, например, там 6 файлов за 10.05.2011, я открывал 4-ый сверху и копировал в лист DerBud, последний файл нужной даты я копировал в MiscBud и предпоследний в OblBud.Напишите, пожалуйста, как будут называться файлы, например за 18-ое, 23-е и 30-е число. Достаточно имени одного файла на дату.
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37523637
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища,

Скорее всего, они называются всегда одинаково, по части кода из какого-то классификатора. А расширение - порядковый номер выгрузки в данный день. Вообще, я для начала предложу просто список с мультиселектом, и, как и говорил, при подтверждении обработки - входные файлы в аут (можно и с переименованием).
Просто на первом этапе _полностью автоматическая_ обработка ТСу будет слишком, ведь если дать сразу полностью готовый код - при любом изменении он нам потом мозг съест повторными вопросами (в полностью готовом модуле будет ли сначала разбираться?).
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37523661
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,
... И интерфейс, и код. По частям, чтобы вы поняли подход. ...Часть первая - отбор файлов по дате. :)

Скорее всего, они называются всегда одинаково, по части кода из какого-то классификатораЗачем гадать? Когда есть первоисточник. Согласен, имя формируется по классификатору, содержит данные об 'откуда' и 'когда'.
С 'откуда' - разобрался. С 'когда' - застрял.
Маска файлов за десятое ноября
Код: plaintext
FT??0BA_.00?
FT - префикс
первые ?? - классификатор 'откуда'
0 - _возможно_, год (0 - 2011, 1 будет 2012, 2 - 2013, и т.д.). хотя вряд ли
B - шестнадцатеричное представление номера месяца
A0 - шестнадцатеричное представление дня
Вот с днём неопределённость, - то ли для однозначных чисел дополняется нулём справа, то ли записан задом наперёд.
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37523676
Semennuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эти файлы скидуют нам из другой организации. Я чуток разобрался как они их называют.
Значит так:
Возьмём файли которые пришли 01.11.2011 года (со знаком восклицания - эмо мои искомые)
FT000B10.001
FT000B10.002
FT010B10.001
FT010B10.002 !!!! (в лист DergBud)
FT100B10.001
FT100B10.002
FT110B10.001 !!!! (в лист OblBud)
FT110B10.002 !!!! (в лист MiscBud)

Разберём - первые 5 символов (FT000) постоянные. Дальше идёт буква B - это месяц по порядку (Январь - 1, Февраль - 2, ..., Сентябрь - 9, Октябрь - А, Ноябрь - В , Декабрь - С. Следующая цыфра 1 - это число месяца от 1 до 9 и дальше A(10) - V(31). Дальше 0 - число постоянное. И в конце расширение .001 и .002 тоже постоянные. В результате меняются только 2 знака - месяц и число.
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37523682
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем разбираться? ТС до сих пор по поводу файлов держит неопределенность.
У него "есть папка с файлами dbf. Каждый день она пополняется новой партией файлов"..."появилось окно требующее ввести дату - после ввода он бы находил нужные файлы с нужной датой ... Какие именно 3 файла DBF мне надо было открывать: я сортировал по дате за возрастанием, потом, например, там 6 файлов за 10.05.2011, я открывал 4-ый сверху и копировал в лист DerBud, последний файл нужной даты я копировал в MiscBud и предпоследний в OblBud" Оч-чень внятный алгоритм
Так что предлагаю первоначально этот вопрос оставить на совести "тыкающего в пимпочку" - Выдаем список файлов за нужную дату (дату пока придется брать из ФС) и список таблиц-получателей, а "опэратор" тычками привязывает файл->таблица.
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37523690
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, извиняюсь - пока писАл - уже ответ пришел.

А больше всего меня добивает метОда - сначала "вышестоящие" разбивают единую таблицу, кодируя (без внятного документирования!) ключевые поля в имена файлов. Затем "на местах" из этих файлов собирают все обратно...

скукотища , я бы проблему с файлами решил так - сливал бы все поступающие в единую таблицу с дополнительным полем - именем входного файла. Ну, еще поля можно добить - раскодировать это имя файла сразу... ИМХО, мы же затем собираемся данные доставать/собирать селектом?

Следующий вывод - а зачем нам вообще Excel тогда - надо ТСа направить изучать VFP...
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37523708
Semennuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

Незнаю что такое ТС, но VFP - это я так понимаю Visual Fox Pro. В планах было заняться его обучением, но это явно не сейчас, я только начинаю осваивать эксель и боюсь будет каша. На работе и так SQL Navigator сбился с Visual Basic 6.0 в кучу. И то - и то толком и не понял. Кстати, до меня это всё делали с помощью VFP, но 2 года назад человек ушел с работы и коллеги больше года вытягивали вручную (после тренировки занимало около 20 минут). Меня же это всё замучало и я чуток автоматизировал до 5 минут (лень двигатель прогресса . Но и это же не предел.
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37523720
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semennuch,

ТС - это топикстартер...

Да вы не бойтесь, сделаем мы вам и на Экзеле ваш этап...
Я просто поразился тому, что у вас принцип странный: уже имея БД, данные сначала экспортируются и разбиваются _по файлам_, а затем снова собираются в _таблицы_, затем, опять же, в одну (к примеру) таблицу - и это является отчетом...
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37523960
Semennuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

Дело в том, что там могут быть одинаковые индексы (счета в бюджете), но с разными сумами справа (так как в разных бюджетах разные начисления).
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37523972
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semennuch , вы сами поняли, что сказали?
"Суммы справа" - сродни " тёплое и мягкое".
"разные начисления" - а КАК вычислить _их_ по имени файла? или по содержимому таблицы?

На самом деле , уже рисуется несколько вариантов реализации ваший "проблемы с ленью". Вот только не забывайте, что выбор _средства_ реализации стоИт выше, чем реализация алгоритма.

А вы пытаетесь (в принципе, правильно) делать собственный свод. И проблема импорта данных "из некоего формата" здесь самое малое.

Просим же - расскажите, в каком виде _вы_ имеете данные. Предположим, у вас имеются _только_ те самые файлы выгрузки. Расскажите, что вы должны получить в _итоге_ - только таблицу [F412].412? Расскажите, могут ли меняться форматы отчетности? И ВООБЩЕ, все исходные данные вы имеете в поступающих базах - зачем нужны разбивки по бюджетам в промежуточном файле? только из-за формы представления отчета? А если форма изменится?

Извините за вопросы, но первую свою реализацию "свода с импортом/сведением/экспортом и печатью отчетных форм" я, например, реализовал еще в 96-м году. И с тех пор многое позабыл уже...

А вы до сих пор не рассказываете полную постановку задачи...
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37524136
Semennuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мною сказанное, кажется (крещусь) мне вполне для меня понятным и я не вижу здесь другого алгоритма, как скопировал-вставил-свёл. Ну да ладно... Попробую ответить на вопросы.
в каком виде _вы_ имеете данные - Предположим, у вас имеются _только_ те самые файлы выгрузки (именно)
Расскажите, что вы должны получить в _итоге_ - только таблицу [F412].412? - таблицу F412 и в разрезе по кодам.
Расскажите, могут ли меняться форматы отчетности? - могут. Если бы не менялись, то до сих пор бы пользовались VFP.
И ВООБЩЕ, все исходные данные вы имеете в поступающих базах - зачем нужны разбивки по бюджетам в промежуточном файле? - это сделано для того, чтобы видеть суммы в разрезе кодировки. F412 - общие суммы, а по бюджетам видно какие именно суммы входят в платёжи. На счёт промежуточного файла, то я уже писАл, что позднее будет только один файл с вкладками: F412, DergBud, MiscBud, Oblbud.
только из-за формы представления отчета? - думаю, что ответил выше.
А если форма изменится? - обезательно изменится и уже (при мне) менялась. Часика два потратил на то, чтобы изменить свой свод. Неудобно, но в планах уже есть некоторые изменения, реализовав которые, мне понадобится минуток 5.
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37524494
Semennuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

Ну как там идут дела?
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37524902
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Файлы по размерам небольшие. Текстовой формат.
Можно просто одной строкой загрузить в массив, обработать и вывалить на нужный лист в нужное место.
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37526431
Semennuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex77755,

Так я так и хочу. Мне бы только знать как загрузить файлы с dbf в Excel (тоесть как это прописать в макросе). Дальше бы уже придумал что и как делать. На каком-то форуме нарыл, что нужно какие-то драйвера, но сам ни бум-бум в этом, поэтому и прошу помощи здесь на форуме.
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37526567
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще для открытия dbf из ексела не надо ничего.
Нажимаешь запись макроса открываешь и смотришь код:
Workbooks.Open Filename:= "D:-тут твой путь-.DBF"
ексел открывает их свободно.
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37526803
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Времени особого нет. Пока так:
1. Макрос запрашивает папку хранения файлов(если она постоянна - можно прописать жестко)
2. Выбирает фоайлы с расширением 001 в массив и сортирует по дате(дате создания файла, а не та что в имени - там нет времени, а "надо делать по пару раз в день). 3 первых файла в массиве будут искомыми для 001

Код: plaintext
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.
Dim i
Dim FL_n
Dim FL_d
Dim FL
Dim M()
Sub test()
ReDim M( 1 ,  0 )
Dim Folder As String
Dim FSO As Object
Dim S
Ns = Ns +  1 
  Application.ScreenUpdating = True
' ОЧИСТИТЬ
 Set workWb = ActiveWorkbook
  With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Выберите папку, файлы в которой нужно обработать"
    .ButtonName = "Выбрать"
    .AllowMultiSelect = True
    If .Show Then Folder = .SelectedItems( 1 ) Else Exit Sub
  End With
  Application.StatusBar = "Идёт обработка документов"
     Set FSO = CreateObject("Scripting.FileSystemObject")
   Search FSO.GetFolder(Folder)
   
   For i =  0  To  2 
   ''''' Здесь будет твой код открытия и обработки. Мне пока некогда
   Next i
End Sub

Sub Search(Fold As Object)
Dim J
Dim D
Dim R
Dim Tn, Tf
   For Each Fil In Fold.Files
    If StrComp(Right$(Fil.Name,  4 ), ".001", vbTextCompare) =  0  Then
        ReDim Preserve M( 1 , UBound(M,  2 ) +  1 )
        D = FileDateTime(Fil)
        Debug.Print Format(D, "mm")
        Debug.Print Format(D, "dd")
         J = CDbl(Year(D) & Format(D, "mm") & Format(D, "dd") _
         & Format(D, "hh") & Format(D, "nn") & Format(D, "ss"))
                  
            M( 0 , UBound(M,  2 )) = Fil
            M( 1 , UBound(M,  2 )) = J
                For R = UBound(M,  2 ) To  1  Step - 1 
                    If M( 1 , R) > M( 1 , R -  1 ) Then
                        Tf = M( 0 , R): Tn = M( 1 , R)
                        M( 0 , R) = M( 0 , R -  1 ): M( 1 , R) = M( 1 , R -  1 )
                        M( 0 , R -  1 ) = Tf:  M( 1 , R -  1 ) = Tn
                    End If
                Next R
    End If
  Next Fil
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37526890
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ОФФAndreTM, где же Вы? ...
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37528349
Semennuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex77755,

Примного благодарен. Думаю, дальше справлюсь.

AndreTM,

Если Вы что-то сделали, я обезательно буду рад посмотреть.
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37530353
Semennuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В принципе намутил вот так:
Код: plaintext
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.
 Private Sub Perenos()

'Перенос даних з 3-х файлів (Держ.бюд., Місц.бюд., Обл.Бюд.) папки I:\IN\BANK\F412\ до
'відповідних вкладок в Budjetu.xls

 
    Sheets("DerBud").Select
    Columns("B:H").Select
    Selection.ClearContents
    Sheets("MiscBud").Select
    Columns("B:H").Select
    Selection.ClearContents
    Sheets("OblBud").Select
    Columns("B:H").Select
    Selection.ClearContents
    Sheets("Zagalna").Select
    Range("I7").Select





iDate = Application.InputBox("Число", , "15")
iMounth = Application.InputBox("Місяць", , "11")
If iDate = "10" Then iDate = "A"      '
If iDate = "11" Then iDate = "B"      '
If iDate = "12" Then iDate = "C"      '
If iDate = "13" Then iDate = "D"      '
If iDate = "14" Then iDate = "E"      '      '
If iDate = "15" Then iDate = "F"      '      '
If iDate = "16" Then iDate = "G"      '      '
If iDate = "17" Then iDate = "H"      '      '
If iDate = "18" Then iDate = "I"      '
If iDate = "19" Then iDate = "J"      '
If iDate = "20" Then iDate = "K"      '      '      'Прописування дат
If iDate = "21" Then iDate = "L"      '
If iDate = "22" Then iDate = "M"      '
If iDate = "23" Then iDate = "N"      '      '
If iDate = "24" Then iDate = "O"      '      '
If iDate = "25" Then iDate = "P"      '      '
If iDate = "26" Then iDate = "Q"      '      '
If iDate = "27" Then iDate = "R"      '
If iDate = "28" Then iDate = "S"      '
If iDate = "29" Then iDate = "T"      '
If iDate = "30" Then iDate = "U"      '
If iDate = "31" Then iDate = "V"      '

If iMounth = "10" Then iMounth = "A"      '
If iMounth = "11" Then iMounth = "B"      '      'Прописування місяців
If iMounth = "12" Then iMounth = "C"      '



iDerBud = "FT010" & iMounth & iDate & "0.002"   'Файл Державного бюджету
iMiscBud = "FT110" & iMounth & iDate & "0.002"  'Файл Місцевого бюджету
iOblBud = "FT110" & iMounth & iDate & "0.001"   'Файл Обласного бюджету

iFullNameDB = "I:\IN\BANK\F412\" & iDerBud      'Повне ім"я Державного бюджету для перевірки наявності файлів


If iDerBud = Dir(iFullNameDB) Then

ChDir "I:\IN\BANK\F412"
    Workbooks.Open Filename:="I:\IN\BANK\F412\" & iDerBud ' Відкриття файлу з Державним бюджетом
    
    Columns("A:G").Copy                 '
    Windows("Budgetu.xls").Activate     '
    Sheets("DerBud").Select             '
    Columns("B:H").Select               '  'Копіювання даних бюджету у форму Ексель
    ActiveSheet.Paste                   '
    Windows(iDerBud).Activate           '
    ActiveWindow.Close                  '



ChDir "I:\IN\BANK\F412"
    Workbooks.Open Filename:="I:\IN\BANK\F412\" & iMiscBud ' Відкриття файлу з Місцевим бюджетом
    
    Columns("A:G").Copy                 '
    Windows("Budgetu.xls").Activate     '
    Sheets("MiscBud").Select             '
    Columns("B:H").Select               '  'Копіювання даних бюджету у форму Ексель
    ActiveSheet.Paste                   '
    Windows(iMiscBud).Activate           '
    ActiveWindow.Close                  '
ChDir "I:\IN\BANK\F412"

    Workbooks.Open Filename:="I:\IN\BANK\F412\" & iOblBud ' Відкриття файлу з Обласним бюджетом

    Columns("A:G").Copy                 '
    Windows("Budgetu.xls").Activate     '
    Sheets("OblBud").Select             '
    Columns("B:H").Select               '  'Копіювання даних бюджету у форму Ексель
    ActiveSheet.Paste                   '
    Windows(iOblBud).Activate           '
    ActiveWindow.Close
   Else
    MsgBox ("Файли із вказаною датою відсутні")
   
   
End If
Windows("Budgetu.xls").Activate
ActiveWorkbook.Save
End Sub

Это пока промежуточный результат. Со временем, подучусь, узнаю что-то новое и доделаю более хорошим кодом. А пока мне этого хватит. Буду рад, если у кого-то будут рекомендации как усовершенствовать или переделать.
Всем спасибо за внимание и за помощь...
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37530537
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Semennuch,
... как усовершенствовать или переделатьЯ бы делал запросами.
Код: plaintext
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.
' процедуру  вместе с функцией - в стандартный модуль книги Budjetu.xls
Option Base  0 

Sub fromDBF()
Const sImportDir$ = "I:\IN\BANK\F412"     ' папка с файлами для импорта
Const sTableDBF$ = "import00.dbf"          ' временный файл. обязательные условия:
                                           '  -длина имени не более 8-и символов
                                           '  -расширение 'dbf'

Dim i%
Dim sc$, sq$, sTable$
Dim rs As Object
Dim a, md As Date
Dim sErr$

Application.ScreenUpdating = False

' запрашиваем дату
' при ошибке преобразования введённого значения в дату - молча выходим
On Error Resume Next
  md = CDate(Application.InputBox("Введіть дату", , Day(Date) & "." & Month(Date)))
  If Err.Number Then Exit Sub
On Error GoTo  0 

' "заготовки" шаблонов имен файлов импорта + имена сответствующих листов
a = Array( _
"FT010", "0.002", "DergBud", _
"FT110", "0.001", "OblBud", _
"FT110", "0.002", "MiscBud")

' строка соединения для файлов dBase
sc = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sImportDir & ";" & _
"Extended Properties=dBASE IV;User ID=Admin;Password=;"

' смена текущего диска и каталога на каталог импорта
ChDrive Left$(sImportDir,  1 )
ChDir sImportDir

' обнуление строки сообщения
sErr = ""

' создание объекта Recordset (ADO)
Set rs = CreateObject("adodb.recordset")


For i =  0  To UBound(a) Step  3 
    ' имя файла импорта
    sTable = a(i) & DateToAZ_(md) & a(i +  1 )

    If sTable = Dir(sTable) Then ' no comment
      ' копирование файла импорта во временный файл с кошерным названием
      FileCopy sTable, sTableDBF
   
      sq = "select * from [" & sTableDBF & "]"   ' строка запроса
      rs.Open sq, sc,  0 ,  1 ,  1                     ' открытие набора записей
  
      ' очистка листа и выгрузка записей на лист
      With ThisWorkbook.Worksheets(a(i +  2 ))
        .Columns("B:H").ClearContents
        .Range("B1").CopyFromRecordset rs
      End With

      rs.Close      ' закрытие набора записей
  Else
  ' если файл импорта не найден - формируем строку сообщения
    sErr = sErr & vbCrLf & sTable
  End If

Next i

Set rs = Nothing ' обнуление ссылки на объект
  
  ' проверка результатов импорта, вывод ссответствующего сообщения
  If Len(sErr) >  0  Then
    sErr = "Файли не знайдено: " & sErr
    i = vbExclamation
  Else
    sErr = "імпорт даних за " & md & " закінчено"
    i = vbInformation
  End If
  MsgBox sErr, i, "ІМПОРТ БЮДЖЕТІВ"
  
  ' удаление временного файла
  On Error Resume Next
  Kill sTableDBF
    
Application.ScreenUpdating = True
End Sub

' вспомогательная функция - преобразование даты к "нужному" формату
' rem сам формат даже и не знаю как описать
' rem ничего кроме 'а-ля 1С-подобнЫй 36-ричный' в голову не приходит
Function DateToAZ_$(ByVal d As Date)
Dim s$, i%
    i = Day(d)
    If i <  10  Then s = CStr(i) Else s = CStr(Chr(i +  55 ))
    
    DateToAZ_ = Hex(Month(d)) & s
End Function
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37530613
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    Columns("B:H").Select
    Selection.ClearContents
    Sheets("MiscBud").Select
    Columns("B:H").Select
    Selection.ClearContents
    Sheets("OblBud").Select
    Columns("B:H").Select
    Selection.ClearContents
Это лучше делать без селектов. Типа:
Код: plaintext
 Sheets("MiscBud").Columns("B:H").ClearContents
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37534006
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрю, посмотрю...

Три дня без инета сидел - у нас в городе ремонт дорог, и связисты отключили кабель на нашей улочке
А у меня и дом, и офис - все на этом кабеле. Жесть была... На USB-модемах разоришься...
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37539456
Semennuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скукотища,

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

alex77755,

Я потом так и сделал и затраты на выполнение сократились до 7 секунд (всего уходило 40-42 секунды на моей машине).
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37539541
Фотография С0ВЕСТЬ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для автоматизации многих задач пользуюсь Automate Enterprise.
Можно глянуть.
...
Рейтинг: 0 / 0
Открытие или перенос данных из dbf файла в Excel макросом
    #37539547
Фотография С0ВЕСТЬ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С помощью этой программы, мне на малоавтоматизованном месте удалось много чего автоматизировать.
...
Рейтинг: 0 / 0
32 сообщений из 32, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Открытие или перенос данных из dbf файла в Excel макросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]