P1 Meterstanden importeren

Status
Niet open voor verdere reacties.

Knight75

Gebruiker
Lid geworden
21 nov 2020
Berichten
47
Een vraagje.
Omdat mijn slimme meter niet slim is (communicatiestoring) kan mijn energieleverancier deze niet uitlezen.
Nu heb ik zelf een P1 meter aangesloten en kan ik deze via een app uitlezen.
De data kan ik inmiddels ook importeren naar Excel en wegschrijven in een tabel via onderstaande VBA code, maar de data ververst niet direct.
Op dit moment schrijft hij eerst de oude date weg in de tabel en ververst dan pas de data!?
Wie o wie weet raad en is het ook mogelijk om dit te automatiseren naar ieder uur importeren?

Code:
Sub IMPORT()
    Dim xScreenUpdating As Boolean
    Dim xPasteSht As Worksheet
    Dim xRg As Range
    Dim xTxt As String
    Dim ws As Worksheet
    ActiveWorkbook.RefreshAll
    On Error Resume Next
    Set ws = Worksheets("data")
    Range("E2:H2").Select
    Selection.Copy
    Set xPasteSht = Worksheets("meterstanden")
    xScreenUpdating = Application.ScreenUpdating
    Application.ScreenUpdating = False
    xRg.Copy
    xPasteSht.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    Application.ScreenUpdating = xScreenUpdating
    Sheets("Meterstanden").Select
    MsgBox "Import meterstanden geslaagd", vbInformation, "Meterstanden importeren"
    
End Sub
 
Waarschijnlijk staat er in de query aangevinkt dat deze in de achtergrond mag worden uitgevoerd.
Zet dat eens uit.

Ieder uur automatisch verversen kan met VBA zolang het document open staat.
Anders moet je dat middels de Windows Task Scheduler doen.
 
Laatst bewerkt:
Je moet echt bij de query properties kijken
 
Brengt jouw leverancier uurprijzen in rekening ?
Terwijl ze zelf op (middel)lange termijn inkopen ?
 
@JEC, ik heb de eigenschappen volgens mij wel gevonden, maar kan daar niets vinden over uitvoeren in de achtergrond.

EDIT: uiteindelijk gevonden, ik zat onder de eigenschappen van 'queries en verbindingen', maar zat dus verkeerd.

@edmoor, ik heb het gevonden en het werkt! Thanks
 
Laatst bewerkt:
@snb, nee dat gelukkig niet, maar ik probeer wel enig inzicht te krijgen
 
Je kan met een workaround in Power Query de tabel steeds updaten waar je bij ieder verversmoment de nieuwe data onderin de tabel zet. Je kunt vervolgens gebruik maken van automatisch verversen om de x aantal uren/minuten. Geen VBA nodig dus
 
Hier een voorbeeld. Die blauwe tabel moet dus je bron data bevatten als voorbeeld. Als je die data verandert en vervolgens op verversen drukt, komt die data onderin de tabel terecht.
Om dit voor elkaar te krijgen moet je een tabel toevoegen aan je datamodel, ophalen in een werkblad (dit tabblad kun je hiden) en daarna verwijzen naar deze tabel in power query. Klinkt moeilijker dan het is. Zie onderstaande link voor referentie.

https://blog.crossjoin.co.uk/2013/0...cel-table-using-data-explorer-and-powerpivot/
 

Bijlagen

  • appending power query table.xlsx
    133,5 KB · Weergaven: 24
Laatst bewerkt:
@JEC, klinkt goed, maar ik heb géén enkele ervaring met power query:(
 
Ik nam eigenlijk aan dat jij je data ook ophaalt met power query. Er wordt ergens een tabel ververst gezien je code.
 
Ik heb via gegevens ophalen van het web het ip-adres van mijn P1 meter gekoppeld en kreeg zo de tabel binnen.
Die data schrijf ik dus weg in een tabel met de code zoals hierboven.
 
Gegevens ophalen is Power Query. Als je de data ophaalt kun je kiezen om in te laden of te transformeren. Kies je voor transformeren, dan kom je in de power query editor terecht.
 
Probeer het anders zo. Je moet alleen even de juiste naam vinden van de query. Staat onder tab Data --> Existing Connections

Code:
Sub jec()
 Dim ar
 With ThisWorkbook
   .Connections("Query - Table1").OLEDBConnection.BackgroundQuery = False
   .RefreshAll
    ar = .Sheets("data").Range("E2:H2")
   .Sheets("meterstanden").Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(, UBound(ar, 2)) = ar
 End With
End Sub
 
@JEC, deze code doet het prima en is lekker kort!
Excuses voor mijn late reactie, maar ik was even uit de lucht vanwege een 'griepje'.
 
Kun je nagaan of dit hetzelfde effekt sorteert ?

Code:
Sub M_snb()
 ThisWorkbook.RefreshAll
 Sheets("meterstanden").cells(Rows.Count,1).End(xlUp).Offset(1).Resize(, 4) = Sheets("data").Range("E2:H2").value
End Sub
 
Zolang background refresh uitgevinkt is wel
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan