Dansk Regneark Forum
  Hjælp Hjælp  Søg i forum   Arrangementer   Opret ny bruger Opret ny bruger  Log ind Log ind


Emne lukketLåse tegn?

 Besvar Besvar
Forfatter
larsJensen Se dropdown
Bronze bruger
Bronze bruger


Medlem: 28.Mar.2016
Land: Denmark
Status: Offline
Point: 72
Direkte link til dette indlæg Emne: Låse tegn?
    Sendt: 27.Aug.2016 kl. 11:26
Hvis jeg skriver et tal (eller noget andet) i en celle og samtidig vil give andre mulighed for at skrive noget i den samme celle, hvordan forhindrer jeg dem i at slette tallet???
Til top



Til top
maxzpad Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 04.Aug.2016
Land: Danmark
Status: Offline
Point: 569
Accepteret svar Accepteret svar
Direkte link til dette indlæg Sendt: 31.Aug.2016 kl. 11:18
Det bliver lidt kompliceret at opnå det, du vil. Jeg mener ikke, at celler kan formateres som "halvt venstrejusteret og halvt højrejusteret". Det er vist enten eller.

Du kan prøve at kopiere nedenstående kode ind som erstatning for den tidligere kode, jeg har vist dig.

Her tages der også højde for celler, som ikke ligger ved siden af hinanden. Dette gøres med funktionen Union, som kan binde op til 30 områder sammen, f.eks. Union(Range("A1:A3"), Range("C1:C3")).

Koden opfanger de relevante cellers indhold, når man markerer/select'er dem (enkeltvis/en celle af gangen). Dette indhold sammenlignes så med cellens indhold efter den ændring, som foretages, og hvis det oprindelige indhold ikke findes til venstre i det nye indhold, så tilbageføres ændringen.

-----
Public skip As Boolean
Public cvalue
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    With Application
   
        .EnableEvents = False
       
        If Not .Intersect(Target, Union(Range("A1:A3"), Range("C1:C3"))) Is Nothing Then
       
            If IsEmpty(Target) Then
           
                .Undo
               
            ElseIf Left(Target, Len(cvalue)) <> cvalue Then
           
                .Undo
               
                MsgBox "Du må ikke slette eller ændre i noget af cellens oprindelige indhold", _
                        vbOKOnly + vbExclamation, _
                       "Ændring blev tilbageført"
               
            End If
       
        End If
       
        .EnableEvents = True
   
    End With
   
    cvalue = ActiveCell.Value
   
    skip = True

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not skip Then
   
        cvalue = Target.Value
       
    Else
   
        skip = False
   
    End If
   
End Sub
-----

Mvh Max
Til top
maxzpad Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 04.Aug.2016
Land: Danmark
Status: Offline
Point: 569
Direkte link til dette indlæg Sendt: 29.Aug.2016 kl. 09:46
Hej Lars

Jeg har forsøgt at knække den ved hjælp af datavalidering (tekstlængde forskellig fra nul og ingen afkrydsning i "Ignorer tomme"), men valideringen trigges åbenbart kun, hvis jeg vælger redigér celle (med F2), sletter indholdet og trykker på Enter. Hvis jeg derimod sletter "rent" med Delete-tasten, slettes indholdet uden advarsler.

Eneste anden mulighed, som jeg kender til, er en ark-makro, der trigges ved ændring af den givne celle, og som udfører "Application.Undo", hvis ændringen medfører, at IsEmpty(Target) er SAND/TRUE.

Kode-eksempel:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address = "$A$1" Then
   
        If IsEmpty(Target) Then
       
            With Application
           
                .EnableEvents = False
               
                .Undo
               
                .EnableEvents = True
               
            End With
       
        End If
   
    End If

End Sub


Mvh Max


Til top
larsJensen Se dropdown
Bronze bruger
Bronze bruger


Medlem: 28.Mar.2016
Land: Denmark
Status: Offline
Point: 72
Direkte link til dette indlæg Sendt: 29.Aug.2016 kl. 16:21
Det er ikke din skyld, men det der ligger langt, langt, langt over min formåen! Wacko
Jeg vil slet ikke vide, hvad jeg skal gøre hvor og hvornår med det kode, så det vil jeg ikke vove mig ud i.

