Selectie met 1 rij verminderen

Status
Niet open voor verdere reacties.

balkumj

Gebruiker
Lid geworden
28 dec 2012
Berichten
19
Hallo,

Wie kan mij helpen. Ik heb een bepaalde selectie (bv A5:G1) en nu kan ik in Excel heel gemakkelijk m.b.v. Shift pijl-omlaag de bovenste rij deselecteren. Nu moet deze functie in VBA geschreven worden, maar ik krijg het niet voor elkaar. Offset en resize werken niet en ik heb al van alles geprobeerd.
Ik kan geen absolute celverwijzing gebruiken omdat het aantal regels dat geselecteerd moet blijven varieerd. De ene keer is het een blok van 9 kolommen van 1 rij, maar deze kan oplopen tot 9 kolommen van 10 rijen.

Kan iemand mij helpen?

Groetjes Jolanda
 
Als je een gebied van beneden naar boven selecteert dan wordt dit gebied kleiner

Code:
With Selection
Application.SendKeys ("+{down}")
End With
End Sub

Als je een gebied selecteert van boven naar beneden dan wordt dit gebied alleen maar groter
 
Hoi Pasan,

Bedankt voor je snelle reactie, maar er gebeurt niets als ik dit probeer.
Ik heb nu deze code (sorry ik kan de code-knop niet vinden):

Range("AA32").End(xlDown).Select
ActiveCell.Offset(0, -1).Activate
Range(Selection, Selection.End(xlUp)).Select
Range(Selection, Selection.End(xlToRight)).Select
 
o, dat ging verkeerd.
Maar ik heb dus deze selectie en nu wil ik dat de bovenste rij van de selectie niet meenemen (dus deselecteren).
En dat lukt wel als ik gewoon de toetscombinatie's gebruik maar niet in VBA.

Groetjes Jolanda
 
waar heb je de code geplaatst dan? achter een knop?
 
Nee in ThisWorkbook. Maakt dat verschil dan? Ik weet nooit wat het verschil is tussen Module, ThisWorkbook of blad (sheet).

Jolanda.
Ps. Moet nu helaas weg.
 
heb een voorbeeldje geplaatst
er staan 2 knoppen op het blad kijk maar of dit is wat je bedoeld
 

Bijlagen

De code die ik je heb gegeven moet je idd achter een knop zetten.

Dat gene wat jij wil bereiken nadat je mijn code hebt gebruikt zet je ook achter een knop, dus plaats 2 knoppen 1 voor mijn code en 1 voor jou code
Jou code zet je dus in de module van de nieuw geplaatste knop
 
Ga ik meteen proberen, maar kan jou code niet in mijn code verwerkt worden dan?
Alvast heel erg bedankt voor alle moeite.

Groetjes Jolanda
 
Tuurlijk kan dat maar ik denk niet dat dat wenselijk is want wat als je je geselecteerd gebied 5 regels kleiner wil maken?
dan zou je 5 maal op de knop moeten drukken wil je dan ook 5 maal je eigen code laten lopen?
 
Nee dat komt nooit voor want ik wil alleen de koprij deselecteren. Dus het is altijd maar 1 rij.

Als ik mijn code onder een knop wil brengen krijg ik ook meteen een foutmelding in de 2e regel:

Code:
  Sheets("Gegevens").Select
    Range("A1").Select

Zit er verschil in code onder een knop en in een macro? En kan ik een macro beter onder module zetten?

Groetjes Jolanda
 
De macro die onder mijn knop zit werkt nu via een omweg: ik verwijs naar de macro die het werk moet doen. Deze macro staat nu inmiddels in Module. Maar met jouw regel gebeurt niets helaas. Ik zou het eigenlijk toch wel fijn vinden om, zonder een aparte knop te maken, zoiets in de macro te krijgen. Dan heb ik alles in één en onder een knop, zodat iedereen die er gebruik van moet maken meteen op de knop kan klikken.
 
