2015-10-06 105 views
0

我有一个宏将工作簿中的csv文件导入到具有相同名称的工作表中。除一个以“.CS​​V”结尾的文件外,所有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