[Excel] Macro button aanklikken, rij verwijderen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • cdl
  • Registratie: Mei 2003
  • Laatst online: 25-07 12:05
Ik heb een sheet met op elke rij een order. In de eerste kolom wil ik een knop waarmee ik de order (rij) kan verwijderen.
Ik heb al een hoop macro's gezien om rijen te verwijderen maar heb deze nog niet gezien. Iemand die weet hoe ik het kan oplossen?

Dat zeg ik!


Acties:
  • 0 Henk 'm!

  • Gerrit88
  • Registratie: Maart 2007
  • Laatst online: 17-10 14:26
Zelf een macro maken?

Maak de sheet met de button
Klik op tools - macros - record new macro
Geef een naam op en klik ok. Verwijder de rij nu handmatig en stop de opname.
Open de zojuist opgenomen macro, kopieer de code die tussen de start en stop sub tag staan. Dubbelklik op de button en kopieer de code in de macro die nu opent.

Acties:
  • 0 Henk 'm!

  • cdl
  • Registratie: Mei 2003
  • Laatst online: 25-07 12:05
Gerrit88 schreef op donderdag 31 januari 2008 @ 13:44:
Zelf een macro maken?

Maak de sheet met de button
Klik op tools - macros - record new macro
Geef een naam op en klik ok. Verwijder de rij nu handmatig en stop de opname.
Open de zojuist opgenomen macro, kopieer de code die tussen de start en stop sub tag staan. Dubbelklik op de button en kopieer de code in de macro die nu opent.
Ja, dit lukt tot zover. Ik heb het volgende als code:

code:
1
2
3
4
5
6
7
8
9
Sub DELETEROW()
'
' DELETEROW Macro
'

'
    Rows("2:2").Select
    Selection.Delete Shift:=xlUp
End Sub


Alleen rij 2 wordt nu telkens verwijderd terwijl ik de betreffende rij waar de knop in staat wil verwijderen. Enig idee hoe ik dit kan doen?

Dat zeg ik!


Acties:
  • 0 Henk 'm!

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 14:50
Als je eens in de code kijkit, zie je dat daar een 2 in staat. Misschien wel de reden dat altijd rij 2 wordt verwijderd.
Wil je echt dat de rij waarin de knop staat verwijderd wordt? Dan heb je dus per order een knop nodig.
Handiger is -misschien- een knop "verwijder actieve order", die de rij waarin de actieve/geselecteerde cel staat verwijderd. Dan zou als code
Visual Basic:
1
2
3
Sub DELETEROW()
    Selection.EntireRow.Delete Shift:=xlUp
End Sub

volstaan.

Acties:
  • 0 Henk 'm!

  • cdl
  • Registratie: Mei 2003
  • Laatst online: 25-07 12:05
onkl schreef op donderdag 31 januari 2008 @ 14:42:
Als je eens in de code kijkit, zie je dat daar een 2 in staat. Misschien wel de reden dat altijd rij 2 wordt verwijderd.
Wil je echt dat de rij waarin de knop staat verwijderd wordt? Dan heb je dus per order een knop nodig.
Handiger is -misschien- een knop "verwijder actieve order", die de rij waarin de actieve/geselecteerde cel staat verwijderd. Dan zou als code
Visual Basic:
1
2
3
Sub DELETEROW()
    Selection.EntireRow.Delete Shift:=xlUp
End Sub

volstaan.
Ah kijk dat werkt. Alleen moet wel een cell in de betreffende rij geselecteerd zijn. Als ik per ongeluk in een cell in rij 4 sta en ik druk op de knop naast rij 2, dan verwijderd ie alsnog rij 4. Kan een macro herkennen in welke rij de button staat? En dat ie dan die rij verwijderd?

Dat zeg ik!


Acties:
  • 0 Henk 'm!

  • Gerrit88
  • Registratie: Maart 2007
  • Laatst online: 17-10 14:26
Kan je niet een knop gebruiken dan zoals onkl ook al schreef? Oftwel;
Je selecteerd een rij
Klik op de knop
Rij waar je stond wordt verwijderd

Dit lijkt mij persoonlijk mooier dan op elke rij een knop maar dat ligt natuurlijk ook aan de toepassing waarvoor je het nodig heb.

Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 19:26
En hoe verwijder je dan de knop van de rij waarin je stond?

Je zou ook een macro kunnen maken die veranderingen in het werkblad detecteert, en bij een verandering in een bepaalde kolom deze regel verwijderd.
(Worksheet_Change of zoiets zeg ik uit mijn hoofd.)

edit:
code:
1
2
3
4
5
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Column = 2 Then
    If Len(Target.Formula) > 0 Then Target.EntireRow.Delete shift:=xlShiftUp
 End If
End Sub

[ Voor 28% gewijzigd door Bolukan op 31-01-2008 21:16 ]


Acties:
  • 0 Henk 'm!

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 14:50
Waar TS in het algemeen tegenaan loopt: Je wilt liefst geen ongecontroleerd groot aantal controls (knoppen in dezes). Dus een structuur waarbij er voor iedere order een knopje is, is enorm onderhoudsgevoelig. Immers: Bij een nieuwe order, moet er ook weer automagisch een knopje worden aangemaakt, bij het verwijderen van de rij, moet je ook het knopje verwijderen, de verwijzingen eronder checken etc.
Als je daarintegen een structuur hebt waarbij je een enkele control gebruikt om een order te verwijderen, dan kan je gaan werken met een variabele om de te verwijderen rij te duiden, terwijl de achterliggende structuur intact blijft.
Typische voorbeelden van een redelijk onderhoudsarme structuur:
-Bovenaan een knop die de geselecteerde rij verwijderd. Wat ik voorstelde. Eventueel kan je er nog een bevestiging inplakken ("Wilt U order ### verwijderen?" "Ja"/"Nee".
-Een dropdown met een lijstje van alle orders. Als je een order selecteert, wordt 'ie verwijdert.

Etc. etc. 't zijn maar voorbeelden, maar denk eerst even na over een fijne structuur, zowel voor de gebruiker als voor jou, de ontwikkelaar. De vraag wat je nou eigenlijk wilt komt voor de vraag hoe je daar aan komt.
Pagina: 1