Als ik een stukje van mijn code voor jouw code onder de knop zet, doet hij het helaas ook niet:

Code:
Option Explicit

Sub Rij()
    
    Range("AA31").End(xlDown).Select
    ActiveCell.Offset(0, -1).Activate
    Range(Selection, Selection.End(xlUp)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    
    Application.SendKeys ("+{down}")

End Sub

Alleen als ik handmatig een selectie maak (van onder naar boven) dan gaat het goed.

Groetjes
 
Code:
Sub selecteer()

    Columns("AA:XFD").Select
    Range("XFD1048576").Activate
    ActiveWindow.ScrollColumn = 15
    ActiveWindow.ScrollRow = 1
    Application.SendKeys ("+{down}")

End Sub
 
Jou start vraag was om in een geselecteerd bereik een regel te zakken dat doet deze. omdat het bereik varieert nu zeg je dat het bereik altijd hetzelfde is
Maar als jou bereik altijd het zelfde is kun je toch gewoon dit bereik meteen aangeven
 
Nee, het bereik varieert wel. Sorry als ik onduidelijk ben geweest. Ik heb afbeeldingen toegevoegd. Het bereik varieert dus tussen 1 bestelregel en max 10 bestelregels. Max bereik.jpg Min bereik.jpg

Bij max bereik loopt mijn macro wel goed:
Code:
    Range("AA32").End(xlDown).Select
    ActiveCell.Offset(0, -1).Activate
    Range(Selection, Selection.End(xlUp)).Select
    Range(Selection, Selection.End(xlToRight)).Select

Hij selecteerd het hele blauw vak minus de koprij omdat cel in de Z-kolom geen koptitel bevat.

Bij min bereik (1 regel) gaat het fout. De code gaat naar de laatste cel van Excel omdat ik kijk in AA32. Dus als ik die verander in AA31 gaat het fout in de Z-kolom omdat hij dan te ver omhoog loopt.

Dus had ik bedacht als ik vanaf AA31 ga kijken en ik deselecteer later de koprij dan blijven alleen die regels over die ik nodig heb. En dat lukt wel als ik dat handmatig doe in Excel maar niet via de VBA code. Dan wordt er aan de onderkant een rij gedeselecteerd of juist extra geselecteerd.

Ik hoop dat ik het nu wat duidelijker heb omschreven. En het mooiste zou natuurlijk zijn als de gebruikers maar op 1 knop hoeven te klikken en dat de rest vanzelf gebeurt. Anders zal het vaak fout lopen vrees ik. Daarom is het toch belangrijk dat het in de VBA code komt.

Groetjes Jolanda
 
De selecteer range code doet het bij mij niet. Hij geeft een melding: "Fout 13 tijdens uitvoering. Typen komen niet met elkaar overeen."
 
Met een omweg heb ik bereikt wat ik wilde bereiken:

Code:
 Range("Aa41").Select
    
    Do

    If ActiveCell = vbEmpty Then
        Rows(ActiveCell.Row).EntireRow.Delete
        ActiveCell.Offset(-1, 0).Select
    End If

    Loop While IsEmpty(ActiveCell)
    
 'Als er maar 1 regel een bestelling bevat ga dan naar links en kopieer de hele regel.
      If Range("AA32") = ActiveCell Then
        ActiveCell.Offset(0, -1).Activate
        Range(Selection, Selection.End(xlToRight)).Select
        Selection.Copy
 
 'Anders: ga naar links, selecteer de regel en alle aansluitende gevulde cellen naar boven.
     Else: ActiveCell.Offset(0, -1).Activate
        Range(Selection, Selection.End(xlToRight)).Select
        Range(Selection, Selection.End(xlUp)).Select
        Selection.Copy
        
    End If

Bedankt voor je hulp, al werkte het bij mij niet zoals ik wilde. :-)


Groetjes Jolanda
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan