2012-08-28 14 views
13

मैं यह कैसे कर सकता हूं? असल में मैं चाहता हूं कि मेरी कई सीएसवी फाइलें एकाधिक वर्कशीट में आयात की जाएंगी लेकिन केवल एक ही कार्यपुस्तिका में। यहां मेरा वीबीए कोड है जिसे मैं लूप करना चाहता हूं। मैं पाश की जरूरत है सभी C:\test\एक वर्कबुक में एकाधिक वर्कशीट में एकाधिक सीएसवी आयात करना

Sub Macro() 
With ActiveSheet.QueryTables.Add(Connection:= _ 
    "TEXT;C:\test\test1.csv", Destination:=Range("$A$1")) 
    .Name = "test1" 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    .RefreshStyle = xlInsertDeleteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .RefreshPeriod = 0 
    .TextFilePromptOnRefresh = False 
    .TextFilePlatform = 437 
    .TextFileStartRow = 1 
    .TextFileParseType = xlDelimited 
    .TextFileTextQualifier = xlTextQualifierDoubleQuote 
    .TextFileConsecutiveDelimiter = False 
    .TextFileTabDelimiter = False 
    .TextFileSemicolonDelimiter = False 
    .TextFileCommaDelimiter = True 
    .TextFileSpaceDelimiter = False 
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1) 
    .TextFileTrailingMinusNumbers = True 
    .Refresh BackgroundQuery:=False 
End With 
Sheets.Add After:=Sheets(Sheets.Count) 
End Sub 

उत्तर

0

में सीएसवी क्वेरी करने के लिए मैं इस कोशिश नहीं की है, लेकिन मैं this के साथ जाना चाहते हैं:

