2014-08-27 2 views
1

У меня возникли проблемы с попыткой объединить различные файлы csv в один файл рабочей книги xslx в виде отдельных рабочих листов в MS Access. Многие из вещей, которые я искал, были для Excel, но я должен использовать это в Access вместо этого. Код, который я нахожу для excel vba, который я пытаюсь использовать в форме, обычно дает мне ошибки, большую часть времени «Метод объекта» _Global «не удался», даже когда я ссылаюсь на библиотеку excel, а также добавляю Excel. префикс для всех необходимых объектов, таких как рабочая книга и рабочий лист.Объединение нескольких csv в один xslx с помощью Access VBA

Edit:

Это пример кода, который я пытался использовать, что делает converstion из CSV в XSLX

Dim CSVfolder As String 
Dim XlsFolder As String 
Dim fname As String 
Dim wBook As Excel.Workbook 

CSVfolder = "C:\test\" 
XlsFolder = "C:\test\" 

fname = Dir(CSVfolder & "*.csv") 

Do While fname <> "" 
Set wBook = Excel.Workbooks.Open(CSVfolder & fname, Format:=6, Delimiter:=",") 
wBook.SaveAs XlsFolder & Replace(fname, ".csv", ""), FileFormatNum = 51 
wBook.Close False 
fname = Dir 
Loop 

В частности, ошибка попадает на линию SaveAs, на этот раз говоря Method " SaveAs 'объекта' _Workbook 'не удалось.

+1

Не могли бы вы объяснить, что вы здесь пытаетесь сделать? Замените (fname, ".csv", "").Мне кажется, что вы удаляете расширение файла, а затем пытаетесь сохранить, что не будет работать – Alex

+0

, чего именно вы пытаетесь достичь? 10 разных .csv в один .xlsx? или 10 различных .csv в таблицу Access? –

+0

Первый, объединив несколько в одну книгу excel – johnny93

ответ

1

Я думаю, вы хотите объединить несколько файлов csv в один главный файл Excel с помощью Access vba? если так, сначала сделайте план в голове, как этого добиться.

псевдо будет:

  1. поиск CSV файлов в папке
  2. открыть файл CSV и скопируйте лист/содержимое в мастер-файле
  3. сохранить мастер-файл
  4. Do выше шаги, пока не больше файлов осталось сделать

в коде будет:

Private Sub Merge() 
    'Create Excel application instance 
    Dim xlApp As Object 
    Set xlApp = CreateObject("Excel.Application") 

    'Setup workbooks 
    Dim wB As Excel.Workbook 
    Dim wBM As Excel.Workbook 

    'Csv files folder 
    Dim CSVfolder As String 
    CSVfolder = "C:\CsvFolder" 

    'Master Excel file path 
    Dim mF As String 
    mF = Application.CurrentProject.path & "\Master.xlsx" 'Where your master file is 

    'open the master file 
    Set wBM = xlApp.Workbooks.Open(mF) 

    'search and open the client files 
    Dim fname As String 
    fname = Dir(CSVfolder & "\*.csv") 
    Do While fname <> "" 
     'open the client file 
     Set wB = xlApp.Workbooks.Open(CSVfolder & "\" & fname) 
     'copy the first sheet from client file to master file 
     wB.Sheets(1).Copy After:=wBM.Sheets(wBM.Sheets.count) 
     'save master file 
     wBM.Save 
     'close client file 
     wB.Close False 
     'move to next client file 
     fname = Dir() 
    Loop 

    xlApp.visible = True 
    Set xlApp = Nothing 
End Sub 

Пожалуйста, обратите внимание на ошибки ловушки в вашем конечном коде. надеюсь, что это поможет.

+0

Спасибо, это работает – johnny93

0

Если вы хотите получить доступ в Access, это легко. Доступ имеет так называемые Связанные таблицы. Это таблицы, которые не находятся в Access, но остаются независимо от того, где они уже существуют. Доступ имеет ссылку на него, и вы видите, что выглядит и действует как таблица Access.
Команда сделать это:

DoCmd.TransferText acLinkDelim, , "tblTemp", "MyFile.csv", True 

Вы также хотите создать запрос (мы будем называть его qryMaster), который выглядит следующим образом

INSERT INTO tblMaster SELECT * FROM tblTemp 

Вот код

Sub ImportCSV() 
    Dim fname As String 
    Dim CSVfolder As String 
    CSVfolder = "C:\test\" 
    fname = Dir(CSVfolder & "*.csv") 

    Do While fname <> "" 
     DoCmd.TransferText acLinkDelim, , "temp", fname, True 
     CurrentDb.Execute ("qryMaster") 
    Loop 
    DoCmd.DeleteObject acTable, "tblTemp" 
End Sub 

Прежде чем вы запустите это, вам нужно будет создать tblmaster. Самый простой способ - вручную импортировать 1 файл.

+0

Спасибо за его редактирование. Я торопился и даже не заметил. –

+0

Добро пожаловать. – RubberDuck

0

Вы заменяете расширение файла ничем, когда вы должны заменить его правильным расширением файла. Я не смотрел, но я предполагаю, что 51 является файлом * .xlsx.

wBook.SaveAs XlsFolder & Replace(fname, ".csv", ".xlsx"), FileFormatNum = 51 

Кстати, вы действительно должны использовать именованную константу вместо магического номера.

Смежные вопросы