Jeg havde bare håbet, der var noget "simpel" et-eller-andet, som kunne beskytte nogle tegn; da der så ikke er det, finder jeg bare på noget tredje...
Til top
maxzpad Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 04.Aug.2016
Land: Danmark
Status: Offline
Point: 569
Direkte link til dette indlæg Sendt: 30.Aug.2016 kl. 08:54
Hej igen Lars

Jeg Googlede faktisk også lidt rundt i går på emnet, og alle de fora, jeg kom ind i, anviste samme type løsning som min egen. Så nej, jeg tror ikke, der findes en simpel løsning til det, du vil opnå.

Hvis du finder modet til at vove dig ud i min løsning, skal du gøre følgende:

1) Højreklik på arkets fane (der hvor arknavnet står) og vælg menupunktet "Vis programkode"

2) Kopiér mit kode-eksempel ind i vinduet under der, hvor der står "(General)" og "(Declarations)"

3) Tilpas adressen på den celle, som "kontrollen" skal gælde for, dvs. ændr "$A$1" til det, du skal bruge (husk dollar-tegn og kapitæler/store bogstaver)

4) Gå tilbage til Excel og afprøv det (skriv noget i cellen, og prøv så at slette det)



Mvh Max



Til top
larsJensen Se dropdown
Bronze bruger
Bronze bruger


Medlem: 28.Mar.2016
Land: Denmark
Status: Offline
Point: 72
Direkte link til dette indlæg Sendt: 30.Aug.2016 kl. 12:51
Jubelen vil ingen ende ta', jeg ku' finde ud af det!!! LOL

Det afføder dog 2 spørgsmål, hvor af det ene stillede jeg i det første indlæg: hvordan skriver man i cellen, uden at overskrive det første; det sker nu.
hvordan vælger man flere celler? 

Men ellers sat'me godt gået!!! Clap
Til top
maxzpad Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 04.Aug.2016
Land: Danmark
Status: Offline
Point: 569
Direkte link til dette indlæg Sendt: 30.Aug.2016 kl. 13:38
Hej Lars

Godt du fik det til at virke.

Jeg forstår ikke helt det, du skriver om at "skrive i cellen uden at overskrive det første". Mener du blot, at brugeren skal kunne redigere i cellen (med F2 eller dobbelt-klik), men brugeren må ikke skrive direkte oven i det, som i forvejen står i cellen, hvorved det så går tabt? Beklager hvis jeg virker lidt "ordkløverisk" her, men det er for bedre at forstå, hvad du eksakt vil opnå.

Hvis makroen skal dække et større område end blot én celle:

Private Sub Worksheet_Change(ByVal Target As Range)

    With Application
   
         If Not .Intersect(Target, Me.Range("A1:C3")) Is Nothing Then
       
             If IsEmpty(Target) Then
           
                 .EnableEvents = False
               
                 .Undo
               
                 .EnableEvents = True
                   
             End If
       
         End If
        
    End With

End Sub

Bemærk at du her ikke nødvendigvis behøver dollar-tegnene og store bogstaver i områdets reference/adresse.

Til top
larsJensen Se dropdown
Bronze bruger
Bronze bruger


Medlem: 28.Mar.2016
Land: Denmark
Status: Offline
Point: 72
Direkte link til dette indlæg Sendt: 31.Aug.2016 kl. 10:31
Ja, jeg mener redigere!
Jeg ved ikke, hvor det ord var blevet af. Ouch

Lad mig prøve at forklare: Jeg har en kalender; jeg skriver helligdage (eller andet) i nogle celler som er venstrejusteret; nu skal andre så gerne kunne skrive noget (højrejusteret) i cellerne, uden det jeg har skrevet forsvinder.

Det med de flere celler, havde jeg aldrig fundet ud af, men der er lige et spørgsmål mere: Hvis cellerne ikke ligger op ad hinanden, hvad så?
Bruger man evt. &-tegnet?
Til top
Bjarnehansen Se dropdown
Platin bruger
Platin bruger
Avatar

