导入csv文件时出错

时间:2015-10-06 10:43:00

标签: excel-vba csv import vba excel

我有一个宏,它将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 个答案:

答案 0 :(得分:2)

问题在于替换

试试..

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

或使用两个替换......

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