• 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.

automatisch nieuwe rij invoegen

Status
Niet open voor verdere reacties.

needhelptoo

Gebruiker
Lid geworden
9 okt 2008
Berichten
10
Hi experts,

Ik heb 3 sheets: overview, serie1 en serie2. Nu zou ik graag hebben dat als ik in serie1 of serie2 een nieuwe rij maak met een nieuw item, automatisch een nieuwe rij gemaakt wordt in overview met datzelfde item. Dus als ik in mijn voorbeeld een nieuw item "serie1test" maak in serie1 tussen "serie1item1" en "serie1item2" moet in de overview op dezelfde plaats een nieuwe rij komen met dit item. Iemand een idee of/hoe dat gaat?

Alvast bedankt!
 

Bijlagen

Ik vrees dat dit te eenvoudig gedacht is:

Cobbe
 
Laatst bewerkt:
Alvast bedankt voor de tip cobbe, maar dat is inderdaad iets te eenvoudig. Nu moet ik nog steeds bij het toevoegen van een item opletten dat er in het overzicht nog genoeg vrije rijen zijn. En zoveel witte rijen zijn ook niet echt overzichtelijk in een overzicht...
 
Met onderstaande code wordt de A kolom in Overview gewist en vervolgens worden de gegevens van de andere werkbladen in de A-kolom van Overview geplaatst.
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim lRij As Long
Dim lLR As Long
    If Sh.Name <> "Overview" And Target.Column = 1 Then
        lRij = 3
        Worksheets("Overview").Range("A3:A1000").ClearContents
        For WS = 2 To Worksheets.Count
            lLR = Worksheets(WS).Range("A65536").End(xlUp).Row
            Worksheets(WS).Range("A1:IV" & lLR).Copy Destination:=Worksheets("Overview").Range("A" & lRij)
            lRij = lRij + lLR + 2
        Next
    End If
End Sub

Met vriendelijke groet,


Roncancio
 
