• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Vragen over Macro om ING data te importeren

Status
Niet open voor verdere reacties.

mayflower

Gebruiker
Lid geworden
21 jul 2009
Berichten
38
Beste experts, ik heb een macro gemaakt om data te importeren. Aangevuld met een sub om een regel te verwijderen. Ik heb een paar vragen hierover:

1. De macro is niet stabiel. Hij doet het diverse keren goed. Dan sla ik het bestand met de aangevulde data op. En dan blijft ie hangen op .Refresh BackgroundQuery:=False. Nu doet de macro het overigens weer goed. Helaas weet ik nu de melding niet goed meer. Het had meen ik te maken met het bron bestand.
Waar zou dit aan kunnen liggen?
2. Een property is FieldNames = False Als ik het goed begrijp komt dan niet de regel mee met alle kolomkoppen. Dat gebeurt wel. Ik heb er zelfs een twee de sub voor gevonden (del_row) om de regel te verwijderen. Het lukt me om geen kolomkoppen te importeren wanneer ik de regel .TextFileColumnDataTypes = Array(5, 1, 1, 1, 1, 1, 1, 1, 1) uitschakel. Maar dan is mijn kolom met datums onleesbaar (##########) terwijl er bijvoorbeeld 20180525 in staat. De del_row sub werkt, maar het moet toch eenvoudiger kunnen?

Bedankt voor de suggesties!
Code:
Sub ING_import()
'
' Importeer ING data Macro
'
    Application.CutCopyMode = False
       With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;/Users/mijnnaam/Downloads/data.csv", Destination:=Range("C" & Rows.Count).End(xlUp).Offset(1))
        .Name = "data_1"
        .FieldNames = False
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .RefreshPeriod = False
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 10000
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(5, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
    del_row
End Sub

Sub del_row()
    Dim Firstrow As Long
    Dim Lastrow As Long
    Dim Lrow As Long
    Dim CalcMode As Long
    Dim ViewMode As Long

    With Application
        CalcMode = .Calculation
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
    End With

    'We use the ActiveSheet but you can replace this with
    'Sheets("MySheet")if you want
    With ActiveSheet

        'We select the sheet so we can change the window view
        .Select

        'If you are in Page Break Preview Or Page Layout view go
        'back to normal view, we do this for speed
        ViewMode = ActiveWindow.View
        ActiveWindow.View = xlNormalView

        'Turn off Page Breaks, we do this for speed
        .DisplayPageBreaks = False

        'Set the first and last row to loop through
        Firstrow = .UsedRange.Cells(1).Row
        Lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row

        'We loop from Lastrow to Firstrow (bottom to top)
        For Lrow = Lastrow To Firstrow Step -1

            'We check the values in the A column in this example
            With .Cells(Lrow, "I")

                If Not IsError(.Value) Then

                    If .Value = "Bedrag (EUR)" Then .EntireRow.Delete
                    'This will delete each row with the Value "Bedrag (EUR)"
                    'in Column A, case sensitive.

                End If

            End With

        Next Lrow

    End With

    ActiveWindow.View = ViewMode
    With Application
        .ScreenUpdating = True
        .Calculation = CalcMode
    End With

End Sub
 
Beste Mayflower,

Betreft probleem 1:
De exacte reden voor het vastlopen bij .Refresh kan ik niet voor je vaststellen.
Ik ben deze vaker tegengekomen wanneer iemand een leeg document probeert te importen.
misschien dat dit er mee te maken zou kunnen hebben...

Betreft probleem 2:
De fieldnames property zegt niks over het wel of niet importeren van kolomkoppen.
Door true of false mee te geven bepaal je of het wel of geen kolomkoppen zijn.

Maar als ik het goed begrijp wil je dat de koppen vanuit jou document niet mee geïmporteerd worden.
Ik ben niet bekend met het document dat je probeert te importeren,
maar als de koppen alleen bovenaan het document staan dan is dit gemakkelijk op te lossen door de TextFileStartRow aan te passen.
Deze is standaard 1, dat wil zeggen dat alle data vanaf regel 1 geïmporteerd wordt.
Door deze te verhogen kun je regels overslaan.

TextFileColumnDataTypes geeft aan waar de scheidingen tussen jouw kolommen komen.
vandaar dat de datumvelden niet meer leesbaar zijn wanneer je deze uitschakelt.
De kolom waarin de datum dan geplaatst wordt herkend de tekst dan niet meer als datum.
je kunt deze dus beter aanhouden.
 
Bedankt voor je snelle antwoord NogGeenGuru.

Vwb 1: bestand was niet leeg. Kan het te maken hebben dat er een verbinding blijft bestaan tussen Excel document en het te importeren bestand? Wanneer ik namelijk het bestand open zie ik bovenaan het volgende staan: Beveiligingswaarschuwing Externe gegevensverbindingen zijn uitgeschakeld. En een knop Inhoud inschakelen. Even uitgeprobeerd: nee het lijkt niet uit te maken of ik wel of niet op de knop druk of een versie van document op sla waarbij ik de verbinding heb verwijderd.
Vwb 2: dat werkt perfect! Nogmaals dank.
 
Verwijder een eenmaal aangemaakte verbinding niet, maar ververs hem.

Daarvoor is slechts de opdracht

Code:
Thisworkbook..refreshall
nodig.

Met je huidige macro maak je steeds weer opnieuw eenzelfde verbinding. De beste manier om Excel te laten ontsporen.
 
Laatst bewerkt:
Dank je SNB. Maar ik weet niet goed hoe ik met deze method om moet gaan. Alle data wordt (nog eens) binnengehaald, een draaitabel 'ververst' (terwijl ik dat niet wil) maar de waardes daarin zijn verwijderd, mijn bestaande data van afgelopen maanden wijzigt en op plekken waar ik het niet verwacht en de kolomkoppen worden binnengehaald. :shocked:
Ik heb als test een macro opgenomen met Alles Vernieuwen. Dan gebeurt min of meer hetzelfde. Overigens in de VBA van laatstgenoemde macro staat er ActiveWorkbook.
 
Ik heb intussen een goede oplossing gevonden voor het verbreken van verbindingen met bron data uit andere bestanden:
Code:
Sub VerwConn()
'met deze sub worden alle gelegde verbindingen verwijderd

Dim obj As Object

For Each obj In ActiveWorkbook.Connections
    obj.Delete
Next obj

End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan