2015-10-06 2 views
0

У меня есть макрос, который импортирует csv-файлы в листы с тем же именем в книге. Все файлы csv заканчиваются на «.csv», за исключением одного файла, который заканчивается на «.CSV». Макрос импортирует файлы csv, заканчивающиеся на «.csv». Но когда он встречает csv-файл с «.CSV», он добавляет новый лист. Я думаю, что это вопрос дезактивации чувствительности к делу (и я попытался), но я не уверен. Вот код:Ошибка при импорте csv-файла

Private Sub importOrUpdate(opr$) 
    Dim csvFile, csvArr 
    Dim wsCSV As Worksheet, wsImport As Worksheet 
    Dim importFolder$, cnt%, i% 
    Dim csvName$, idx%, arr, shName$ 
    Dim processed$ 

U.Start 
processed = "|" 

csvArr = selectFiles 

For i = 0 To UBound(csvArr) 
    'Workbooks.Open csvArr(i), False, True 
    Call importToTempSheet(csvArr(i)) 
    Set wsCSV = Tempsheet 

    idx = InStrRev(csvArr(i), "\") + 1 
    csvName = Mid(csvArr(i), idx) 
    csvName = Replace(csvName, ".csv", "") 
    arr = Split(csvName, "_") 

    If UBound(arr) = 2 Then 
     shName = arr(1) & "_" & arr(2) 
    Else 
     shName = csvName 
    End If 

    On Error Resume Next 
    Set wsImport = ThisWorkbook.Sheets(shName) 
    On Error GoTo 0 

    If wsImport Is Nothing Then 
     ThisWorkbook.Sheets.Add before:=Sheet14 
     Set wsImport = ActiveSheet 
     wsImport.Tab.Color = 5296274 
     wsImport.Name = shName 
     Call import(wsCSV, wsImport) 
    ElseIf opr = "Update" Then 
     Call update(wsCSV, wsImport) 
    ElseIf InStr(1, processed, "|" & shName & "|", vbTextCompare) > 0 Then 
     Call update(wsCSV, wsImport) 
    Else 
     Call import(wsCSV, wsImport) 
    End If 

    Call updateFormula(wsImport) 
    processed = processed & shName & "|" 
    cnt = cnt + 1 
    'wsCSV.Parent.Close False 
Next 

Sheet14.Activate 
U.Finish 

MsgBox cnt & " files imported/updated", vbInformation 

End Sub 

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Sub importToTempSheet(filePath) 
Dim lRow& 

Tempsheet.Cells.Clear 

Dim wsCSV As Worksheet 
Workbooks.Open filePath, False, True 
Set wsCSV = ActiveWorkbook.Sheets(1) 

lRow = wsCSV.Cells(Rows.Count, "A").End(xlUp).Row 

wsCSV.Range("A1:A" & lRow).Copy 
Tempsheet.Range("A1").PasteSpecial xlPasteValues 
Application.CutCopyMode = False 
wsCSV.Parent.Close 

Tempsheet.Range("A1:A" & lRow).TextToColumns Tempsheet.Range("A1"), xlDelimited, xlTextQualifierNone, False, False, True, False, False 

With Tempsheet 
    .Range("A:A").NumberFormat = "m/d/yyyy" 
    convertToDate .Range("A2", .Cells(Rows.Count, "A").End(xlUp)) 
End With 
End Sub 

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 

Private Function selectFiles() 
    With Application.FileDialog(msoFileDialogFilePicker) 
     .Title = "Select CSV Files" 
     .ButtonName = "Select" 
     .AllowMultiSelect = True 
     .Filters.Clear 
     .Filters.Add "Excel Files", "*.csv" 
     .InitialFileName = ThisWorkbook.Path & "\" 
     .Show 

    If .SelectedItems.Count = 0 Then 
     End 
    Else 
     Dim csvArr, i% 
     ReDim csvArr(.SelectedItems.Count - 1) 
     For i = 1 To .SelectedItems.Count 
      csvArr(i - 1) = .SelectedItems(i) 
     Next 
     selectFiles = csvArr 
    End If 
End With 
End Function 

ответ

1

Проблема заключается с попыткой заменить

..

csvName = Replace(LCase(csvName), ".csv", "") 

или использовать два Заменяет ...

csvName = Replace(csvName, ".csv", "") 
csvName = Replace(csvName, ".CSV", "") 
+0

Попробовал второй вариант изначально. Не знаю, почему это не работает. Во всяком случае, он работает сейчас. Спасибо, The_Barman! – Saud

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