Macro uitvoeren bij selecteren welbepaalde cel

Status
Niet open voor verdere reacties.

dendalle

Gebruiker
Lid geworden
21 mrt 2014
Berichten
25
Beste,

In een excel-file heb ik een macro aangemaakt om een rij toe te voegen aan een welbepaalde tabel. Ik zou deze willen laten uitvoeren bij het selecteren van een welbepaalde cel.
Bijvoorbeeld, een tabel in het bereik B6:F12 waarvan rij 6 de hoofding is. De macro zou ik dan willen laten uitvoeren als ik cel J6 selecteer.
Als de macro dan wordt uitgevoerd kopieert deze rij 12 en voegt hij de gekopieerde rij net onder rij 12 in.

Heeft iemand een idee hoe ik dit best aanpak? of welke codes ik voor de makro moet plaatsen?

Groetjes
 
Upload een bestandje met wat je wilt bereiken.
Ik ga je niet meer helpen, moet er om half vier uit, maar anderen genoeg hier.

succes.
 
Zet deze code eens in moduleblad van toepassing.

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Columns(10)) Is Nothing Then
If Target.Count = 1 Then
 If UCase(Target) = "NIEUWE RIJ TOEVOEGEN" Then
    With Cells(Target.Row, 2).End(xlDown)
      .Offset(1).EntireRow.Insert
      .Resize(, 5).Copy .Offset(1)
      .Offset(1, 1).Resize(, 4).ClearContents
     End With
        End If
      End If
    End If
 Application.EnableEvents = True
End Sub
 
Als ik dit invoer, wordt er inderdaad een rij toegevoegd op de gewenste plaats. Maar de formules in kolom F worden niet mee over genomen.
Is hier ook een oplossing voor?
Kan ik bijvoorbeeld de macro die ik al had aangemaakt, laten activeren door het selecteren van de welbepaalde cel?
 
Verander de 4 in een 3.
Code:
.Offset(1, 1).Resize(, 4).ClearContents
 
Ok, dit werkt prima!! Alvast bedankt voor de hulp. Ik heb nog net 1 vraagje :-)
Als de cel toegevoegd is zou ik graag de cel willen laten selecteren die vrij is. In het voorbeeld, als je start vanaf het begin, dan voeg je een lijn toe voor een 4de item, dan zou de cel naast de 4 (zijnde C7 in dat geval) moeten geselecteerd worden.
 
Zet deze onder de vorige.
Code:
Application.Goto .Offset(1, 1)
 
Omtrent het voorgaande, had ik nog een bijkomende vraag

Stel dat ik nog een bijkomende voorwaarde wil toevoegen vooraleer de VBA code te laten uitvoeren. Bijvoorbeeld, als ik op "Nieuwe rij toevoegen" klik (bijvoorbeeld K3), én in L3 staat "Frisdrank", in dit geval mag de nieuwe lijn worden toegevoegd.
Ik veronderstel dat er nog een nieuwe "IF"-"Then" clausule moet worden toegevoegd, maar het lukt me niet echt om dit juist in te stellen.
 
Met de voorwaarde 'en' gaat dit ook.
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Columns(11)) Is Nothing Then
If Target.Count = 1 Then
 If UCase(Target) = "NIEUWE RIJ TOEVOEGEN" And UCase(Target.Offset(, 1)) = "FRISDRANK" Then
    With Cells(Target.Row, 2).End(xlDown)
      .Offset(1).EntireRow.Insert
      .Resize(, 5).Copy .Offset(1)
      .Offset(1, 1).Resize(, 3).ClearContents
      Application.Goto .Offset(1, 1)
     End With
        End If
      End If
    End If
 Application.EnableEvents = True
End Sub
 
Laatst bewerkt:
Alvast heel erg bedankt. Ik worstel enkel nog met 1 probleempje.
Ik zou in een ander tabblad een soortgelijk effect willen maken, maar hier zit ik met het probleem dat er rekening moet kunnen gehouden worden met het feit dat er kollommen zouden kunnen toegevoegd worden.
De excel in bijlage zal duidelijker zijn denk ik Bekijk bijlage Lijn toevoegen variabel.xlsm

Ik zou eventueel enkele knoppen rechts bovenaan willen plaatsen zodat er telkens een lijn op de juiste plaats wordt ingevoert. bijvoorbeeld als er op de knop "Nieuw Vatbier toevoegen" wordt geklikt, dat er een lijn wordt toegevoegd in de sectie Bier in Vaten.
Probleem is dat de formule in de kolom van totaal niet verwijderd mag worden én hierbij zou rekening moeten gehouden worden dat er bijvoorbeeld kolommen worden ingevoerd net voor de kolom totaal.
Weet je hier raad mee?
 
Voeg nooit cellen samen, dat geeft vroeg of laat problemen.
In het bestand een ander manier (zie opmaak C3).
Zo blijft cel A10 leeg wat nodig is om de laatste rij te vinden.
 

Bijlagen

Zou het mogelijk zijn om de code iets meer toe te lichten zodat ik weet waarvoor elk deeltje staat. Als ik weet hoe elk deeltje apart werkt, kan ik wel verder.
 
Zet de code in een module zodat het beter leesbaar wordt.
Code:
Sub vatbier_toevoegen()
Application.DisplayAlerts = False  'schakel waarschuwing bestand openen uit
With Range("A6").End(xlDown) 'zoek de laatste cel vanaf A6 naar beneden
   .Offset(1).EntireRow.Insert  'voeg een rij in onder de laatste
   .Resize(, Cells(3, Columns.Count).End(xlToLeft).Column).Copy .Offset(1) 'zoveel kolommen als dat er kolommen gevuld zijn van rij 3 kopieren
   .Offset(1, 1).Resize(, Cells(3, Columns.Count).End(xlToLeft).Column - 2).ClearContents 'zoveel kolommen legen vanaf kolom b als dat er kolommen gevuld zijn minus 2
   Application.Goto .Offset(1, 1) 'ga een cel opzij vanaf de nieuw ingevooerde cel
 End With
 Application.DisplayAlerts = True 'schakel weer in
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan