Excel to dbf vba

VBA macros XLS To DBF

по мотивам https://www.sql.ru/forum/589512-1/excel-dbf

разработчик Basile

Fork содержит возможность перекодировки

Подключение надстройки XlsToDBF.

В EXCEL 2007 (а также EXCEL 2016)

  1. Кнопка «Office»
  2. Кнопка «Параметры Excel»
  3. Слева, «Надстройки»
  4. Внизу «Управление: Надстройки Excel», кнопка «Перейти»
  5. В окне «Надстройки»: кнопка «Обзор…»
  6. Найти сохранённый ранее файл XlsToDBF.xla и нажать «OK»
  7. В окне «Надстройки» в списке доступных надстроек должна появиться строка «XLS -> DBF» с установленным флажком проверки, нажать «OK»

Запуск макроса для сохранения данных в DBF-формате

  1. Выделить ячейку относящуюся к экспортируемой областии (формат области должен отвечать некоторым требованиям, см. ниже «Формат экспортируемой области»)
  2. Вызвать диалог «Макрос» (ALT-F8)
  3. В поле «Имя макроса:» ввести XlsToDBF и нажать «Выполнить»
  4. Файл сохранится в той же папке, где расположена открытая книга под именем, заданным в первой ячейки экспортируемой области. Если книга только создана и ещё не сохранялась, DBF-файл сохраниться в папку по умолчанию (скорее всего, в «Мои документы»). Для полной уверенности, перед экспортом имеет смысл сохранить книгу.

Формат экспортируемой области

Программа не в ключает в себя ни каких диалогов настройки экспорта. Поэтому всю информацию необходимо сообщить непосредственно в заголовке области экспорта.

  1. Первая ячейка первой строки области содержит имя выходного DBF-файла (например, TEST.DBF), кодировку DBF (напрмер Windows-1251), кодировку EXCEL (опционатьно, напрмер cp866)
  2. Вторая и третья строки содержат описания и названия полей соответственно
  3. Начиная с 4-ой строки и до конца области располагаются данные

Каждое поле ОБЯЗАТЕЛЬНО должно быть описано. Описания полей соответствуют стандарту FoxPro:
Cnnn — строковый тип (например, C100)
Nnn или Nnn.n — числовой тип (например, N10 или N10.2)
D — тип даты
L — логический тип

Пример:
Колонка 1: Колонка 2: Колонка 3:

Строка 1: Test.dbf Windows-1251 cp866
Строка 2: N10 С20 N8.3
Строка 3: ID Name Netto
Строка 4: 10000 Огурцы 256.5
Строка 5: 20000 Помидоры 113

Логический тип (L) может быть задан, например 0 — False, 1 — True, пустое поле трактуется, как False. Также в русской версии EXCEL можно использовать «ИСТИНА» и «ЛОЖЬ».

В файле SIMPLE.XLS содержится таблица, отвечающая требованиям.

ВНИМАНИЕ! Макрос XlsToDBF не выполняет, практически, ни каких проверок на ошибки со стороны пользователя.

VBA macros XLS To DBF

по мотивам https://www.sql.ru/forum/589512-1/excel-dbf

разработчик Basile

Fork содержит возможность перекодировки

Подключение надстройки XlsToDBF.

В EXCEL 2007 (а также EXCEL 2016)

  1. Кнопка «Office»
  2. Кнопка «Параметры Excel»
  3. Слева, «Надстройки»
  4. Внизу «Управление: Надстройки Excel», кнопка «Перейти»
  5. В окне «Надстройки»: кнопка «Обзор…»
  6. Найти сохранённый ранее файл XlsToDBF.xla и нажать «OK»
  7. В окне «Надстройки» в списке доступных надстроек должна появиться строка «XLS -> DBF» с установленным флажком проверки, нажать «OK»

Запуск макроса для сохранения данных в DBF-формате

  1. Выделить ячейку относящуюся к экспортируемой областии (формат области должен отвечать некоторым требованиям, см. ниже «Формат экспортируемой области»)
  2. Вызвать диалог «Макрос» (ALT-F8)
  3. В поле «Имя макроса:» ввести XlsToDBF и нажать «Выполнить»
  4. Файл сохранится в той же папке, где расположена открытая книга под именем, заданным в первой ячейки экспортируемой области. Если книга только создана и ещё не сохранялась, DBF-файл сохраниться в папку по умолчанию (скорее всего, в «Мои документы»). Для полной уверенности, перед экспортом имеет смысл сохранить книгу.

Формат экспортируемой области

Программа не в ключает в себя ни каких диалогов настройки экспорта. Поэтому всю информацию необходимо сообщить непосредственно в заголовке области экспорта.

  1. Первая ячейка первой строки области содержит имя выходного DBF-файла (например, TEST.DBF), кодировку DBF (напрмер Windows-1251), кодировку EXCEL (опционатьно, напрмер cp866)
  2. Вторая и третья строки содержат описания и названия полей соответственно
  3. Начиная с 4-ой строки и до конца области располагаются данные

Каждое поле ОБЯЗАТЕЛЬНО должно быть описано. Описания полей соответствуют стандарту FoxPro:
Cnnn — строковый тип (например, C100)
Nnn или Nnn.n — числовой тип (например, N10 или N10.2)
D — тип даты
L — логический тип

Пример:
Колонка 1: Колонка 2: Колонка 3:

Строка 1: Test.dbf Windows-1251 cp866
Строка 2: N10 С20 N8.3
Строка 3: ID Name Netto
Строка 4: 10000 Огурцы 256.5
Строка 5: 20000 Помидоры 113

Логический тип (L) может быть задан, например 0 — False, 1 — True, пустое поле трактуется, как False. Также в русской версии EXCEL можно использовать «ИСТИНА» и «ЛОЖЬ».

