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

Excel (VBA): Bewerken van celinhoud op meerdere werkbladen tegelijk

Status
Niet open voor verdere reacties.

Sylvias

Gebruiker
Lid geworden
27 okt 2008
Berichten
5
Hallo,

Ik wil het mogelijk maken dat de waarde van een bepaalde cel op meerdere werkbladen tegelijk bewerkt kan worden.
Hiertoe heb ik het volgende gevonden op internet, en aangepast voor de desbetreffende werkbladen (in dit voorbeeld 'Werkbladeen' & 'Werkbladtwee'):

Werkbladeen:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
    If Target.Address = "$A$1" Then
      Worksheets("Werkbladtwee").Range("$A$1") = Target
    End If
  Application.EnableEvents = True
End Sub
Werkbladtwee:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
    If Target.Address = "$A$1" Then
      Worksheets("Werkbladeen").Range("$A$1") = Target
    End If
  Application.EnableEvents = True
End Sub
Dit lijkt allemaal prima te werken, als je de desbetreffende cel afzonderlijk bewerkt. Je moet dus op elke cel die je op meerdere werkbladen "hetzelfde wil houden" afzonderlijk de focus leggen, je wijzigingen doorvoeren en op enter drukken.
Als je meerdere cellen tegelijk overschrijft (of meerdere cellen tegelijk verwijdert (leegmaakt) dan wordt dit met bovenstaande code niet op het andere werkblad overgenomen. (m.a.w. de gewenste 'synchroniteit' tussen cellen gaat verloren.

Dat is dus niet wat ik wil. Ik wil dat je in feite per werkblad kunt doen wat je wilt (kopieren, plakken, verwijderen), en dat excel dan bij het verlaten van het werkblad op specifieke cellen 'synchroniseert' met andere, gedefinieerde werkbladen. Dus dat de waardes op corresponderende andere cellen op andere werkbladen overschreven worden met de waardes op het laatst actieve werkblad (voor gespecificeerde cellen) Het is dus wel de bedoeling dat je op dat andere werkblad precies dezelfde functionaliteit hebt. Wijzigingen op Werkbladeen worden automatisch gekopieerd naar Werkbladtwee (voor gespecificeerde cellen) én vice versa.

Ik vraag me af of zo iets uberhaupt wel mogelijk is in excel. In elk geval alvast bedankt voor de moeite.
 
Bedoel je dit?
Code:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim WB As Worksheet
    If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
        For Each WB In ActiveWorkbook.Worksheets
            WB.Range("A1:A10").Value = ActiveSheet.Range("A1:A10").Value
        Next
    
    End If
End Sub

Let op: deze code is voor ThisWorkbook (!)

Zodra er een wijziging plaatsvindt (in het bereik A1 t/m A10) op een willekeurig werkblad dan krijgen de cellen van A1 t/m A10 van alle werkbladen dezelfde waardes als van het gewijzigde werkblad.

Met vriendelijke groet,


Roncancio
 
Bedankt voor je bericht, Roncancio. Het duurde even voordat ik tijd had om het uit te proberen, omdat er wat anders tussenkwam.

Ik heb het uitgeprobeerd, maar het werkt toch nog niet helemaal zoals wenselijk is. Bv. als je de waarde van een cel verandert, en dan meteen van werkblad wisselt (door direct op het tabblad te klikken), dan wordt die betreffende waarde uit die laatste cel niet met het andere werkblad 'gesynchroniseerd', ook al valt deze wel binnen het bereik. Je moet dan toch eerst de focus op terug de oorspronkelijke cel leggen, en op 'enter' toetsen, om de inhoud te synchroniseren. Dat zou niet moeten gebeuren, omdat mensen niet kunnen zien dat die waarde niet meeverandert als ze niet op enter drukken. (Ik zou een comment-box met uitleg erbij kunnen maken "Druk op enter!", maar dat doen ze toch niet.:o..)

Bovendien is bovenstaande methode gericht op het veranderen van dezelfde range op alle werkbladen. Het is eigenlijk de bedoeling dat ik per werkblad voor een specifieke range kan duiden met welke (andere, maar net zo grote range) op een ander werkblad gesynchroniseerd moet worden. Ik weet dat jou codevoorbeeld op ThisWorkbook betrekking heeft, maar ik ben dus op zoek naar iets wat ik dus per werkblad in kan stellen. Iets zoals onderstaand (klopt hier dus niks van maar het gaat om het idee)

Code:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim WB As Worksheet
    If Not Intersect(Target, Range("C31:C37")) Is Nothing Then
        For Each WB In ActiveWorkbook.Worksheets
            Worksheets("Worksheettwee").Value = ActiveSheet.Range("C11:C17").Value
        Next
        End If
End Sub

Wellicht weet jij of iemand anders nog raad, ik ben niet zo'n code-held. Hoe dan ook alvast bedankt voor enige moeite.
 
Bovendien is bovenstaande methode gericht op het veranderen van dezelfde range op alle werkbladen. Het is eigenlijk de bedoeling dat ik per werkblad voor een specifieke range kan duiden met welke (andere, maar net zo grote range) op een ander werkblad gesynchroniseerd moet worden. Ik weet dat jou codevoorbeeld op ThisWorkbook betrekking heeft, maar ik ben dus op zoek naar iets wat ik dus per werkblad in kan stellen. Iets zoals onderstaand (klopt hier dus niks van maar het gaat om het idee)
Bedoel je met het bovenstaande het volgende?
Blad1 Bereik A1:A100
Blad2 Bereik E1:E100
Blad3 Bereik D1:D100

Als in Blad1 in bovenstaand bereik iets verandert, dan veranderen van de andere bladen ook de cel in de A-kolom?

Met vriendelijke groet,


Roncancio
 
Roncancio zei:
Bedoel je met het bovenstaande het volgende?
Blad1 Bereik A1:A100
Blad2 Bereik E1:E100
Blad3 Bereik D1: D100

Als in Blad1 in bovenstaand bereik iets verandert, dan veranderen van de andere bladen ook de cel in de A-kolom?

Nee, de bedoeling is dan dat op het andere werkblad een specifieke andere cel verandert.
Dus als ik op Blad1 A1:A3 verander, dan verandert ook de inhoud op Blad2 E1:E3 en Blad3 D1: D3 (en vice versa) Kolom A op Blad2 en Blad3 is 'onafhankelijk' van de andere werkbladen. Alleen een verandering in Blad1 A1:A100 heeft effect op de andere werkbladen (idem voor Blad2 E1:E100 & Blad3 D1: D100)

Dus bv. Blad1 A1 = Blad2 E1 = Blad3 D1
& Blad1 A41 = Blad2 E41 = Blad3 D41

Ik weet niet of dit mogelijk is hoor, maar dat zou wel ideaal zijn...
 
Laatst bewerkt:
Nee, de bedoeling is dan dat op het andere werkblad een specifieke andere cel verandert.
Dus als ik op Blad1 A1:A3 verander, dan verandert ook de inhoud op Blad2 E1:E3 en Blad3 D1: D3 (en vice versa) Kolom A op Blad2 en Blad3 is 'onafhankelijk' van de andere werkbladen. Alleen een verandering in Blad1 A1:A100 heeft effect op de andere werkbladen (idem voor Blad2 E1:E100 & Blad3 D1: D100)

Dus bv. Blad1 A1 = Blad2 E1 = Blad3 D1
& Blad1 A41 = Blad2 E41 = Blad3 D41

Ik weet niet of dit mogelijk is hoor, maar dat zou wel ideaal zijn...

Oké. De bedoeling is duidelijk.
Ik denk wel dat het mogelijk is.
Kan je een lijst maken van de werkbladen met de bijbehorende bereiken.
Ik hoef geen namen van de werkbladen.

Bijv.:
Werkblad1 A1:A100
Werkblad2 C1:C100
Werkblad3 X1:X100
etc.

Met vriendelijke groet,


Roncancio
 
In feite is het eerste werkblad het 'primaire werkblad'. Ik heb daar 4 groepen van velden staan die ik telkens op één ander apart werkblad wil synchroniseren. (Dus niet zoals eerder gesteld dat een verandering op één werkblad altijd een synch met méérdere andere werkbladen bewerkstelligd, dat geldt alleen voor Wb1, de andere Wb's synchen alleen met Wb1.)

Synchronisatie veldgroep 1:
Wb1: C31:C37 - Wb2 C11:C17

Synchronisatie veldgroep 2:
Wb1: C38:C47 - Wb3 C11:C20

Synchronisatie veldgroep 3:
Wb1: C58:C59 - Wb4 C11:C12

Synchronisatie veldgroep 4:
Wb1: C60:C66 - Wb5 C11:C17

Ik weet niet hoe ingewikkeld het is om het te maken, en hoeveel tijd dat kost. Als het met een eenvoudig voorbeeld duidelijk te maken is hoe het moet dan kan ik zelf daar wellicht verder ermee.
 
Laatst bewerkt:
In feite is het eerste werkblad het 'primaire werkblad'. Ik heb daar 4 groepen van velden staan die ik telkens op één ander apart werkblad wil synchroniseren. (Dus niet zoals eerder gesteld dat een verandering op één werkblad altijd een synch met méérdere andere werkbladen bewerkstelligd, dat geldt alleen voor Wb1, de andere Wb's synchen alleen met Wb1.)

Synchronisatie veldgroep 1:
Wb1: C31:C37 - Wb2 C11:C17

Synchronisatie veldgroep 2:
Wb1: C38:C50 - Wb3 C11:C23

Synchronisatie veldgroep 3:
Wb1: C61:C62 - Wb4 C11:C12

Synchronisatie veldgroep 4:
Wb1: C63:C69 - Wb5 C11:C17

Ik weet niet hoe ingewikkeld het is om het te maken, en hoeveel tijd dat kost. Als het met een eenvoudig voorbeeld duidelijk te maken is hoe het moet dan kan ik zelf daar wellicht verder ermee.

Als ik het zo lees en (denk ik) begrijp, volstaat een verwijzing van de werkbladen naar werkblad1.
M.a.w. in cel C11 van werkblad2 zet je = en met de muis selecteer je cel C31 van werkblad1. Door nu op Enter te klikken is er een verwijzing gemaakt naar cel C31 van werkblad1.
Vervolgens kun je de verwijzing slepen naar de cellen eronder.
Dat zelfde kun je doen (verwijzing maken en vervolgens slepen) voor de andere werkbladen.
Als nu een cel in werkblad1 is gewijzigt, wordt automatisch de gelinkte cel in het andere werkblad aangepast.

Met vriendelijke groet,


Roncancio
 
Hoi Roncancio,

Een verwijzing bereikt helaas niet de gewenste functionaliteit, want de 'synchroniteit' moet ook de andere kant op werken. Als er slechts een verwijzing is dan zal een verandering op Wb1 C61 wel een verandering opleveren op Wb4 C11, maar niet vice versa, en da's wel de bedoeling...

Groeten,

Sylvias
 
Laatst bewerkt:
Onderstaande code kijkt waar een wijziging heeft plaatsgevonden en wijzigt de bijbehorende cel in het andere werkblad. De code plaatst je in ThisWorkbook zodat het betrekking heeft op alle werkbladen.

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim vInh As Variant
    If Target.Count = 1 Then
        vInh = Target.Value
        If Chr(64 + Target.Column) = "C" Then
            Select Case ActiveSheet.Index
                Case 1 And Target.Row >= 31 And Target.Row <= 37
                    Worksheets(2).Range("C" & Target.Row - 20).Value = vInh
                Case 1 And Target.Row >= 38 And Target.Row <= 50
                    Worksheets(2).Range("C" & Target.Row - 27).Value = vInh
                Case 1 And Target.Row >= 61 And Target.Row <= 62
                    Worksheets(2).Range("C" & Target.Row - 50).Value = vInh
                Case 1 And Target.Row >= 63 And Target.Row <= 69
                    Worksheets(2).Range("C" & Target.Row - 52).Value = vInh
                Case 2 And Target.Row >= 11 And Target.Row <= 17
                    Worksheets(1).Range("C" & Target.Row + 20).Value = vInh
                Case 3 And Target.Row >= 11 And Target.Row <= 23
                    Worksheets(1).Range("C" & Target.Row + 27).Value = vInh
                Case 4 And Target.Row >= 11 And Target.Row <= 12
                    Worksheets(1).Range("C" & Target.Row + 50).Value = vInh
                Case 5 And Target.Row >= 11 And Target.Row <= 17
                    Worksheets(1).Range("C" & Target.Row + 52).Value = vInh
            End Select
        End If
    End If
End Sub


Met vriendelijke groet,


Roncancio
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan