2015-10-06 114 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