• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

VBA rij invoegen met behoud van formules , validatie, opmaak e.d.

Status
Niet open voor verdere reacties.

peter59

Terugkerende gebruiker
Lid geworden
21 mei 2007
Berichten
1.706
Besturingssysteem
Windows 11
Office versie
Office versie 365
Hallo,

Ik ben opzoek naar een VBA code welke er voor zorgt dat in E3 of F3 d.m.v. validatie iets wordt ingevuld er dan een rij wordt ingevoegd.
De eventuele formules, validatie, opmaak dient in de toegevoegde rij mee genomen te worden van de te kopiëren rij. Dus het bereik van E3:H3.
Zie de bijlage.
Ik hoop dat e.e.a. duidelijk is anders verneem ik dat graag.
 

Bijlagen

  • VBA invoegen rij.xlsb
    11,7 KB · Weergaven: 29
Dat zal met een macro moeten. Je kunt die in eerste instantie makkelijk zelf maken door de noodzakelijke handelingen opmeten nemen (rij invoegen, bovenliggende formules kopiëren). En dan uiteraard de macro universeel te maken zodat hij op elke rij werkt.
Er zal vast wel iemand een complete macro voor je maken, als je genoeg geduld hebt :).
 
Hallo OctaFish

Ja, je slaat de spijker op z'n kop.
Iets opnemen d.m.v. de recorder is geen enkel probleem.
Maar nu komt het. Variabel maken.
 
Eerst een beetje basis kennis opdoen lijkt mij verstandiger dan nu al naar macro's over te stappen.

Code:
=IF(C3="";"";TEXT(DATE(YEAR(C3);MONTH(C3);DAY(C3));"MMM"))

Kan ook zo
Code:
=TEXT(C3;"mmm")

Bij het gebruik van een een echte tabel heb je ook geen voorwaarde nodig of een bepaalde cel leeg is.
 
Gewoon in de opmaak:
Code:
mmm;;
=C3
 
Hallo VenA en HSV

Ja, dat is het voordeel van Excel.
Oftewel zijn er dus vele wegen welke naar Rome leiden.

Het geheel is eigenlijk bedoelt als een z.g. invulsheet en hierna is het de bedoeling om hier d.m.v. Power Query een (draai)tabel van te maken.
Dus als er in E3 iets wordt ingevuld d.m.v. validatie dat er onder deze ingevulde cel een rij bijkomt met alle formules, opmaak e.d.
Dus het bereik van E3:H3.
Zie bijlage in #1
 
Door gebruik te maken van een tabel worden de formules automatisch meegenomen.
Zo kun je dus gewoon onderaan invullen en daarna (eventueel) de tabel sorteren.
 
Popipipo

Dat klopt v.w.b. een tabel waar je gegevens onder aanvult dat alles wordt overgenomen.
Dat is nu het probleem.
Het betreffende blad gaat dienen als "basis" blad per maand.
Er dient naast iedere datum div. gegevens te worden ingevuld.
Dat kan variëren van 1 rij tot wel 20 rijen. Zie bijlage.

Ik hoop dat het nu ietsjes duidelijker wordt waarom in eerste instantie een tabel niet bruikbaar is.
Mijn inziens dient de oplossing vooralsnog bij VBA te worden gezocht.
 

Bijlagen

  • VBA invoegen rij.xlsb
    11,7 KB · Weergaven: 20
Heb je het voorstel van Popipipo wel geprobeerd.?
maak er een tabel van, vul onderaan de datum in en de rest van de gegevens, daarna sorteren op datum.
 
Waarom moet een blad dienen als basis per maand? Met 1 tot wel 20 rijen kan je jaren vooruit voordat je bij de laatste rij bent. Dus gewoon alles in dat blad zetten lijkt mij logischer. Met filters/slicers/draaitabellen kan je dan alle kanten uit.
 
Hallo eenieder

Jullie hebben allemaal volkomen gelijk zei het dat hier natuurlijk een gedachte achter steekt.
 
zie bijlage, maak er toch een tabel van, dan is het een eenvoudige macro.
Dubbelklik met je muis op de rij waar je een rij wilt invoegen, dus rij "erboven" invoegen.

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

     On Error Resume Next
     Set tbl = Target.ListObject                                'tabel van de cel waarin je dubbelklikt
     On Error GoTo 0
     If tbl Is Nothing Then MsgBox "je staat niet in een tabel", vbCritical: Exit Sub

     r = Target.Row - tbl.HeaderRowRange.Row                    'hoeveelste tabelrij ?
     If r <= 1 Then MsgBox "foutje, niet koprij of 1e rij", vbCritical: Exit Sub
     Set c = Intersect(Target.Offset(-1).EntireRow, tbl.DataBodyRange)     'bereik van de listrij er juist boven, dus daarvan de dag meenemen
     tbl.ListRows.Add r                                         'listrij invoegen
     c.Cells(2, 3).Value = c.Cells(1, 3).Value                  'dag invullen
     Cancel = True
End Sub
 

Bijlagen

  • VBA invoegen rij.xlsb
    25,1 KB · Weergaven: 16
of:

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Row = 3 Then Cancel = True
If Not Intersect(Target, Range("Tabel1")) Is Nothing And Target.Row > 3 Then
    ActiveCell.Insert    [COLOR="#008000"] 'code ooit van @HSV gekregen[/COLOR]
    Cancel = True
End If
End Sub

andere optie: p.s. werkt echter niet optimaal (bij wijzigen van invoer wordt er ook een rij ingevoegd)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 And Not IsEmpty(Target) Then
    If Not Intersect(Target, Range("Tabel1[Afd]")) Is Nothing Then
        
         i = ActiveCell.Row - 1
        If i <> 1 Then
             ListObjects(1).ListRows.Add (i)
        Else
             ListObjects(1).ListRows.Add (2)
        End If
    End If
End If
End Sub
 
Of:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
With ListObjects(1)
 If Not Intersect(Target, .ListColumns(5).Range.Resize(, 2)) Is Nothing Then
   Application.EnableEvents = False
    .ListRows.Add Target.Row - .HeaderRowRange.Row + 1
   Application.EnableEvents = True
 End If
End With
End Sub
 
Weer wat geleerd van @HSV:thumb:
Misschien is het toch beter om Resize(, 2) weg te laten.
 
Waarom weglaten @AD1957?
 
E5 invullen 1 rij erbij
F5 invullen weer 1 rij erbij.
Lijkt me niet de bedoeling, of heb ik het hier mis?

De reactie van Popipipo in #7 lijkt me nog steeds de beste oplossing.
Als je nml. een reeds gemaakte keuze in kolom E wijzigt komt er weer een rij bij.
Daar is natuurlijk ook wel weer een oplossing voor.
 
Hallo beste helpers

Zo, even wat "voer" voor mij.
Ik ga met de aangedragen opties aan de slag. Waarvoor natuurlijk dank.
Wordt dus vervolgt.

@Cow18
zei (sic) het dat hier natuurlijk een gedachte achter steekt.
Het is de bedoeling dat het "basis" bestandje wordt gekopieerd naar een nieuw tabblad (maand) en hier gaan dan +/- 3 digi(excel)beten mee aan de slag.
Oneerbiedig gezegd, aapje kunstje leren.
 
Dan kan het alfamannetje beter zorgen voor een betere opzet. Of valt deze ook onder de digi(excel)beten? Er is geen enkele macro voor nodig maar dat is al een aantal keer geschreven.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan