Heb het tijden werkend gehad, kwam later een bug tegen, e.e.a. aangepast en nu werkt het niet meer...
Het probleem:
Uit Revit (bouwkundig teken/modelleer programma) halen wij data d.m.v. Python-codes. Deze data wordt opgeslagen in CSV-bestanden. Vervolgens opent diezelfde Python-code een Excelbestand waarin een macro automatisch gestart wordt die de CSV-bestanden over verschillende werkbladen verwerkt.
De CSV-bestanden inlezen en de data overnemen doe ik met deze code (deze staat in een grotere With):
Hierin geef ik aan dat de data vanaf cel A5 ingevoerd moet worden. Dit gebeurd ook, echter voegt Excel kolommen in, dus de oorspronkelijke cel A5 is nu bijvoorbeeld cel G5 geworden. Vanaf cel A5 heb ik standaard in mijn bestand een tabel met filters e.d. zitten, dus de data moet echt in de juiste kolommen/rijen komen te staan, anders werkt het allemaal niet.
Wat is er veranderd t.o.v. de werkende versie:
In de werkende versie had ik standaard een tabel met 5000 regels zitten. Bij een Revit-model wat we in wilden lezen kwamen we hogere aantallen tegen. Dit moest opgelost en dat heb ik gedaan door de tabel standaard uit 1 regel te laten bestaan en het aantal regels in de CSV te tellen en de tabel hierop aan te passen. Dit doe ik als volgt:
Omdat de celverwijzing A5 niet werkte, heb ik ook geprobeerd om de naam van de tabel op te zoeken en die als Range in te vullen:
De verwijzing (range) is correct, echter werkt deze manier van verwijzen ook niet. Wel wordt gevuld vanaf cel A5, maar ook hier schuiven de kolommen gewoon weer op.
Wat ik allemaal al heb geprobeerd:
Weet iemand hoe ik dit goed werkend kan krijgen?
Het probleem:
Uit Revit (bouwkundig teken/modelleer programma) halen wij data d.m.v. Python-codes. Deze data wordt opgeslagen in CSV-bestanden. Vervolgens opent diezelfde Python-code een Excelbestand waarin een macro automatisch gestart wordt die de CSV-bestanden over verschillende werkbladen verwerkt.
De CSV-bestanden inlezen en de data overnemen doe ik met deze code (deze staat in een grotere With):
Code:
With .QueryTables.Add("TEXT;" & csvPath & CSV(S) & ".csv", .Range("$A$5"))
.SaveData = False
.AdjustColumnWidth = False
.TextFilePlatform = 850
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileSemicolonDelimiter = True
.BackgroundQuery = True
'.RefreshStyle = xlInsertEntireRows
.Refresh BackgroundQuery:=True
End With
Wat is er veranderd t.o.v. de werkende versie:
In de werkende versie had ik standaard een tabel met 5000 regels zitten. Bij een Revit-model wat we in wilden lezen kwamen we hogere aantallen tegen. Dit moest opgelost en dat heb ik gedaan door de tabel standaard uit 1 regel te laten bestaan en het aantal regels in de CSV te tellen en de tabel hierop aan te passen. Dit doe ik als volgt:
Code:
' regels in CSV tellen
Dim fso As Object
Dim ts As Object
Dim CountLines As Long
CountLines = 0
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile(csvPath & CSV(S) & ".csv")
Do Until ts.AtEndOfStream
CountLines = CountLines + 1
ts.ReadLine
Loop
ts.Close
Set ts = Nothing
Set fso = Nothing
' regels in sheet toevoegen, alleen bij meer dan 1 record
If CountLines > 1 Then
.Rows("5:" & 5 + CountLines - 2).EntireRow.Insert Shift:=xlDown
End If
Omdat de celverwijzing A5 niet werkte, heb ik ook geprobeerd om de naam van de tabel op te zoeken en die als Range in te vullen:
Code:
' tabelnaam opzoeken
Dim obj As ListObject
Dim Tabel As String
For Each obj In Sheets(Sh(S)).ListObjects
Tabel = obj.Name
Exit For
Next
Wat ik allemaal al heb geprobeerd:
- .Range met tabelnaam i.p.v. celverwijzing, werking hetzelfde
- .Range met cell(5,1), werking hetzelfde
- .Range met cell(5,2-1), werking hetzelfde
- .Range met cell(5,2).offset(0,-1), werking hetzelfde
- .Range($B$5), dit werkt wel, alleen wordt de data nu natuurlijk in de verkeerde kolommen geïmporteerd, kan dus ook niet
- .RefreshStyle = xlOverwriteCells, dit geeft een foutmelding waardoor het script stopt
Weet iemand hoe ik dit goed werkend kan krijgen?