2012-04-02 5 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を使用しています。私は、ツール - >参照の下に行って、Visual Basic for Applications、Microsoft Excel 14.0 Object Library、Microsoft Office 14.0 Object Libraryがチェックされていることを確認しました。 – VMO

関連する問題