Dim NumFound As Long 
With Application.FileSearch 
    .NewSearch 
    .LookIn = "C:\test\" 
    .FileName = "*.csv" 
    If .Execute() > 0 Then 
     For i = 1 To .FoundFiles.Count 
      With ActiveSheet.QueryTables.Add(Connection:= _ 
       "TEXT;" & "C:\test\" & (Application.FileSearch.FoundFiles(i)), Destination:=Range("$A$1")) 
       ... 
      End With 
      Sheets.Add After:=Sheets(Sheets.Count) 
     Next i 
    End If 
End With 
+0

'Application.FileSearch' कार्यालय 2007 में अस्वीकृत कर दिया गया था तो यह उपयुक्त हो unlikley है – brettdj

5

सावधान रहें, यह आप की तरह त्रुटियों हैंडल नहीं करता होगा यदि आपने csv आयात किया है तो एक डुप्लिकेट शीट नाम रखें।

इस प्रारंभिक बंधन का उपयोग करता है, ताकि आप में Tools..References Microsoft.Scripting.Runtimeतहत संदर्भित करने के लिए जरूरत VBE

Dim fs As New FileSystemObject 
Dim fo As Folder 
Dim fi As File 
Dim wb As Workbook 
Dim ws As Worksheet 
Dim sname As String 

Sub loadall() 
    Set wb = ThisWorkbook 

    Set fo = fs.GetFolder("C:\TEMP\") 

    For Each fi In fo.Files 
     If UCase(Right(fi.name, 4)) = ".CSV" Then 
      sname = Replace(Replace(fi.name, ":", "_"), "\", "-") 

      Set ws = wb.Sheets.Add 
      ws.name = sname 
      Call yourRecordedLoaderModified(fi.Path, ws) 
     End If 
    Next 
End Sub 

Sub yourRecordedLoaderModified(what As String, where As Worksheet) 
With ws.QueryTables.Add(Connection:= _ 
    "TEXT;" & what, Destination:=Range("$A$1")) 
    .name = "test1" 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    .RefreshStyle = xlInsertDeleteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .RefreshPeriod = 0 
    .TextFilePromptOnRefresh = False 
    .TextFilePlatform = 437 
    .TextFileStartRow = 1 
    .TextFileParseType = xlDelimited 
    .TextFileTextQualifier = xlTextQualifierDoubleQuote 
    .TextFileConsecutiveDelimiter = False 
    .TextFileTabDelimiter = False 
    .TextFileSemicolonDelimiter = False 
    .TextFileCommaDelimiter = True 
    .TextFileSpaceDelimiter = False 
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1) 
    .TextFileTrailingMinusNumbers = True 
    .Refresh BackgroundQuery:=False 
End With 
Sheets.Add After:=Sheets(Sheets.Count) 
End Sub 
+1

मुझे लगता है कि जब से फ़ाइल नाम अद्वितीय हैं यह ठीक हो जाएगा। – Dumont

3

आप Dir उपयोग कर सकते हैं को फ़िल्टर और बस csv फाइलों के साथ चलाने के लिए

Sub MacroLoop() 
Dim strFile As String 
Dim ws As Worksheet 
strFile = Dir("c:\test\*.csv") 
Do While strFile <> vbNullString 
Set ws = Sheets.Add 
With ws.QueryTables.Add(Connection:= _ 
    "TEXT;" & "C:\test\" & strFile, Destination:=Range("$A$1")) 
    .Name = strFile 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    .RefreshStyle = xlInsertDeleteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .RefreshPeriod = 0 
    .TextFilePromptOnRefresh = False 
    .TextFilePlatform = 437 
    .TextFileStartRow = 1 
    .TextFileParseType = xlDelimited 
    .TextFileTextQualifier = xlTextQualifierDoubleQuote 
    .TextFileConsecutiveDelimiter = False 
    .TextFileTabDelimiter = False 
    .TextFileSemicolonDelimiter = False 
    .TextFileCommaDelimiter = True 
    .TextFileSpaceDelimiter = False 
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1) 
    .TextFileTrailingMinusNumbers = True 
    .Refresh BackgroundQuery:=False 
End With 
strFile = Dir 
Loop 
End Sub 
+0

वर्कशीट नाम इस कोड के लिए CSV फ़ाइल के फ़ाइल नाम को प्रतिबिंबित नहीं करता है। मैं इसे कैसे हल करूं? – Dumont

+0

मैंने वर्कशीट के फ़ाइल नाम को पहले ही हल कर लिया है। मेरा नया मुद्दा है, मैं स्मृति त्रुटि से बाहर हो रहा हूँ। मैं लगभग 80 सीएसवी फाइलों का आयात कर रहा हूं। – Dumont

+0

@ डमोंट फ़ाइल नाम पर मुझे लगता है कि आप देखते हैं कि मैंने एक चर का उपयोग किया है। आपके मेमोरी एरो पर, यह कितने सीएसवी आयात कर रहा है? क्या आपने जिस कोड को स्वीकार किया है, वह एक ही आयात विधि का उपयोग करता है (लेकिन पहले प्रत्येक फ़ाइल प्रकार का परीक्षण करता है) – brettdj

10

This guy बिल्कुल इसे दबाया। बहुत संक्षिप्त कोड और 2010 में मेरे लिए पूरी तरह से काम करता है। सभी क्रेडिट उसके पास जाते हैं (जेरी Beaucaire)। मैंने इसे फोरम here से पाया।

Option Explicit 
Sub ImportCSVs() 
'Author: Jerry Beaucaire 
'Date:  8/16/2010 
'Summary: Import all CSV files from a folder into separate sheets 
'   named for the CSV filenames 

'Update: 2/8/2013 Macro replaces existing sheets if they already exist in master workbook 

Dim fPath As String 
Dim fCSV As String 
Dim wbCSV As Workbook 
Dim wbMST As Workbook 

Set wbMST = ThisWorkbook 
fPath = "C:\test\"     'path to CSV files, include the final \ 
Application.ScreenUpdating = False 'speed up macro 
Application.DisplayAlerts = False 'no error messages, take default answers 
fCSV = Dir(fPath & "*.csv")   'start the CSV file listing 

    On Error Resume Next 
    Do While Len(fCSV) > 0 
     Set wbCSV = Workbooks.Open(fPath & fCSV)     'open a CSV file 
     wbMST.Sheets(ActiveSheet.Name).Delete      'delete sheet if it exists 
     ActiveSheet.Move After:=wbMST.Sheets(wbMST.Sheets.Count) 'move new sheet into Mstr 
     Columns.Autofit    'clean up display 
     fCSV = Dir     'ready next CSV 
    Loop 

Application.ScreenUpdating = True 
Set wbCSV = Nothing 
End Sub 
+0

यह 2013 के साथ काम नहीं कर रहा है (जब तक कि मुझे कुछ याद नहीं आ रहा है।) मैंने इस स्क्रिप्ट को मैक्रो-सक्षम एक्सेल वर्कबुक (2013) में कॉपी किया और इसे चलाया (दो .csv के साथ निर्दिष्ट निर्देशिका में फ़ाइलें)। जब मैंने इसे चलाया, तो उसने दो नए उदाहरण एक्सेल (दो नई कार्यपुस्तिकाएं) को प्रत्येक में एक वर्कशीट के साथ खोला, और मेरी मूल कार्यपुस्तिका में कुछ भी नहीं। क्या स्क्रिप्ट को अद्यतन करने की आवश्यकता है? – kmote

+0

मुझे जांच करने का समय नहीं है, क्षमा करें। एक अद्यतन उत्तर देने के लिए कृपया स्वागत है। –

संबंधित मुद्दे