Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/35: Рейтинг темы: голосов - 35, средняя оценка - 4.54
10 / 9 / 1
Регистрация: 12.06.2014
Сообщений: 255
1

Создание dbf с добавлением данных из Excel

11.11.2014, 21:17. Показов 7254. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!
Может и не сюда надо было писать но уже всю голову сломал как сделать. До сих пор не научусь с именами ничего делать только учить активно начал.и то на примерах..

Ситуация такая:
1. Есть Excel-файл со столбцом который содержит уникальный код клиента (пример-список кодов.xls)
2. Есть Excel-файл с 2 столбцами (пример-цены.xls), как вариант он может быть и dbf

Задача:
1.создать .dbf с именем pmp_IDCLIENT.dbf согласно "список кодов.xls"
2.внутри pmp_IDCLIENT.dbf создать 3 столбца и во 2 и 3 тупо скопировать данные из "цены.xls"
3.в первом столбце до конца протянуть код IDCLIENT согласно список кодов.xls
4. результат должен быть такой как pmp_10738640.dbf
4. save и close

это вообще реально? А то больше 850 файлов каждый понедельник вот так делать

Сразу говорю, если что то несложное и научился делать поглядывая на примеры (перебор по маске, в папках и прочей ерунды), то у меня затык как всегда с именем (больное мое место)
Работаю на Excel 2007, Excel 2003 и только сегодня уломал руководителя мне поставить Access 2003 (в нем вообще новорожденный младенец) .
VBA только начал изучать, так как понял что на работе очень сильно пригодится
Вложения
Тип файла: rar Примеры.rar (23.4 Кб, 33 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.11.2014, 21:17
Ответы с готовыми решениями:

Создание XML-документа из имеющегося шаблона с добавлением вводимых данных
Добрый день! подскажите как будет выглядеть скрипт: запускаю, ввожу параметры в диалоговом окне...

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

Создание бланка заявки в Excel на основании данных из другого файла Excel
Всем доброго времени суток! Есть у меня такая задумка в Excel, может быть кто-нибудь сталкивался с...

Копирование данных из одной таблицы dbf в шаблон dbf
Есть источник файл med.dbf с данными, необходимо перенести часть данных в файл-шаблон med.dbf....

6
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
13.11.2014, 11:12 2
Для Access вроде база mdb а не dbf?
А в dbf ексел сам умеет сохранять.
Как вариант выполнить один раз ручками с записью макроса и подредактировать
0
1261 / 147 / 32
Регистрация: 11.02.2011
Сообщений: 418
13.11.2014, 11:20 3
Цитата Сообщение от Alex77755 Посмотреть сообщение
Для Access вроде база mdb а не dbf?
А в dbf ексел сам умеет сохранять.
Как вариант выполнить один раз ручками с записью макроса и подредактировать
Чуть поправлю. 2003-й эксель умеет. 2007-й и последующие нет. Только при использовании сторонних надстроек.
0
168 / 6 / 3
Регистрация: 05.07.2013
Сообщений: 62
14.11.2014, 09:05 4
Лучший ответ Сообщение было отмечено Авдей как решение

Решение

Я для таких целей ставил еще портативный excel 2003 который также умеет работать с макросами, да еще и сохранять их в формате DBF, пробовал с надстройкой в 2010 както она криво работает...
В общем попробую какой то макрос написать, а портативный excel можно загрузить с торента, ну или позже залью и в личку скину если получится какой то макрос

Добавлено через 1 час 46 минут
В общем я сегодня не успел доделать, если никто раньше не ответит я завтра выложу что нибудь готовое, если я правильно понял задание и каждому ИД присваивать одну и ту же цену итд

Добавлено через 15 часов 57 минут
Получилось такое
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
Sub dbfmac()
tempname = ActiveWorkbook.Name
Cells(1, 1).Value = "IDCLIENT"
FilePath = ThisWorkbook.Path
 
Workbooks.Open (FilePath & "\цены.xls")
Workbooks("цены.xls").Activate
llastrow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
Range(Cells(1, 1), Cells(llastrow, 2)).Copy Workbooks(tempname).Worksheets(1).Cells(1, 2)
 
Cells(1, 1).Value = "IDCLIENT"
Workbooks.Open (FilePath & "\Список кодов.xls")
llastrow2 = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
Workbooks(tempname).Activate
    For i = 2 To llastrow2
        Workbooks("Список кодов.xls").Worksheets(1).Cells(i, 1).Copy Workbooks(tempname).Worksheets(1).Range(Cells(2, 1), Cells(llastrow2, 1))
ChDir FilePath
     Application.DisplayAlerts = False
     Cells(1, 1).Select
        ActiveWorkbook.SaveAs Filename:="pmp_" & Workbooks("Список кодов.xls").Worksheets(1).Cells(i, 1) & ".dbf", _
        FileFormat:=xlDBF4, CreateBackup:=False
        tempname = ActiveWorkbook.Name
    Next i
End Sub
файл Список кодов.xls и цены.xls должны быть с файлом в одной папке, из которого запускают макрос макрос.xlsm (тк офис 2003 у меня портативный чтото мне запомнилось, что из personal макросов какие то проблемы были(может ошибаюсь).

Туда же он сохранит в формате дбф файлы pmp_IDCLIENT.dbf

Отправил в личку ссылку на загрузку портативного офиса(если у вас установлена 2007+ версия)
Запускаете EXCEL.exe перетаскиваете файл с макросом на окно экселя(лучше другие версии закрыть, а то у портативного бывают свои причуды ) и запускаете.

Добавлено через 9 минут
Да, и если надо, чтобы он автоматом потом закрыл все(цены, список ид,файл с макросом), добавьте в конец Application.Quit перед exit sub
1
10 / 9 / 1
Регистрация: 12.06.2014
Сообщений: 255
14.11.2014, 21:27  [ТС] 5
Уфф..Счас буду устанавливать 2003, а то портабельная не запускается.У меня офис 2010, а винда 8.1

Добавлено через 1 час 43 минуты
Ну практически сразу то что надо в той же папке создал еще 1 файл, запуск макроса, все делает почти идеально!
Но почему то в файле "Цены.xls" зачем то в ячейке А1 тоже меняет название на IDCLIENT и в самих dbf-файлах в столбце 2 все значения только в последнем dbf из списка кодов выводит..во всех остальных только B2 заполняет и все, остальное пусто. столбцы А и С то что надо получились

Добавлено через 32 минуты
С добавлением имени в цены.xls разобрался А вот почему во всех файлах не заполняется столбец B, (кроме B2) уже мозгов не хватает
0
168 / 6 / 3
Регистрация: 05.07.2013
Сообщений: 62
17.11.2014, 13:17 6
Я немного запутался, что не так работает
Файл цены для каждого свой(к примеру цены_IDCLIENT1 цены_IDCLIENT2 etc)? Или же один для всех(с одинаковым содержанием для всех IDCLIENT)?

у меня в итоге формирует столько файлов dbf сколько IDCLIENT в файле список кодов
и всем копирует одно и то же содержание из файла цены
1
10 / 9 / 1
Регистрация: 12.06.2014
Сообщений: 255
17.11.2014, 21:11  [ТС] 7
разобрался! случайно правда когда справку вместо ОТМЕНЫ нажал особенность dbf формата, сохраняет только видимые значения, если ячейка сужена и то что внутри отображается как ####, то при сохранении вместо #### будет просто напросто пусто!
проблема решилась добавлением
Visual Basic
1
2
Cells.Select
  Cells.EntireColumn.AutoFit          'форматируем ячейки (особенность dbf, не будет сохранять если не будет все видно)
и в 16 строке в конце вместо llastrow2 поставил llastrow просто, а то в dbf подтягивал столько значения IDCLIENT сколько было в список кодов.xls

Результат: итоговый рабочий код
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
Sub dbf()
tempname = ActiveWorkbook.Name  'определяем имя активной книги
FilePath = ActiveWorkbook.Path  'определяем путь до папки активной книги
 
Workbooks.Open (FilePath & "\цены.xls")
Workbooks("цены.xls").Activate
llastrow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1                'определяем последнюю заполненую строчку
Range(Cells(1, 1), Cells(llastrow, 2)).Copy Workbooks(tempname).Worksheets(1).Cells(1, 2)  'вставляем диапазон столбцов
 
Workbooks.Open (FilePath & "\Список кодов.xls")
llastrow2 = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1        'определяем последнюю заполненую строчку списка
Workbooks(tempname).Activate
    For i = 2 To llastrow2
        Workbooks("Список кодов.xls").Worksheets(1).Cells(i, 1).Copy Workbooks(tempname).Worksheets(1).Range(Cells(2, 1), Cells(llastrow, 1))
        Cells.Select
        Cells.EntireColumn.AutoFit          'форматируем ячейки (особенность dbf, не будет сохранять если не будет все видно)
    ChDir FilePath
    Application.DisplayAlerts = False
Cells(1, 1).Value = "IDCLIENT"
        Cells(1, 1).Select
 
'сохраняем в dbf с нужным именем
 
        ActiveWorkbook.SaveAs Filename:= _
        "pmp_" & Workbooks("Список кодов.xls").Worksheets(1).Cells(i, 1) & ".dbf", FileFormat:= _
        xlDBF4, CreateBackup:=False
        ActiveWorkbook.Save
        tempname = ActiveWorkbook.Name
    Next i
Application.Quit
 
End Sub
результат тот что нужен.Вместо 4 часов работы в понедельник, 2 минуты на все

Добавлено через 1 минуту
voidex, тебе огромное спасибо! Реально выручил, и главное научил..я на этом примере наконец таки разобрался как FOR работает теперь еще что нить придумывать на работе буду..а потом все что есть надо будет в едино сводить и в Acces в форму на кнопки сажать Еще раз спасибо большое
0
17.11.2014, 21:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2014, 21:11
Помогаю со студенческими работами здесь

Большая работа с Excel (передача в него данных, построение графиков, дозапись, создание нового файла Excel)
Всем участниками большой привет. Снова нужна помощь. Что имеем: -Имеем форму во вложении. на ней...

Как переименовать файл в папке в имя папки с добавлением расширения ".dbf"?
Доброго времени суток! :) Уважаемые форумчане. Помогите пожалуйста переименовать файлы: Есть...

Как подключить базу данных созданную в DBF Navigator с форматом ".dbf" к приложению на Lazarus?
1) Обязательно ли эти БД хранить ТОЛЬКО на диске C 2) Дайте полный алгоритм подключения их к...

Необходимо произвести "Update" одинаковых данных в 2.dbf из 1.dbf
зарание извеняюсь за корявость темы? вопрос такой. Есть два dbf файла структура баз полностью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru