Code voor verwijderen data voordat dagelijkse CSV dump plaatsvindt

Status
Niet open voor verdere reacties.

Fermacelli

Gebruiker
Lid geworden
9 jun 2011
Berichten
34
Beste vrijwilligers,

De laatste weken zie ik in dat VBA veel kan en ik ben mezelf aan het verdiepen hierin.

Waar ik nu tegen aan loop is dat ik dagelijks een voorraaddump wil importeren uit een CSV bestand (met behulp van een Auto_open Macro).
Wanneer dit echter gebeurd, blijft de oude data staan en worden de kolommen uit de dump links voor de oude data geplakt.

De auto_open importeert twee verschillende CSV bestanden in twee verschillende werkbladen in Excel.

Momenteel heb ik de onderstaande code:

PHP:
 Sub Auto_open()
'
' Auto_open Macro
'

'
    Sheets("B14_V").Select
    Range("A1").Select
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Users\kmarcell\Dump\B14_TR_Transaction_Report_Inkoop.csv", _
        Destination:=Range("$A$1"))
        .Name = "B14_TR_Transaction_Report_Inkoop_1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1252
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
Sheets("B14_S").Select
Range("A1").Select
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Users\kmarcell\Dump\B14_SR_1.3 Stock details v0.2.csv", Destination _
:=Range("$A$1"))
.Name = "B14_SR_1.3 Stock details v0.2_1"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(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

Een optie is natuurlijk om de data te verwijderen met behulp van 'Record Macro', maar kan een van jullie wellicht vertellen of ik niet gewoon een regel kan toevoegen in het script welke dit voor me doet? Het functioneert namelijk niet goed als ik dit 'handmatig' doe met 'Record Macro'.

Let op: zoals in ColumnDataTypes te zien valt, bestaat de 1e dump uit 12 kolommen en de 2e dump uit 17 kolommen. In de kolommen hier rechts van staan formules, dus deze dienen niet verwijderd te worden.

Hopelijk kan iemand me verder helpen.

Met vriendelijke groet,
Koen
 
Verwijder alle select en selects uit de code en/of koppel het aan elkaar.

Code:
Bv:
With [FONT=Verdana]Sheets[/FONT][FONT=Verdana]([/FONT][FONT=Verdana]"B14_V"[/FONT][FONT=Verdana])[/FONT][COLOR=#000099][FONT=Verdana]
[/FONT][/COLOR][COLOR=#ff0000][FONT=Verdana] .usedrange.clearcontents  'toegevoegde regel om alles te wiisen
[/FONT][/COLOR][COLOR=#0000FF][FONT=Verdana].[/FONT][/COLOR][FONT=Verdana]QueryTables[/FONT][COLOR=#0000FF][FONT=Verdana].[/FONT][/COLOR][FONT=Verdana]Add[/FONT][COLOR=#000099][FONT=Verdana]([/FONT][/COLOR][FONT=Verdana]Connection[/FONT][COLOR=#0000FF][FONT=Verdana]:=[/FONT][/COLOR][FONT=Verdana] _[/FONT]        
"TEXT;C:\Users\kmarcell\Dump\B14_TR_Transaction_Report_Inkoop.csv", _
        Destination:=.[URL="http://www.php.net/range"]Range[/URL]("$A$1"))
        .Name = "B14_TR_Transaction_Report_Inkoop_1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1252
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = [URL="http://www.php.net/array"]Array[/URL](1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    [URL="http://www.php.net/end"]End[/URL] With

Misschien is dit al voldoende.
Code:
With [FONT=Verdana]Sheets[/FONT][FONT=Verdana]([/FONT][FONT=Verdana]"B14_V"[/FONT][FONT=Verdana])[/FONT][COLOR=#000099][FONT=Verdana]
[/FONT][/COLOR][COLOR=#ff0000][FONT=Verdana] .usedrange.clearcontents  'toegevoegde regel om alles te wiisen
[/FONT][/COLOR][COLOR=#0000FF][FONT=Verdana].[/FONT][/COLOR][FONT=Verdana]QueryTables[/FONT][COLOR=#0000FF][FONT=Verdana].[/FONT][/COLOR][FONT=Verdana]Add[/FONT][COLOR=#000099][FONT=Verdana]([/FONT][/COLOR][FONT=Verdana]Connection[/FONT][COLOR=#0000FF][FONT=Verdana]:=[/FONT][/COLOR][FONT=Verdana] _[/FONT]        
"TEXT;C:\Users\kmarcell\Dump\B14_TR_Transaction_Report_Inkoop.csv", _
        Destination:=.[URL="http://www.php.net/range"]Range[/URL]("$A$1"))
        .Name = "B14_TR_Transaction_Report_Inkoop_1"
       .TextFileTabDelimiter = True
       .SaveData = True
       .AdjustColumnWidth = True
       .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    [URL="http://www.php.net/end"]End[/URL] With
 
Laatst bewerkt:
Het leuke van een querytabel is dat je hem maar 1 keer in een bestand hoeft te plaatsen, daarna is het alleen maar een kwestie van .Refresh (dat standaard automatisch gebeurt als een bestnd wordt geopend): automatischer kan natuurlijk niet.
Dus ik zou zeggen: als die Querytabel eenmaal in het bestand staat, verwijder dan deze VBA-code.

Er hoeft niet verwijderd te worden als de nieuwe csv gegevens de oude overschrijven.
 
Laatst bewerkt:
@snb,

Als het oude meer aan gegevens bevat?
Maakt dat nog wat uit, of wordt het gehele blad refreshed?
 
@HSV

De resultante van 'refresh' is dat de huidige gegevens worden 'geïmporteerd'.
De omvang van de tabel wordt automatisch aangepast aan de hoeveelheid nieuwe gegevens (meer zowel als minder).
 
Laatst bewerkt:
@snb, Mooi om te weten...bedankt.
 
@ HSV

Bedankt voor het schrijven van een oplossing; wanneer ik deze echter invoer, krijg ik echter een Compile Error: Syntax error.

PHP:
Sub Auto_open()

' Auto_open Macro

   With Sheets("B14_V")
 .UsedRange.ClearContents
.QueryTables.Add(Connection:= _
"TEXT;C:\Users\kmarcell\Dump\B14_TR_Transaction_Report_Inkoop.csv", _
        Destination:=.Range("$A$1"))
        .Name = "B14_TR_Transaction_Report_Inkoop_1"
       .TextFileTabDelimiter = True
       .SaveData = True
       .AdjustColumnWidth = True
       .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

@SNB

Je bedoelt te zeggen dat: .UsedRange.ClearContents uit de code gehaald kan worden als de dump eenmaal goed staat en een keer een run plaatsgevonden heeft?
 
Ja.

Dus zet je code niet in - de verouderde- Autoopen.
Gebruik de code slechts eenmaal. Als de koppeling gelegd is moet je de macro verwijderen.

Probeer zelf eens na te gaan waar de fout zou kunnen zitten met het 'commenting out' van coderegels.
Debugging is een basisvaardigheid voor programmeren.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan