Speciaal stukje VBA code nodig voor wisselen tussen Sheets

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Pinkels
  • Registratie: Februari 2013
  • Laatst online: 20-03-2024
Ik heb in excel een macro geschreven om gegevens op een Sheet met een database te bewerken en later te kopieren naar steeds een andere Sheet.
...
Specifieke situatie: ik start de macro van steeds een andere Sheet, ga dan altijd naar Sheet "Gegimport". Daar worden diverse bewerkingen op de database gedaan, en als laatste wordt een selectie gekopieerd die dan geplakt moet worden op de Sheet vanwaar ik de macro gestart ben ( nu maar even 'beginSheet' genoemd).
Moeilijkheid: ik wil niet in de macro de naam van die 'beginSheet' vermelden, want dan moet ik voor elke andere 'beginSheet' een eigen macro maken.

Mijn idee is om bij het starten van de macro op de 'beginSheet' de naam van deze Sheet gelijk mee te kopieren naar de Sheet "Gegimport" en daar in bijv A3 te plakken, dan kan bij het terugkeren naar de 'beginSheet' hier de naam opgehaald worden en hoef ik dat niet expliciet in de code te schrijven.

Kan dit en zo ja hoe schrijf ik die 'retourcode' dan precies?

Ik ben benieuwd,

Pinkels

Beste antwoord (via Pinkels op 30-05-2019 21:31)


  • Paultje3181
  • Registratie: November 2002
  • Nu online
Je moet niet set sh = activesheet doen, maar gewoon with sh. Je hoeft ook activesheet helemaal niet te verlaten, aangezien je ook gewoon with sheets('gegimport') doet.

Alle reacties


Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 27-09 22:07

MAX3400

XBL: OctagonQontrol

Snelle Google (voor Excel in dit geval)
code:
1
2
3
4
Public LastSheet As String
Sub Select_Last()
Application.Sheets(LastSheet).Select
End Sub

Of het correct is voor VBA; geen idee. Je laat niet precies zien over welk pakket het gaat, wat je eigen code al is en waar je precies vastloopt.

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • 0 Henk 'm!

  • Pinkels
  • Registratie: Februari 2013
  • Laatst online: 20-03-2024
Onderstaand is de code zoals ik die nu gebruik om van de Sheet met de database weer terug te gaan naar de Sheet waar ik de macro gestart ben, in dit geval Sheets("AB EU kopie"). Dit stukje wil ik vervangen door een universele oplossing.

Hieronder de regels waarmee ik eerst het blok dat ik nodig heb kopieer en daarna plak op Sheets("AB EU kopie")
Range([D1007:AB1007], [D1007].End(xlDown)).Copy
Sheets("AB EU kopie").[B7].PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

De macro die jij hebt gevonden valt voorlopig fout: 'het subscript valt buiten het bereik'.

Moet ik bij het starten van de macro niet eerst de waarde van 'LastSheet' (in dit geval "AB EU kopie") ergens onderbrengen? Anders kan ik toch niet terug?

Het Public declaratie heb ik bovenin de Module geplaatst.

Wat jij bedoelt met pakket? ik heb excel 2010 en daar dan 'gewoon' macro in gemaakt, geen externe bronnen, de database kopieer ik in hetzelfde Workbook. Alles dus basis denk ik.

Ik kan de hele macro hier plaatsen als dat een beter inzicht geeft.

Pinkels.

Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 27-09 22:07

MAX3400

XBL: OctagonQontrol

Pinkels schreef op dinsdag 28 mei 2019 @ 22:25:
Wat jij bedoelt met pakket? ik heb excel 2010
Nou ja, je topic heet "Sheets" en dat is toch echt een applicatie van Google. Maar ja, Google kan niet al te veel met VBA dus mijn Google-gok was inderdaad richting Excel.

Ik zou wel even met de afdeling ICT gaan praten; Office 2010 is redelijk end of life/support en mist sinds enige tijd ook bepaalde koppelingen naar (veelgebruikte) online-services.

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • 0 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Gebruik in plaats van
code:
1
Range([D1007:AB1007], [D1007].End(xlDown)).Copy
dit:
code:
1
ActiveSheet.Range([D2:g2], ActiveSheet.[d2].End(xlDown))
als althans die range zich in het blad bevindt als je de macro start.

Acties:
  • 0 Henk 'm!

  • Pinkels
  • Registratie: Februari 2013
  • Laatst online: 20-03-2024
Jouw tekst:
"als althans die range zich in het blad bevindt als je de macro start".

Dat is juist het probleem: ik start de macro op bv werkblad 4, die gaat gegevens bewerken en ophalen op werkblad 1 en met een gekopieerd bereik van werkblad 1 wil ik weer naar werkblad 4.
Ik wil dit bereiken zonder de naam van werkblad 4 in de macro te zetten, want ik heb nog 10 werkbladen en dan dus ook elke keer een nieuwe macro.

Kan je mij verder helpen?

Pinkels

Acties:
  • 0 Henk 'm!

  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 07:22

heuveltje

KoelkastFilosoof

Pinkels schreef op woensdag 29 mei 2019 @ 12:47:
Jouw tekst:
"als althans die range zich in het blad bevindt als je de macro start".

Dat is juist het probleem: ik start de macro op bv werkblad 4, die gaat gegevens bewerken en ophalen op werkblad 1 en met een gekopieerd bereik van werkblad 1 wil ik weer naar werkblad 4.
Ik wil dit bereiken zonder de naam van werkblad 4 in de macro te zetten, want ik heb nog 10 werkbladen en dan dus ook elke keer een nieuwe macro.

Kan je mij verder helpen?

Pinkels
Je kunt toch gewoon de actieve sheetname opvragen, voor je in sheet 1 dingen gaat vernachelen?
"beginsheetnaam = ActiveSheet.Name"
Activeer sheet 1
Vernachel dingen
Kopieer actievesheet.kolom A tm Z
Activeer beginsheetnaam
Plak actievesheet.kolom A tm Z

[ Voor 11% gewijzigd door heuveltje op 29-05-2019 13:01 ]

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


Acties:
  • 0 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Als je de macro start op blad4, dan is op dat moment blad4 het 'activesheet'.
Start je de macro op een ander blad, dan is dat ander blad het 'activesheet'.
Zonder meer van je macro te zien is verder weinig advies te geven.

Acties:
  • 0 Henk 'm!

  • biomass
  • Registratie: Augustus 2004
  • Laatst online: 30-09 21:44
Simpelste is iets als onderstaand:
code:
1
2
3
4
5
6
7
8
9
Public Sub Work
  dim sh as Object 'Chart of worksheet

  Set sh = Application.ActiveSheet

  'voer bewerking uit

  Set ActiveSheet = sh
End Sub

Acties:
  • 0 Henk 'm!

  • Pinkels
  • Registratie: Februari 2013
  • Laatst online: 20-03-2024
alvast bedankt,

ik ga vanavond lekker knutselen, ziet er goed uit.

Nou ik ben toch weer vastgelopen. Misschien de code niet goed overgenomen in mijn macro. Ik heb de code van Biomass gebruikt en als volgt in mijn macro opgenomen:


Dim sh As Object 'Dit is ook echt de eerste regel van mijn aangepaste macro
Set sh = ActiveSheet.Name
Sheets("Gegimport").Select
With Worksheets("Gegimport")
.Range(.Range("C6"), .Range("C6").End(xlDown).End(xlToRight)).AutoFilter Field:=23, Criteria1:= _
"40", Operator:=xlFilterValues
End With
Range([D6:E6], [D6:E6].End(xlDown)).Copy [D1006]

hierna nog een aantal bewerkingen en ik sluit dan als volgt af:

Range([D1007:AB1007], [D1007].End(xlDown)).Copy
Set ActiveSheet = sh
[B7].PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

Ik krijg dan een foutmelding bij Set ActiveSheet = sh:
Deze eigenschap of methode wordt niet ondersteund door dit object (Fout 438).

Jammer. Ik gebruik Office 2010, is dat misschien te oud?

Het voorbeeld van heuveltje kan ik niet goed in code vertalen, ik ben daar toch nog niet genoeg mee bekend om de juiste opbouw te maken. Helaas.

[ Voor 89% gewijzigd door Pinkels op 29-05-2019 22:22 ]


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Paultje3181
  • Registratie: November 2002
  • Nu online
Je moet niet set sh = activesheet doen, maar gewoon with sh. Je hoeft ook activesheet helemaal niet te verlaten, aangezien je ook gewoon with sheets('gegimport') doet.

Acties:
  • +1 Henk 'm!

  • Pinkels
  • Registratie: Februari 2013
  • Laatst online: 20-03-2024
Hoi Paultje,

jouw oplossing werkt! Beetje knutselen maar dat is ook wel weer leuk.

Ik zet al mijn bewerkingen op dat andere blad tussen een With...End With blok. Dan verlaat ik feitelijk mijn ActiveSheet niet.

Weer wat geleerd.

Thnx :)

[ Voor 44% gewijzigd door Pinkels op 30-05-2019 21:34 ]

Pagina: 1