Avatar billede bruno1 Novice
27. april 2010 - 15:45 Der er 3 kommentarer og
1 løsning

EXCEL - Oprettelse af "cirkulær reference"

Jeg har en del ark som skal kunne opdaterer et felt begge veje.

Dvs. ændre jeg tallet i feltet på ark1 skal ændringen også optræde i ark2-ark3 osv. - samtidig skal det også være sådan at hvis jeg ændre tallet i feltet på ark2 skal ændringen også optræde i ark1 og ark3 osv.

Jeg har forsøgt at oprette et link mellem felterne både den ene vej og den anden vej men når jeg opretter link den anden vej får jeg at vide det er en "cirkulær reference" det er det jo egentlig også da den jo i virkeligheden forsøger at opdaterer sig selv. Der står samtidig i advarsels feltet at Excel kan have svært ved at opdaterer arket når der findes den slags "cirkulære referencer"

Hvordan er den korrekte metode til at oprette disse felter?


Mvh.

Bruno
Avatar billede perhol Seniormester
01. juni 2010 - 14:35 #1
Lidt sent svar, men her er en mulighed!

Det er ikke nogen særlig elegant løsning. Indholdet i den celle der kopieres til vil være en formel der linker til den celle der kopieres fra, ikke værdien fra den celle, men det virker.

Jeg forestiller mig en fil med 5 ark hvor værdien i celle A1 ønskes at være ens på alle ark uanset hvilket ark den rettes i.

Du får lige koden til alle 5 ark.

Koden til Ark1:
Private Sub Worksheet_Change(ByVal Target As Range)

  If Not Intersect(Target, Range("A1")) Is Nothing Then
        Application.EnableEvents = False
        If IsEmpty(Target.Value) Then
        Sheets("Ark2").Range("A1").ClearContents
        Sheets("Ark3").Range("A1").ClearContents
        Sheets("Ark4").Range("A1").ClearContents
        Sheets("Ark5").Range("A1").ClearContents
        ElseIf Target.Value <> "" Then
        Application.CutCopyMode = False
    Sheets("Ark2").Range("A1") = "=Ark1!A1"
    Sheets("Ark3").Range("A1") = "=Ark1!A1"
    Sheets("Ark4").Range("A1") = "=Ark1!A1"
    Sheets("Ark5").Range("A1") = "=Ark1!A1"
        End If
        Application.EnableEvents = True
    End If
End Sub

Koden til Ark2:
Private Sub Worksheet_Change(ByVal Target As Range)

  If Not Intersect(Target, Range("A1")) Is Nothing Then
        Application.EnableEvents = False
        If IsEmpty(Target.Value) Then
        Sheets("Ark1").Range("A1").ClearContents
        Sheets("Ark3").Range("A1").ClearContents
        Sheets("Ark4").Range("A1").ClearContents
        Sheets("Ark5").Range("A1").ClearContents
        ElseIf Target.Value <> "" Then
        Application.CutCopyMode = False
    Sheets("Ark1").Range("A1") = "=Ark2!A1"
    Sheets("Ark3").Range("A1") = "=Ark2!A1"
    Sheets("Ark4").Range("A1") = "=Ark2!A1"
    Sheets("Ark5").Range("A1") = "=Ark2!A1"
        End If
        Application.EnableEvents = True
    End If
End Sub

Koden til Ark3:
Private Sub Worksheet_Change(ByVal Target As Range)

  If Not Intersect(Target, Range("A1")) Is Nothing Then
        Application.EnableEvents = False
        If IsEmpty(Target.Value) Then
        Sheets("Ark1").Range("A1").ClearContents
        Sheets("Ark2").Range("A1").ClearContents
        Sheets("Ark4").Range("A1").ClearContents
        Sheets("Ark5").Range("A1").ClearContents
        ElseIf Target.Value <> "" Then
        Application.CutCopyMode = False
    Sheets("Ark1").Range("A1") = "=Ark3!A1"
    Sheets("Ark2").Range("A1") = "=Ark3!A1"
    Sheets("Ark4").Range("A1") = "=Ark3!A1"
    Sheets("Ark5").Range("A1") = "=Ark3!A1"
        End If
        Application.EnableEvents = True
    End If
End Sub

Koden til Ark4:
Private Sub Worksheet_Change(ByVal Target As Range)

  If Not Intersect(Target, Range("A1")) Is Nothing Then
        Application.EnableEvents = False
        If IsEmpty(Target.Value) Then
        Sheets("Ark1").Range("A1").ClearContents
        Sheets("Ark2").Range("A1").ClearContents
        Sheets("Ark3").Range("A1").ClearContents
        Sheets("Ark5").Range("A1").ClearContents
        ElseIf Target.Value <> "" Then
        Application.CutCopyMode = False
    Sheets("Ark1").Range("A1") = "=Ark4!A1"
    Sheets("Ark2").Range("A1") = "=Ark4!A1"
    Sheets("Ark3").Range("A1") = "=Ark4!A1"
    Sheets("Ark5").Range("A1") = "=Ark4!A1"
        End If
        Application.EnableEvents = True
    End If
End Sub

Koden til Ark5:
Private Sub Worksheet_Change(ByVal Target As Range)

  If Not Intersect(Target, Range("A1")) Is Nothing Then
        Application.EnableEvents = False
        If IsEmpty(Target.Value) Then
        Sheets("Ark1").Range("A1").ClearContents
        Sheets("Ark2").Range("A1").ClearContents
        Sheets("Ark3").Range("A1").ClearContents
        Sheets("Ark4").Range("A1").ClearContents
        ElseIf Target.Value <> "" Then
        Application.CutCopyMode = False
    Sheets("Ark1").Range("A1") = "=Ark5!A1"
    Sheets("Ark2").Range("A1") = "=Ark5!A1"
    Sheets("Ark3").Range("A1") = "=Ark5!A1"
    Sheets("Ark4").Range("A1") = "=Ark5!A1"
        End If
        Application.EnableEvents = True
    End If
End Sub
Avatar billede bruno1 Novice
19. august 2010 - 19:48 #2
super - lige hvad jeg skulle bruge :-) takker meget for hjælpen!

send et svar så er der points

Bruno1
Avatar billede perhol Seniormester
19. august 2010 - 20:12 #3
Svar ;b)
Avatar billede bruno1 Novice
19. august 2010 - 20:13 #4
smukt - vi lukker og slukker :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester