2017-10-06 2 views
0

私はCSVファイルを「チケット」と呼ばれる新しいシートとしてインポートする以下のマクロを持っています。このファイルが存在すると、ランタイムエラーが発生します。すでに存在する場合は、既存のファイルを上書きする方法はありますか?既存のシートを置き換えるワークブックにCSVをロードするにはどうすればよいですか?

Sub GetCSVList() 
Dim dlgOpen As FileDialog 
Set dlgOpen = Application.FileDialog(msoFileDialogFilePicker) 
With dlgOpen 
    .AllowMultiSelect = False 
    ''Start in 
    .InitialFileName = "C:\test" 
    .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 = "Tickets" 


With ws.QueryTables.Add(_ 
     Connection:="TEXT;" & fname, _ 
     Destination:=Range("A1")) 
    .Name = "Test" & 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 = 65001 
    .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

ファイルを保存していないので、上書きすることはありません。どこでエラーが発生していますか?同じ名前ですでに開いている別のファイルのためにファイルを開くときは?または、ワークシートの名前を変更しようとしているときに、すでにTicketsというワークシートがありますか? – Michael

+0

マクロを開くと、CSV-Dataの中に「Tickets」という名前の新しいワークシートが作成されます。 CSVファイルの更新を取得すると、再びマクロを開き、「ランタイムエラー '1004:この名前は既に使用されています。別のものを選択してください」と表示されます。だから私は既存のワークシートまたはその中のデータを上書きし、新しいデータを挿入したいと思います。 – Andreas

答えて

0

最後に新しいワークシートを追加した後、「チケット」に新しいワークシートの名前を変更する前に、「チケット」という名前の既存のワークシートを削除しよう:

Application.DisplayAlerts = False 
On Error Resume Next 
Worksheets("Tickets").Delete 
On Error GoTo 0 
Application.DisplayAlerts = True 

オンError Resume Nextは、「Tickets」という名前の既存のワークシートがない場合に発生するエラーを無視します。これは少し怠惰ですが、それはWorksheet.Deleteメソッドから発生する唯一のエラーで、離れてしまうことができます。

プログラミングで他の種類のエラーを無視するだけで、 "On Error Resume Next"を表示しないでください!

+0

は魅力のように動作します、ありがとうございます! – Andreas

+0

別のこと:CSVソースファイルのalswaysは同じディレクトリに同じ名前を持っています。このマクロを編集して、CSVを選択する必要があるポップアップではなく、特定のフォルダにCSVファイルを自動的にロードする方法を知っていますか?ありがとうございました!! – Andreas

+0

ImportCSV(filename)を直接呼び出して、ファイル名を文字列として指定してください。例えば。 ImportCSV( "C:\ test.csv") – Michael

関連する問題