2016-08-03 1 views
-1

Мне нужно импортировать несколько таблиц Excel в таблицу Access. В настоящее время электронные таблицы выглядит следующим образом:Выполнить макрос Excel, затем импортировать таблицу доступа в несколько файлов Excel в папке

ID | Year | Sales | Commissions 
-- | ---- | ----- | ----------- 
1 | 2016 | 1,000 | 100 
2 | 2016 | 2,000 | 200 
3 | 2016 | 3,000 | 300 
4 | 2016 | 1,000 | 300 

Они должны выглядеть следующим образом:

ID | Name | Year | Month | Sales | Commissions | Discount | Net Sales | % 
-- | ---- | ---- | ----- | ----- | ----------- | -------- | --------- | - 
1 | John | 2016 | 2 | 1,000 | 100  |   |   | 
2 | Mary | 2016 | 2 | 2,000 | 200  |   |   | 
3 | Jake | 2016 | 2 | 3,000 | 300  |   |   | 
4 | Bob | 2016 | 2 | 1,000 | 300  |   |   | 

Последние три колонки будут пустыми. Имена («John, Mary ...») будут использовать поиск по идентификатору на другой таблице, но это можно сделать позже в Access. 3 строки также должны быть удалены сверху. Месяц («2») будет находиться в пути к файлу Excel. Он будет единственным номером в имени файла. I.e., «2» за февраль. Все электронные таблицы будут находиться в одной папке. Каждая книга Excel будет иметь названия электронных таблиц «DataSheet». Это электронная таблица, которая будет импортирована из каждой книги.

Могу ли я написать сценарий в Access, чтобы сделать все это?

До сих пор я получил это для макроса Excel:

Sub Macro2() 
    Rows("1:3").Select 
    Range("A3").Activate 
    Selection.Delete Shift:=xlUp 
    Columns("B:B").Select 
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 
    Range("B1").Select 
    ActiveCell.FormulaR1C1 = "Name" 
    Columns("D:D").Select 
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 
    Range("D1").Select 
    ActiveCell.FormulaR1C1 = "Month" 
    Range("G1").Select 
    ActiveCell.FormulaR1C1 = "Discount" 
    Range("H1").Select 
    ActiveCell.FormulaR1C1 = "Net Sales" 
    Range("I1").Select 
    ActiveCell.FormulaR1C1 = " %" 
    Range("G2").Select 
End Sub 

Here's something, как это будет импортировать несколько файлов:

Dim strPathFile As String, strFile As String, strPath As String 
    Dim strTable As String 
    Dim blnHasFieldNames As Boolean 
    blnHasFieldNames = False 
    strTable = "tablename" 
    strFile = Dir(strPath & "*.xls") 
    Do While Len(strFile) > 0 
      strPathFile = strPath & strFile 
      DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ 
       strTable, strPathFile, blnHasFieldNames 
      strFile = Dir() 
    Loop 

ответ

0

Это выглядит несколько простых vlookups ко мне. После того, как вы выберете excel-материал, и вы готовы импортировать несколько файлов в таблицу, просто запустите сценарий, подобный этому.

Sub ImportAllFilesIntoOneTable 

     Dim strPathFile As String, strFile As String, strPath As String 
     Dim strTable As String 
     Dim blnHasFieldNames As Boolean 

     ' Change this next line to True if the first row in EXCEL worksheet 
     ' has field names 
     blnHasFieldNames = False 

     ' Replace C:\Documents\ with the real path to the folder that 
     ' contains the EXCEL files 
     strPath = "C:\Documents\" 

     ' Replace tablename with the real name of the table into which 
     ' the data are to be imported 
     strTable = "tablename" 

     strFile = Dir(strPath & "*.xls") 
     Do While Len(strFile) > 0 
       strPathFile = strPath & strFile 
       DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ 
        strTable, strPathFile, blnHasFieldNames 

     ' Uncomment out the next code step if you want to delete the 
     ' EXCEL file after it's been imported 
     '  Kill strPathFile 

       strFile = Dir() 
     Loop 

End Sub