Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Excel VBA ga naar selected sheet

Pagina: 1
Acties:

  • Mar2zz
  • Registratie: September 2007
  • Laatst online: 20-08 07:53
Ik heb een deactivate stukje code geschreven voor een sheet. Daarin staat een case evaluatie, waarmee ik, als ik niet een andere sheet specificeer, ik blijf hangen in de sheet waarin de case wordt geevalueerd.

De case ziet er ongeveer zo uit
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Select Case do_Count
    Case Is = 0
        'Do nothing
        MsgBox ("Er is nog niets geimporteerd."), vbInformation
        Sheets("Overzicht").Select
        Range("A1").Select
    Case Is = 1
        Sheets("Overzicht").Select
        Selection.AutoFilter Field:=1
        Range("Z10:Z219").Copy
        Sheets("Berekening").Select
        Range("E9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Columns("E:E").EntireColumn.Hidden = False
        Columns("K:K").EntireColumn.Hidden = True
        Sheets("Overzicht").Select
        Selection.AutoFilter Field:=1, Criteria1:="1"
        Sheets("Berekening").Select
        Range("A1").Select
    Case Is = 2
        Sheets("Overzicht").Select
        Selection.AutoFilter Field:=1
        Range("Z10:AA219").Copy
        Sheets("Berekening").Select
        Range("E9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Columns("E:F").EntireColumn.Hidden = False
        Columns("J:J").EntireColumn.Hidden = False
        Columns("K:K").EntireColumn.Hidden = True
        Sheets("Overzicht").Select
        Selection.AutoFilter Field:=1, Criteria1:="1"
        Sheets("Berekening").Select
        Range("A1").Select
        enzovoorts (6 case's)


Zoals je ziet doe ik aan het einde van elke case een select naar de Sheet Berekening. Maar dat is irritant, want ik wil dat je gewoon een willekeurige sheet kan aanklikken en dat ie dan daarheen gaat, in plaats van naar berekening. Maar als ik die sheets("Berekening").select niet meeneem, dan blijft ie terugspringen naar
de sheet Overzicht. Als ik Activesheet daar neerzet, dan blijft ie ook hangen in Overzicht.

Hoe krijg ik het zo ver dat ik naar een willekeurige sheet kan vertrekken (als in die de gebruiker dan selecteert na een import te hebben gedaan? (er wordt een website geimporteerd en verwerkt).

Dit vergeet ik:
De bedoeling is dat er gegevens van Overzicht naar Berekening worden gekopieerd na het verlaten van Overzicht. (zo worden alle wijzigingen meegenomen als er dingen gewijzigd zijn. Omdat er nogal veel geedit zou kunnen worden leek het me niet verstandig om met een Change Event te werken, wat op een flinke range die gewijzigd kan worden nogal wat load zou kunnen geven.

[ Voor 8% gewijzigd door Mar2zz op 01-09-2011 16:45 . Reden: uitleg bedoeling ]


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Geen .Select() gebruiken (en nooit de opneem0knop gebruiken voor productie-code) maar direct de juiste delen aanroepen/gebruiken. Ik zou ook geen .Copy of .Paste gebruiken maar dat is misschien persoonlijk (al is het IMHO wel een best practice).

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Mar2zz
  • Registratie: September 2007
  • Laatst online: 20-08 07:53
Ik ben een vba-noob, maar dat had je al geschoten blijkbaar, maar bedankt voor je antwoord. Ik weet ongeveer hoe vba werkt, gebruik er ook ontzettend veel van, al moet ik dus inderdaad vaak opnemen (in een ander bestand dan het uiteindelijke bestand doe ik dat, dan neem ik stukjes op van acties die ik nog niet ken in vba-taal), en kan ik daarna prutsen aan de code zodat het gaat doen wat ik compleet wil.

Ik moet wel van het ene naar het andere copy/pasten. Volgens mij kan ik dat ook niet anders doen, ik wil op de plek waar het terecht komt geen formules hebben zodat eindgebruikers het daar niet kunnen stukmaken of er niets meer van snappen. Vandaar dat ik van hidden columns kopieer naar zichtbare columns.

Nu had ik wel uitgevonden dat (gister pas trouwens) dat je kan copy pasten zonder select van ranges door de range er gewoon voor het copy/paste commando te zetten. Maar als ik dat ook doe met sheets dan werkt dat niet.
Dit werkt bijvoorbeeld niet:
code:
1
        Sheets("Overzicht").AutoFilter Field:=1


maar ik wil ook dat ie niet meer de paste-range geselecteerd heeft op de pagina na het plakken, vandaar dat ik nog een .Select forceer (A1 is op alle sheets verborgen achter een plaatje, dus dat zie je dan niet).

Kan je misschien een tipje van de sluier oplichten hoe je zonder select wel ranges kan overzetten van het ene blad naar het andere? Eventueel zonder copy-paste?

of is dat een simpel Range(blahdieblah) = Range(blahdieblah.op.andere.sheet)? Hoe forceer ik dan alleen de waarden overzetten, en niet de formules?

(ik kan pas maandag weer testen, mijn weekend is begonnen en heb hier geen excel, maar heb alleen zetjes nodig, het verdere uitzoeken en tunen van de code lukt me dan al wel). Need to get my mind around it zeg maar.

En wat betreft het opneemknop: vba (programmeren in het algemeen) is voor mij compleet nieuw. Ik google en record de code bij elkaar. Dus het zal ongetwijfeld hele lelijke code zijn, maar het doet uiteindelijk wel wat ik wil. Ik ben dan ook zo dat als ik iets nieuws erover leer dat ik alles ga aanpassen wat 'noob-style' staat in dit bestand. Dit is bijvoorbeeld ook voor het eerst dat ik aan het stoeien ben met worksheet-event code in plaats van gewoon macro's met een button.

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Mar2zz schreef op vrijdag 02 september 2011 @ 07:36:
Nu had ik wel uitgevonden dat (gister pas trouwens) dat je kan copy pasten zonder select van ranges door de range er gewoon voor het copy/paste commando te zetten. Maar als ik dat ook doe met sheets dan werkt dat niet.
Dit werkt bijvoorbeeld niet:
code:
1
        Sheets("Overzicht").AutoFilter Field:=1
Klopt. Autofilter moet je toepassen op een range, dus bv sheets(1).range("A1")
maar ik wil ook dat ie niet meer de paste-range geselecteerd heeft op de pagina na het plakken, vandaar dat ik nog een .Select forceer (A1 is op alle sheets verborgen achter een plaatje, dus dat zie je dan niet).
Oef. Application.Cutcopymode=false :)

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


  • Mar2zz
  • Registratie: September 2007
  • Laatst online: 20-08 07:53
Lustucru schreef op vrijdag 02 september 2011 @ 12:27:
[...]

Klopt. Autofilter moet je toepassen op een range, dus bv sheets(1).range("A1")

[...]

Oef. Application.Cutcopymode=false :)
thx.
Ik neem aan dat sheets(1).range(A1) de cel moet zijn waarin de autofilterbutton zich bevind?

Application.Cutcopymode=false heb ik al, die wordt na de case-evals uitgevoerd. Maar die zorgt er alleen voor dat de marching ants verdwijnen rond de copy-range. de paste-range blijft wel geselecteerd.

Maar dat zou ik dus kunnen oplossen door te zeggen dat de ene range de andere is, maar dan alleen de values, niet de formulas?

(in dit soort gevallen mis ik wel dat ik excel niet thuis heb, aan de andere kant beter anders zou ik mijn werk meegenomen hebben en nu al uren lopen prutsen... :p )

  • Mar2zz
  • Registratie: September 2007
  • Laatst online: 20-08 07:53
Opgelost: Select helemaal uit kunnen bannen, kopieren is niet nodig, zo krijg ik ook de waarden only over en kon ik de autofilter droppen, die is met copy wel nodig, maar met deze code niet
code:
1
        Sheets("Berekening").Range("E9:E218") = Sheets("Overzicht").Range("Z10:Z219").Value

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

offtopic:
:Y

Thanks@update, nuttig voor anderen :)

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Mar2zz
  • Registratie: September 2007
  • Laatst online: 20-08 07:53
wel slecht gedocumenteerd, ook op grote excelsites. Copy/paste vragen worden bijna nooit met rangea = rangeb.Value beantwoord, terwijl het cleane code geeft en waarschijnlijk ook sneller verwerkt wordt.

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 11:02

Reptile209

- gers -

Je kunt nog een heel stuk verder optimaliseren. Nu herhaal je heel veel code in de case's. Stop dat eens in wat handige sub's, dan hou je het op één plek. Kijk eventueel eens naar de werking van Application.ScreenUpdating, dat voorkomt een boel 'flicker' als je tussen sheets wisselt. :)

Zo scherp als een voetbal!

Pagina: 1