Excel Macro welke zich "Reset"

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Marcelvdsteen
  • Registratie: Juni 2010
  • Laatst online: 04-10 17:34
Hallo Allemaal,

Bedankt voor het kijken naar deze "rare" titel. Ik weet ook niet hoe ik hem anders moet omschrijven. De uitdaging waar ik mee bezig ben is het samen voegen van 2 data bronnen in 1 Excel Kolom. Hier voor heb ik (aan de hand van diverse bronnen) de volgende macro weten te bouwen
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub Update_en_Merge()
'
' Macro1 Macro
' Move data
'
'
    Range("A1").Select ' Ga naar A1
    Workbooks(ThisWorkbook.Name).RefreshAll ' Refesh worksheet From Data Source
    Range("B2").Select ' Ga naar B2
    Range(Selection, Selection.End(xlDown)).Select 'Selecteer alles vanaf Cell naar beneden
    Selection.Cut ' Knip de selectie
    Range("A1").Select ' Selecteer A1
    Selection.End(xlDown).Select ' Ga naar de laatste cell onder A1
    ActiveCell.Offset(1).Select 'Ga een cell naar beneden
    ActiveSheet.Paste ' Plak de inhoud
    Columns("B").EntireColumn.Delete 'Verwijder Kolom B
    
    
End Sub


als ik deze code automatisch laat uitvoeren dan blijf ik 2 kolommen houden, maar zie alles wel gebeuren en ook de kolom b verwijderen. echter na het einde van de macro springt alles weer terug als een soort "Undo"

Echter wanneer ik het via F8 stap voor stap doe gaat het wel goed. Ook als ik er her en der een pause in zet via de onderstaande regel
Visual Basic:
1
 Application.Wait (Now + TimeValue("0:00:10"))


Dan werkt het nog niet. de enige methode is het uitschakelen van de Refresh regel zelf.

Wat doe / denk ik fout ???

Zit hier al enkele weken op de denken

Bedankt voor het mee denken
Marcel van der Steen

Beste antwoord (via Marcelvdsteen op 04-02-2020 21:39)


  • Belindo
  • Registratie: December 2012
  • Laatst online: 00:53

Belindo

▶ ─🔘─────── 15:02

Je doet een refreshall. Heb je misschien een backgroundquery staan die pas nadat je macro klaar is klaar is met updaten waardoor de data er weer verschijnt?

Coding in the cold; <brrrrr />

Alle reacties


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • Belindo
  • Registratie: December 2012
  • Laatst online: 00:53

Belindo

▶ ─🔘─────── 15:02

Je doet een refreshall. Heb je misschien een backgroundquery staan die pas nadat je macro klaar is klaar is met updaten waardoor de data er weer verschijnt?

Coding in the cold; <brrrrr />


Acties:
  • +2 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

^dat. Je connecties hebben een eigenschap 'backgroundquery'. Zolang die 'aan' staat loopt de refresh asynchroon met je code. Zet die eens uit.

Desgewenst zet je die eerst in je code uit en aan het einde van de macro weer aan.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • +1 Henk 'm!

  • Marcelvdsteen
  • Registratie: Juni 2010
  • Laatst online: 04-10 17:34
Yep. Inderdaad ik heb in de Query eigen schappen "vernieuwen op de achtergrond" uit gezet. Nu werkt het zo als ik het in gedachten heb. En ik dacht dat ik gek aan het worden was.

Beide bedankt voor jullie snelle antwoord !

Acties:
  • +1 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Marcelvdsteen schreef op dinsdag 4 februari 2020 @ 20:40:De uitdaging waar ik mee bezig ben is het samen voegen van 2 data bronnen in 1 Excel Kolom. Hier voor heb ik (aan de hand van diverse bronnen) de volgende macro weten te bouwen.
Om met vba bewerkingen op cellen uit te voeren, is het niet nodig om die cellen eerst te selecteren. Je kunt volstaan met de laatste rij met gegevens te bepalen van de kolommen A en B en daarna B2 t/m laatste-rij-kolom-B te verplaatsen naar de eerstvolgende rij onder de laatste van kolom A.
Opm 1: Met je opdracht 'Selection.End(xlDown).Select' kun je in de problemen komen als er lege cellen in de kolommen voorkomen.
Opm. 2: In plaats van kolom B te verwijderen kun je ook de inhoud ervan wissen.

Acties:
  • 0 Henk 'm!

  • Marcelvdsteen
  • Registratie: Juni 2010
  • Laatst online: 04-10 17:34
@dix-neuf ja de lege cellen ben ik al tegen gekomen en doe eerst een sort op de cellen. En laat daarna deze weg halen. Deze macro is gisteren avond al een stuk uitgebreider geworden.

Acties:
  • +1 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Sorteren is niet nodig, probeer dit:
code:
1
2
3
4
5
6
7
Sub macro1()
Dim lrA As Integer, lrB As Integer
lrA = Range("A" & Rows.Count).End(xlUp).Row
lrB = Range("B" & Rows.Count).End(xlUp).Row
Range("B2:B" & lrB).Copy Range("A" & lrA + 1)
Columns("B").Delete
End Sub

Best is om bij elk bereik ook het blad te vermelden waarin je de code uitvoert
(dat kan met With...End With).

Acties:
  • 0 Henk 'm!

  • Marcelvdsteen
  • Registratie: Juni 2010
  • Laatst online: 04-10 17:34
@dix-neuf
Yep, bedankt voor je input ben net tegen die delete cell aangelopen... Ik dacht al waarom klopt het steeds niet. stap voor stap gedaan en zag af en toe één waarde verdwijnen... die werkblad functie heb ik via Application.Goto afgevangen. ook de sort heb ik anders gedaan die laat ik gelijk met een conditional forwarder doen.

Visual Basic:
1
2
3
4
5
6
7
8
9
Application.Goto (ActiveWorkbook.Sheets("Temp - Dubbele Waarde").Range("A1")) '
    Range("B2:B300").Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlNo
    Cells.FormatConditions.Delete
    Dim rg As Range
    Set rg = Range("A1:B300")
    Dim uv As UniqueValues
    Set uv = rg.FormatConditions.AddUniqueValues
    uv.DupeUnique = xlDuplicate
    uv.Interior.Color = vbGreen


i.v.m. bepaalde waarde kan ik de helaas de hele macro niet plaatsen. Maar loopt nu als een trein, snel en stabiel

wat blijft dit toch een fijne community !
Pagina: 1