Medlem: 20.Nov.2011
Land: DK
Status: Offline
Point: 5485
Direkte link til dette indlæg Sendt: 31.Aug.2016 kl. 10:57
jeg tro den skal tage det der evt. står i cellen og sætte det sammen med det man lige har skrevet ind i cellen , jeg har ikke lige koden til det , bare en ide ...
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.
Med venlig hilsen - Bjarne Hansen - Microsoft 365 DK
Til top
maxzpad Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 04.Aug.2016
Land: Danmark
Status: Offline
Point: 569
Accepteret svar Accepteret svar
Direkte link til dette indlæg Sendt: 31.Aug.2016 kl. 11:18
Det bliver lidt kompliceret at opnå det, du vil. Jeg mener ikke, at celler kan formateres som "halvt venstrejusteret og halvt højrejusteret". Det er vist enten eller.

Du kan prøve at kopiere nedenstående kode ind som erstatning for den tidligere kode, jeg har vist dig.

Her tages der også højde for celler, som ikke ligger ved siden af hinanden. Dette gøres med funktionen Union, som kan binde op til 30 områder sammen, f.eks. Union(Range("A1:A3"), Range("C1:C3")).

Koden opfanger de relevante cellers indhold, når man markerer/select'er dem (enkeltvis/en celle af gangen). Dette indhold sammenlignes så med cellens indhold efter den ændring, som foretages, og hvis det oprindelige indhold ikke findes til venstre i det nye indhold, så tilbageføres ændringen.

-----
Public skip As Boolean
Public cvalue
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    With Application
   
        .EnableEvents = False
       
        If Not .Intersect(Target, Union(Range("A1:A3"), Range("C1:C3"))) Is Nothing Then
       
            If IsEmpty(Target) Then
           
                .Undo
               
            ElseIf Left(Target, Len(cvalue)) <> cvalue Then
           
                .Undo
               
                MsgBox "Du må ikke slette eller ændre i noget af cellens oprindelige indhold", _
                        vbOKOnly + vbExclamation, _
                       "Ændring blev tilbageført"
               
            End If
       
        End If
       
        .EnableEvents = True
   
    End With
   
    cvalue = ActiveCell.Value
   
    skip = True

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not skip Then
   
        cvalue = Target.Value
       
    Else
   
        skip = False
   
    End If
   
End Sub
-----

Mvh Max
Til top
larsJensen Se dropdown
Bronze bruger
Bronze bruger


Medlem: 28.Mar.2016
Land: Denmark
Status: Offline
Point: 72
Direkte link til dette indlæg Sendt: 01.Sep.2016 kl. 13:00
Jeg forstår det ikke!
Da jeg først afprøvede det, virkede det; da jeg senere skulle "lege" lidt med det, virkede det ikke.
Selv om jeg så sletter alt og indsætter den oprindelige kode fra indlægget, virker det stadig ikke.

Er der et friskt bud på det???
Til top
maxzpad Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 04.Aug.2016
Land: Danmark
Status: Offline
Point: 569
Direkte link til dette indlæg Sendt: 01.Sep.2016 kl. 13:11
Ud fra din beskrivelse ("nu virker det, nu virker det ikke") er mit første umiddelbare bud, at makroen ikke har kørt færdig (af en eller anden ukendt årsag), og at "EnableEvents" derfor ikke er blevet sat tilbage til True. Er dette tilfældet, vil events/hændelser ikke trigge, at makroerne kører.

Prøv følgende:

- Shift + F11 når du står i Excel (dette åbner/aktiverer Visual Basic Editor)
- Ctrl + G (dette viser Immediate-vinduet)
- Skriv dette i Immediate-vinduet: "?Application.EnableEvents" og tryk på Enter
- Hvis resultatet af dette er False, er problemet det, jeg formoder
- Løsning hvis False: Skriv dette i Immediate-vinduet: "Application.EnableEvents = True" og tryk på Enter

Jeg har ikke andre friske bud.


Mvh Max
Til top
larsJensen Se dropdown
Bronze bruger
Bronze bruger


Medlem: 28.Mar.2016
Land: Denmark
Status: Offline
Point: 72
Direkte link til dette indlæg Sendt: 02.Sep.2016 kl. 08:28
Her til morgen har det virket fint; især med den lille løsningsmodel, du kom med.

I min egen lille kalender har jeg valgt at bruge en anden løsning, men de 3 koder vil finde nytte i fremtiden.
Tak for din indsats!
Til top
 Besvar Besvar

Skift forum Forum tilladelser Se dropdown

© 2010 - 2024 Dansk Regneark Forum - en del af Excel-regneark.dk