Mandy_
asked on
Excel VBA CSV import should be sorted to different locations
Dear folks,
attached csv import into worksheet "import" and should be sorted as follows:
Rows with specific action values (New, Delete, WE) should be inserted at different locations, e.g. all "Delete" occupy rows 151 to 185. "new" 2 to 150 and "we" from 186.
Could anybody of the VBA experts take a look to this issue?
appreciate for your help.
attached csv import into worksheet "import" and should be sorted as follows:
Rows with specific action values (New, Delete, WE) should be inserted at different locations, e.g. all "Delete" occupy rows 151 to 185. "new" 2 to 150 and "we" from 186.
Could anybody of the VBA experts take a look to this issue?
appreciate for your help.
Sub csv_Import()
Dim strFileName As String, arrDaten, arrTmp, lngR As Long, lngLast As Long
Const cstrDelim As String = ";" 'Delimiter
Dim importsheet As Worksheet
Set importsheet = ActiveWorkbook.Sheets("IMPORT")
Application.ScreenUpdating = False
For i = importsheet.UsedRange.Rows.Count To 2 Step -1
importsheet.Cells(i, 1).EntireRow.Delete
Next
Application.ScreenUpdating = True
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "Choose Filename"
.InitialFileName = "c:\temp\*.csv" 'Pfad anpassen
If .Show = -1 Then
strFileName = .SelectedItems(1)
End If
End With
If strFileName <> "" Then
Application.ScreenUpdating = False
Open strFileName For Input As #1
arrDaten = Split(Input(LOF(1), 1), vbCrLf)
Close #1
For lngR = 1 To UBound(arrDaten)
arrTmp = Split(arrDaten(lngR), cstrDelim)
If UBound(arrTmp) > -1 Then
With importsheet
lngLast = .Cells(Rows.Count, 1).End(xlUp).Row + 1
lngLast = Application.Max(lngLast, 2)
.Cells(lngLast, 1).Resize(, UBound(arrTmp) + 1) _
= Application.Transpose(Application.Transpose(arrTmp))
End With
End If
Next lngR
End If
End Sub
ee-example2.csv
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
If i remove the screen updating part below the ref# from other worksheet retained. The question is how could the worksheet cleaned up before the import, without losing the cell references?
Application.ScreenUpdating = False
For i = importsheet.UsedRange.Rows .Count To 2 Step -1
importsheet.Cells(i, 1).EntireRow.Delete
Next
Application.ScreenUpdating = True
Application.ScreenUpdating
For i = importsheet.UsedRange.Rows
importsheet.Cells(i, 1).EntireRow.Delete
Next
Application.ScreenUpdating
ASKER
i replaced
Application.ScreenUpdating = False
For i = importsheet.UsedRange.Rows .Count To 2 Step -1
importsheet.Cells(i, 1).EntireRow.Delete
Next
Application.ScreenUpdating = True
with
Dim rng
Set rng = ActiveSheet.UsedRange
Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1)
rng.ClearContents
and the #ref are all ok now. Could i use this?
Application.ScreenUpdating
For i = importsheet.UsedRange.Rows
importsheet.Cells(i, 1).EntireRow.Delete
Next
Application.ScreenUpdating
with
Dim rng
Set rng = ActiveSheet.UsedRange
Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1)
rng.ClearContents
and the #ref are all ok now. Could i use this?
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thank you so much for your help
ASKER
Thank you so much for your help. I have still 2 problems.
1. the header inserted begins with "UserId" but the CSV is ok. Dont know why.
much more important:
2. All references with formula in other worksheet to this data are gone. e.g. to A2 =IMPORT!#reference!
UserId; Name; Comp; Loc, typ; IdentNr; ID; Interface; Date; Aktion; Product; Version; SMTP; SMTP2;
S123456; jones, mike; GUL; BVS ;I;2476311 ;181062 ;er ;2013-07-12 12:03:34;Delete; Pail ;MSXC;
S123456; jones, mike; GUL; BVS ;I;2476311 ;181062 ;er ;2013-07-12 12:03:34;new; Pail ;MSXC;
S123456; jones, mike; GUL; BVS ;I;2476311 ;181062 ;er ;2013-07-12 12:03:34 ;we ;Pail ;MSXC;