11. december 2005 - 13:29Der er
20 kommentarer og 1 løsning
Advarsel hvis tekst slettes i celle
Kan man gøre det sådan, at hvis jeg sletter en tekst i en celle, så får jeg en advarsel frem, hvor jeg så skal bekræfte, om jeg virkelig mener, at jeg vil slette indholdet i cellen (med "ja" eller "nej") ?
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then' her celle A1 If Target = "" Then svar = MsgBox(" vil du slette denne værdi", vbYesNo) If svar = vbNo Then Target.Value = Old End If End If End If End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$1" Then' her celle A1 altid samme som den øverste Old = Target.Value End If End Sub
kabbak> Normalt laver man indrykninger (indents) så koden blive nemmere at læse:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then' her celle A1 If Target = "" Then svar = MsgBox(" vil du slette denne værdi", vbYesNo) If svar = vbNo Then Target.Value = Old End If End If End If End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$1" Then' her celle A1 altid samme som den øverste Old = Target.Value End If End Sub
Okay, tak for det! Koden giver anledning til to spørgsmål:
1. Hvis jeg sletter noget i cellen nu, så får jeg ganske rigtigt en advarsel, men advarsel forbliver på skærmen, selv om jeg svarer "nej" til spørgsmålet om jeg vil slette værdien. Burde det ikke være sådan, at hvis jeg svarer "nej", så forsvinder advarslen og de gamle data i cellen forbliver uændret?
2. Hvordan får jeg koden til at strække sig over en række celler i en kolonne, f.eks. "A4:A40" ?
1. Underligt, at boksen ikke forvinder hos mig?? Har netop afprøvet koden i et helt nyt ark, men alligevel forbliver boksen ikke, før jeg klikker på "ja" og data så er slettet?
2. Det var nu mest ment på den måde, at koden skal dække over flere celler. Altså også hvis jeg sletter noget i celle "A21" - én celle ad gangen. Jeg kan godt se problemet i at slette flere celler ad gangen.
Prøv lige den her. Det hele sættes ind i arkets eget kodemodul.
Option Explicit Dim Old As Variant
Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range Dim Ans On Error GoTo exit_here Application.EnableEvents = False Set rng = Range("A4:A40") If Not Intersect(Target, rng) Is Nothing Then If Target.Cells.Count = 1 And Target.Value = "" Then Ans = MsgBox("Ønsker du virkelig at slette indholdet ?", vbOKCancel) If Ans = vbCancel Then Target = Old End If End If exit_here: Application.EnableEvents = True End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Old = Target End Sub
Jeg kan stadig ikke få kabbak's indlæg til at virke, heller ikke få koden til at gælde for flere celler; men som bak siger, så har det jo nok noget med "Global Old As Variant" at gøre? Ved det stadig ikke.
Derimod har jeg stor succes med bak's forslag, som virker perfekt og upåklageligt! Smid et svar, så er pts. dine! Takker for hjælpen - også til kabbak og thesurfer!
Forklaring på "Global Old As Variant": Dette opretter en global variabel, med navnet "Old", af typen "Variant".
Det betyder, at man kan bruge denne variabel over alt (også kaldet "globalt").. hvilket er modsætning til en lokal variabel, der f.eks. defineres inden for en "sub"..
.. ved ikke helt hvorfor de ikke forklarer dig det.. :-)
Tjahh surfer, måske vil vi bare holde det hemmeligt. Viden er magt som bekendt :-)
I dette tilfælde skulle det ikke være nødvendig at gøre Old global, idet den kun skal bruges i det specifikke ark og så er det nok at dim'me den i toppen af det modul den skal gælde for.
Så havde du sikkert brugt http://www.uniteit.dk/ :-) Vi skal lige have sat skub i UniteIT.dk .. så kommer det til at være bedre end Eksperten.dk.. fordi UniteIT.dk er lavet AF brugerne TIL brugerne :-)
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.