2012-04-02 2 views
0

자동으로 csv 파일을 가져 와서 내 통합 문서의 특정 워크 시트로 가져 오는 매크로를 실행하고 있습니다. 그러나 매크로가 자동으로 csv 파일을 가져 오는 대신 사용자가 가져올 파일을 선택하게하여 이름을 변경하면 디렉토리가 변경 될 수 있으므로 유연성을 높이고 싶습니다. 저는 VBA를 처음 사용하고 MsoFileDialogType과 GetOpenFilename을 더 잘 이해하려고 노력하고 있지만 개념/구현을 제 코드로 파악하는 데 어려움을 겪고 있습니다.통합 문서의 기존 시트로 가져올 CSV 파일을 선택하라는 매크로

궁극적으로 사용자가 통합 문서 프런트 엔드에서 단추를 클릭하면됩니다. 가져올 첫 번째 CSV 파일을 선택하라는 메시지가 표시됩니다. 이 CSV 파일은 통합 문서 temp1에서 미리 명명 된 워크 시트로 가져옵니다. 그러나 데이터 파일이 쌍을 이루기 때문에 사용자가 temp2로 첫 번째 파일 다음에 다음 CSV 파일을 선택할 수있게하려고합니다.

내가 현재 가지고 것은 :

Worksheets.Add 
ActiveSheet.Name = "temp1" 
With ActiveSheet.QueryTables.Add(Connection:= _ 
     "TEXT;MAC Directory path here" _ 
     , Destination:=Range("A1")) 
     .Name = "temp 1 03.02.12" 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .RefreshOnFileOpen = False 
     .BackgroundQuery = True 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .TextFilePromptOnRefresh = False 
     .TextFilePlatform = xlMacintosh 
     .TextFileStartRow = 1 
     .TextFileParseType = xlDelimited 
     .TextFileTextQualifier = xlTextQualifierDoubleQuote 
     .TextFileConsecutiveDelimiter = False 
     .TextFileTabDelimiter = False 
     .TextFileSemicolonDelimiter = False 
     .TextFileCommaDelimiter = True 
     .TextFileSpaceDelimiter = False 
     .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _ 
     1, 1, 1) 
     .Refresh BackgroundQuery:=False 
     .UseListObject = False 
End With 
ActiveSheet.Move after:=Worksheets(Worksheets.Count) 

감사합니다.

답변

3

아마도이 줄에 뭔가가 있습니다.

Sub GetCSVList() 
Dim dlgOpen As FileDialog 
Set dlgOpen = Application.FileDialog(msoFileDialogFilePicker) 
With dlgOpen 
    .AllowMultiSelect = True 
    ''Start in 
    .InitialFileName = "Z:\docs\" 
    .Show 
End With 

For Each fname In dlgOpen.SelectedItems 
    ImportCSV fname 
Next 
End Sub 

Sub ImportCSV(fname) 
Set ws = Worksheets.Add(after:=Worksheets(Worksheets.Count)) 
ws.Name = "temp" & Worksheets.Count + 1 

With ws.QueryTables.Add(_ 
     Connection:="TEXT;" & fname, _ 
     Destination:=Range("A1")) 
    .Name = "Temp" & Worksheets.Count + 1 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    .BackgroundQuery = True 
    .RefreshStyle = xlInsertDeleteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .TextFilePromptOnRefresh = False 
    .TextFilePlatform = xlMacintosh 
    .TextFileStartRow = 1 
    .TextFileParseType = xlDelimited 
    .TextFileTextQualifier = xlTextQualifierDoubleQuote 
    .TextFileConsecutiveDelimiter = False 
    .TextFileTabDelimiter = False 
    .TextFileSemicolonDelimiter = False 
    .TextFileCommaDelimiter = True 
    .TextFileSpaceDelimiter = False 
    .Refresh BackgroundQuery:=False 
    '.UseListObject = False 
End With 
End Sub 
+0

안녕하세요 Remou, 나는 코드를 구현하려고하지만,이 오류가 발생했습니다 : "사용자 정의 형식이 정의되지 않았습니다"이 라인을 강조 -> 희미한 dlgOpen의 FileDialog – VMO

+0

으로의 Excel 버전을 사용하고 있습니까? Microsoft Office x.x Object Library에 대한 참조를 추가 할 수 있습니까? – Fionnuala

+0

안녕하세요 Remou, 저는 Mac Office 2011을 사용하고 있습니다. Tools -> References를 방문하여 Visual Basic for Applications, Microsoft Excel 14.0 Object Library 및 Microsoft Office 14.0 Object Library를 확인했습니다. – VMO

관련 문제