Weet je toevallig ook of het mogelijk is om te filteren op de actie die voor de event zorgde? Ik wil dat er enkel gereageerd wordt op een "insert row" event en niet wanneer er gewoon een waarde aangepast wordt.
Dus iets zoals in volgende code (deze is niet corrrect maar een vorm van pseudo code om mijn vraag te verduidelijken
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    If Sh.Name <> "Overview" [COLOR="Red"]And event = "insert row"[/COLOR]
        'uit te voeren code'
    End If
End Sub
Bedankt alvast!
 
Ik weet wat je bedoelt, maar helaas, dat is niet mogelijk.
 
Ik weet wat je bedoelt, maar helaas, dat is niet mogelijk.

Volgens mij kan het wel.
Met Target.Columns.Count tel je het aantal kolommen dat wijzigt.
Als dat gelijk is aan het aantal kolommen van een werkblad, zou het volgens mij moeten kunnen.

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim lRij As Long
Dim lLR As Long
    If Sh.Name <> "Overview" And Target.Columns.Count = Cells.Columns.Count Then
        lRij = 3
        Worksheets("Overview").Range("A3:A1000").ClearContents
        For WS = 2 To Worksheets.Count
            lLR = Worksheets(WS).Range("A65536").End(xlUp).Row
            Worksheets(WS).Range("A1:IV" & lLR).Copy Destination:=Worksheets("Overview").Range("A" & lRij)
            lRij = lRij + lLR + 2
        Next
    End If
End Sub
Maar ik moet zeggen dat ik het een vreemde situatie vind om gegevens toe te voegen aan een andere werkblad terwijl de Event die het aanstuurt voor lege regels zorgt.

Met vriendelijke groet,


Roncancio
 
Maar als je een bepaald event wilt uitvragen dat niet bestaat, kan je óók anders gaan denken. Via het event Workbook_SheetBeforeDoubleClick zorg je ervoor dat er een regel wordt tussen gevoegd en vervolgens doet de code van Roncancio de rest...
Code:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim lRij As Long
Dim lLR As Long
    
    If Sh.Name <> "Overview" Then
        [COLOR="Blue"]Target.EntireRow.Insert shift:=xlDown
        Target.Select  'haal de target uit de Edit-mode[/COLOR]
        lRij = 3
        Worksheets("Overview").Range("A3:A1000").ClearContents
        For WS = 2 To Worksheets.Count
            lLR = Worksheets(WS).Range("A65536").End(xlUp).Row
            Worksheets(WS).Range("A1:IV" & lLR).Copy Destination:=Worksheets("Overview").Range("A" & lRij)
            lRij = lRij + lLR + 2
        Next
    End If

End Sub

Is dit wellicht een idee?

Groet, Leo
 
Laatst bewerkt:
Volgens mij kan het wel.

Ik dacht het er een echt event bedoeld werd, dat kan niet, maar zoals jij het doet kan het wel :thumb:

Alleen ben ik zelf geen voorstander van Worksheet_Change events e.d., maar dat moet iedereen maar voor zich uitmaken.*

Wigi
 
Alleen ben ik zelf geen voorstander van Worksheet_Change events e.d., maar dat moet iedereen maar voor zich uitmaken.
Ik ben ook niet enthousiast, maar zoals we al eerder opmerkte "de vraagsteller beslist." :p:thumb:

Met vriendelijke groet,


Roncancio
 
Bedankt voor de antwoorden. Ik zal eens kijken of ik mijn probleem ermee opgelost krijg.
Ook nog even uitleggen vanwaar deze vreemde werkwijze. Ik maak een skill-matrix.
Ik heb verschillende worksheets:
"Overview" met dus een overzicht.
"courses","products" en "certificates" (in mijn voorbeeld vervangen door "series").
en dan nog per persoon een sheet.
In overview staat of en persoon een certificaat of een opleiding heeft gehad en zijn score voor een bepaald product.
In de 3 volgende sheets staat er meer info over een cursus, product of certificaat. bijvoorbeeld geldigheidsduur, kostprijs. Bij producten ook de drie best-scorende personen.
En dan op het persoonlijk tabblad een overzicht van zijn cursussen, certificaten en skills.
De gegevens achter een cursus zijn dus niet hetzelfde in "overview" en in "courses". Maar ik wil dat als ik een cursus toevoeg in "courses" (met "nieuwe rij invoegen") er ook een nieuwe regel hiervoor toegevoegd wordt in het overview.
Hopelijk brengt dit meer duidelijkheid in mijn probleem en eventueel nog nieuwe oplossingen.
 
Bedankt voor de antwoorden. Ik zal eens kijken of ik mijn probleem ermee opgelost krijg.
Ook nog even uitleggen vanwaar deze vreemde werkwijze. Ik maak een skill-matrix.
Ik heb verschillende worksheets:
"Overview" met dus een overzicht.
"courses","products" en "certificates" (in mijn voorbeeld vervangen door "series").
en dan nog per persoon een sheet.
In overview staat of en persoon een certificaat of een opleiding heeft gehad en zijn score voor een bepaald product.
In de 3 volgende sheets staat er meer info over een cursus, product of certificaat. bijvoorbeeld geldigheidsduur, kostprijs. Bij producten ook de drie best-scorende personen.
En dan op het persoonlijk tabblad een overzicht van zijn cursussen, certificaten en skills.
De gegevens achter een cursus zijn dus niet hetzelfde in "overview" en in "courses". Maar ik wil dat als ik een cursus toevoeg in "courses" (met "nieuwe rij invoegen") er ook een nieuwe regel hiervoor toegevoegd wordt in het overview.
Hopelijk brengt dit meer duidelijkheid in mijn probleem en eventueel nog nieuwe oplossingen.
Wat ik met mijn reactie bedoel is dat je hebt een kolom met gegevens in de A-kolom en je wilt dat de macro geactiveerd wordt als er een regel wordt toegevoegd.
Echter de gegevens in de A-kolom zijn niet gewijzigd, hooguit de plaats van enkelen.
Vandaar mijn verbazing.

Met vriendelijke groet,


Roncancio
 
Met de oplossing van Roncancio kom ik er bijna, is er nu nog echter nog de mogelijkheid om een onderscheid te maken tussen een nieuwe rij toevoegen en een rij deleten?
 
Met de oplossing van Roncancio kom ik er bijna, is er nu nog echter nog de mogelijkheid om een onderscheid te maken tussen een nieuwe rij toevoegen en een rij deleten?

Via onderstaande code wordt de gegevens niet bijgewerkt als er een rij wordt gedelete.

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim lRij As Long
Dim lLR As Long
    If Sh.Name <> "Overview" And WorksheetFunction.CountBlank(Range("" & Target.Row & ":" & Target.Row & "")) = Cells.Columns.Count And Target.Columns.Count = Cells.Columns.Count Then
        lRij = 3
        Worksheets("Overview").Range("A3:A1000").ClearContents
        For WS = 2 To Worksheets.Count
            lLR = Worksheets(WS).Range("A65536").End(xlUp).Row
            Worksheets(WS).Range("A1:IV" & lLR).Copy Destination:=Worksheets("Overview").Range("A" & lRij)
            lRij = lRij + lLR + 2
        Next
    End If
End Sub
Met vriendelijke groet,


Roncancio
 
Zou je nu ook nog een "if" kunnen geven die enkel reageert als er een rij gedelete wordt? Met een combinatie van die twee vorige oplossingen zou het ook nog wel lukken maar dat is een nogal lange uitdrukking dan:
Code:
If (Sh.Name <> "Overview" And Target.Columns.Count = Cells.Columns.Count) And (Not (WorksheetFunction.CountBlank(Range("" & Target.Row & ":" & Target.Row & "")) = Cells.Columns.Count And Target.Columns.Count = Cells.Columns.Count)) Then

Ik geloof dat dit mijn laatste vraag zal zijn voor dit topic.
Bedankt voor alle hulp hier:thumb:
 
Zou je nu ook nog een "if" kunnen geven die enkel reageert als er een rij gedelete wordt? Met een combinatie van die twee vorige oplossingen zou het ook nog wel lukken maar dat is een nogal lange uitdrukking dan:
Code:
If (Sh.Name <> "Overview" And Target.Columns.Count = Cells.Columns.Count) And (Not (WorksheetFunction.CountBlank(Range("" & Target.Row & ":" & Target.Row & "")) = Cells.Columns.Count And Target.Columns.Count = Cells.Columns.Count)) Then

Ik geloof dat dit mijn laatste vraag zal zijn voor dit topic.
Bedankt voor alle hulp hier:thumb:

Ik ben bang dat ik het niet helemaal meer kan volgen.:confused:
Met een combinatie van die twee vorige oplossingen
De laatste versie is al een combinatie van de vorige versie met je wensen.

Ik zie verder dat Target.Columns.Count = Cells.Columns.Count er 2 keer in staat.

Met vriendelijke groet,


Roncancio
 
Je eerste oplossing was:
Code:
 If Sh.Name <> "Overview" And Target.Columns.Count = Cells.Columns.Count Then
maar dit reageerde zowel op delete als op insert
Je tweede oplossing was dan:
Code:
 If Sh.Name <> "Overview" And WorksheetFunction.CountBlank(Range("" & Target.Row & ":" & Target.Row & "")) = Cells.Columns.Count And Target.Columns.Count = Cells.Columns.Count Then
Dit reageert enkel op insert
Dus met deze twee te combineren met "AND NOT" waarbij ik het volgende krijg, reageert het enkel op delete:
Code:
If (Sh.Name <> "Overview" And Target.Columns.Count = Cells.Columns.Count) And (Not (WorksheetFunction.CountBlank(Range("" & Target.Row & ":" & Target.Row & "")) = Cells.Columns.Count And Target.Columns.Count = Cells.Columns.Count)) Then
Maar zoals je zelf zegt zit hier heel wat dubbel in. Ik kan deze zelf niet inkorten omdat ik niet helemaal snap wat de code juist doet.
 
Maar de bedoeling was toch dat de code uitsluitend zou werken als er een regel ingevoerd werd? Zoals mijn 2e oplossing.
Of zit ik er naast :confused:?

Met vriendelijke groet,


Roncancio
 
Als er een nieuwe rij wordt toegevoegd, moet ook in het overview een nieuwe rij toegevoegd worden. Als er een rij wordt gedelete, moet ook in het overview de overeenkomstige rij gedelete worden. Er moeten dus twee verschillende acties gebeuren. Je alleereerste oplossing met het kopieren van de apparte sheets naar de overview sheet gaat niet omdat er verschillende gegevens staan.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan