16. september 2011 - 11:36
#4
Indlæsning af CSV-fil
Public Sub indlæsCSV()
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Users\peter\Desktop\CSV_Excel\order_export_20110915_123759 - Copy.csv" _
, Destination:=Range("$A$1")) '<--- justeres
.Name = "order_export_20110915_123759 - Copy_1" '<--- justeres
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 65001 '<---- UNICODE UTF-8
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
Opbygning af template på basis af CSV-fil
Dim csvArk As Object
Const csvArkNavn = "indlæstCsv" '<--- evt. justeres
Dim antalCsvRæk As Long
Dim templArk As Worksheet
Const skabelonArkNavn = "Skabelon" '<--- evt. justeres
Dim hovedFelter As Variant, hovedKoordinater As Variant
Const startRækkeDetail = 10 '<--- evt. justeres
Const totalRække = 30 '<--- evt. justeres
Public Sub udfyldSkabelon()
Application.ScreenUpdating = False
Rem clear detailrækker
Range("A10:I30").Select
Selection.ClearContents
Range("B1").Select
Rem Hent antal rækker på csv
Set csvArk = ActiveWorkbook.Sheets(csvArkNavn)
csvArk.Activate
antalCsvRæk = ActiveCell.SpecialCells(xlLastCell).Row
Set templArk = ActiveWorkbook.Sheets(skabelonArkNavn)
templArk.Activate
opbygHovedData
opbygDetaildata
Application.ScreenUpdating = True
End Sub
Private Sub opbygHovedData()
Dim f As Byte
hovedFelter = Array("Billing Name", "Customer Email", "Billing Phone Number", "Billing Zip", "Billing City")
hovedKoordinater = Array("B1", "B2", "B3", "B6", "C6")
For f = 0 To UBound(hovedFelter)
With templArk
.Range(hovedKoordinater(f)) = csvArk.Cells(2, findKolonne(hovedFelter(f)))
End With
Next f
End Sub
Private Sub opbygDetaildata()
Dim startRæk As Long, totalRæk As Long, total As Double
Dim ræk As Byte, detailRæk As Byte
Dim dkBeløb As String
Const DKKiDENT = "DKK"
Const momsProcent = "25%"
total = 0
detailRæk = startRækkeDetail
For ræk = 2 To antalCsvRæk
With templArk
.Range("A" & detailRæk) = csvArk.Cells(ræk, findKolonne("Item Name"))
dkBeløb = csvArk.Cells(ræk, findKolonne("Item Price"))
dkBeløb = Replace(dkBeløb, DKKiDENT, "")
.Range("C" & detailRæk) = Trim(dkBeløb)
.Range("D" & detailRæk) = csvArk.Cells(ræk, findKolonne("Item Qty Ordered"))
.Range("E" & detailRæk) = Range("C" & detailRæk) * Range("D" & detailRæk)
dkBeløb = csvArk.Cells(ræk, findKolonne("Item Tax"))
dkBeløb = Replace(dkBeløb, DKKiDENT, "")
.Range("F" & detailRæk) = Trim(dkBeløb)
.Range("G" & detailRæk) = momsProcent
dkBeløb = csvArk.Cells(ræk, findKolonne("Item Discount"))
dkBeløb = Replace(dkBeløb, DKKiDENT, "")
.Range("H" & detailRæk) = Trim(dkBeløb)
dkBeløb = csvArk.Cells(ræk, findKolonne("Item Total"))
dkBeløb = Replace(dkBeløb, DKKiDENT, "")
.Range("I" & detailRæk) = Trim(dkBeløb)
total = total + .Range("I" & detailRæk)
End With
detailRæk = detailRæk + 1
Next ræk
Range("I" & totalRække) = total
End Sub
Private Function findKolonne(søgeOrd)
With ActiveWorkbook.Sheets(csvArkNavn).Range("A1:IV1")
Set c = .Find(søgeOrd, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
findKolonne = c.Column
Else
findKolonne = 0
End If
End With
End Function