В файле SIMPLE.XLS содержится таблица, отвечающая требованиям.

ВНИМАНИЕ! Макрос XlsToDBF не выполняет, практически, ни каких проверок на ошибки со стороны пользователя.

Доброе время суток
В принципе, можно и «движком» Access воспользоваться. ADO Ext конечно удобнее, но можно же и обычным DDL пользоваться ;)

Код
Public Sub CreateDBF()
    Dim pConn As Object, pRSet As Object
    Set pConn = CreateObject("ADODB.Connection")
    pConn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Mode=16;Data Source=d:Path;Extended Properties=dBASE IV;User ID=Admin;"
    pConn.Execute "Create Table my_dbf (IdxField Integer, TextField Char (64), DateField Date, NumField Numeric (16,3))"
    'так удобнее манипулировать записями
    Set pRSet = CreateObject("ADODB.Recordset")
    pRSet.Open "Select * From my_dbf", pConn, 3, 2
    pRSet.AddNew
    pRSet("IdxField").Value = 123: pRSet("TextField").Value = "через Recorset"
    pRSet("DateField").Value = Now: pRSet("NumField").Value = 1000# * Math.Sin(1.1)
    pRSet.Update
    'но можно и просто одной строкой
    pConn.Execute "Insert Into my_dbf (IdxField,TextField,NumField) Values (125,'обычный Insert',3567.12)"
    pRSet.Close: pConn.Close
End Sub

Успехов.

  • #1

Hi All,

I am new to VBA. I want to create a VBA macro to copy three worksheets of the same workbook(closed workbook) except the first row and paste into 3 different .dbf files. Is there any way to do it. I have create a rough code. Any suggestions would be helpful.

Private Sub CommandButton1_Click()

Dim StrPath1 As String
Dim StrPath2 As String
Dim StrPath3 As String
Dim StrPath4 As String
Dim Tags As Workbook
Dim sheet1 As Variant
Dim sheet2 As Variant
Dim sheet3 As Variant
Dim dbConn1 As Object
Dim dbConn2 As Object
Dim dbConn3 As Object

‘Define Paths and filenames
StrPath1 = «C:Tags.xlsx»
StrPath2 = «C:sheet1.dbf»
StrPath3 = «C:sheet2.dbf»
StrPath4 = «C:sheet3.dbf»

‘Create Connection with the 3 DBFs
Set dbConn1 = CreateObject(«ADODB.Connection»)
dbConn1.Open «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=» & StrPath2 & «;Extended Properties=dBASE IV;»

Set dbConn2 = CreateObject(«ADODB.Connection»)
dbConn2.Open «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=» & StrPath3 & «;Extended Properties=dBASE IV;»

Set dbConn3 = CreateObject(«ADODB.Connection»)
dbConn3.Open «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=» & StrPath4 & «;Extended Properties=dBASE IV;»

‘Disable screen flickering.
Application.ScreenUpdating = False

‘Open files
Set Workbook1 = Workbooks.Open(StrPath1)

‘Clear Previous contents
sheet1.Worksheets(«variable»).Range(«A2:T2»).End(xlDown).Clear
sheet2.Worksheets(«digalm»).Range(«A2:U2»).End(xlDown).Clear
sheet3.Worksheets(«trend»).Range(«A2:W2»).End(xlDown).Clear

Tags.Worksheets(«Sheet1»).Range(«A2»).End(xlDown).End(xlToRight).Copy sheet1.Worksheets(«Sheet1»).Range(«A2»)
Tags.Worksheets(«Sheet2»).Range(«A2»).End(xlDown).End(xlToRight).Copy sheet2.Worksheets(«Sheet1»).Range(«A2»)
Tags.Worksheets(«Sheet3»).Range(«A2»).End(xlDown).End(xlToRight).Copy sheet3.Worksheets(«Sheet1»).Range(«A2»)

End Sub

      '::: Этап 1 - Определяем, откуда мы запущены
      homeDir=Wscript.ScriptFullName   '::: Это - полный путь нашего файла         
      k=Instrrev(homeDir,"")          '::: Ищем "" с конца
      homeDir=left(homeDir,(k-1))      '::: Это - чистое имя директории 
      '::: Этап 2 - Создаем ADO-соединение и пустой набор записей
      Set Conn = CreateObject("ADODB.Connection")
      Set RS = CreateObject("ADODB.Recordset")
      DSNName = "DRIVER=Microsoft dBase Driver (*.dbf);DBQ="   
      DSNName = DSNName & HomeDir 
      '::: Этап 3 - Открываем соединение  
      Conn.Open DSNName
      '::: Этап 4 - готовим SQL-оператор для создания таблицы
      SQL="create table Testtable (N1 Float, N2 Float)"
      '::: Этап 5 - выполняем его
      RS.Open sql,Conn,3,3
      '::: Этап 6 - Добавляем в таблицу 100 записей
      For i=1 to 100
          SQL="insert into testtable values (" & cstr(i) & "," & Cstr(2*i-1) & ")"
          RS.Open sql,Conn,3,3
      Next
      '::: Этап 7 - суммируем...      
      SQL="Select sum(N1),sum(N2) from Testtable"
      RS.Open SQL,Conn,3,3
      SS1=RS(0)      
      SS2=RS(1)
      MsgBox SS1
      MsgBox SS2 
      Rs.Close
      SQL="Drop table Testtable"
      RS.Open sql,Conn,3,3
      MsgBox "Таблица удалена!"

Понравилась статья? Поделить с друзьями:
  • Excel to dbf online
  • Excel to csv с изображениями
  • Excel to csv двойные кавычки
  • Excel to csv without excel
  • Excel to csv with separator