Avatar billede macho Praktikant
11. december 2005 - 13:29 Der 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") ?
Avatar billede kabbak Professor
11. december 2005 - 13:55 #1
I arkets modul

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

i et modul
Global Old As Variant
Avatar billede thesurfer Nybegynder
11. december 2005 - 14:00 #2
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

:-)

/theSurfer
Avatar billede macho Praktikant
11. december 2005 - 14:14 #3
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" ?
Avatar billede kabbak Professor
11. december 2005 - 14:26 #4
1,  boksen forsvinder fint hos mig

2. er faktisk umugligt at styre, da du ikke kan læse de gamle vædier.

Så hvis du markere flere celler , hvori den med koden er, så vil du ikke blive promptet for sletning.
Avatar billede thesurfer Nybegynder
11. december 2005 - 14:29 #5
VBA er ikke min kop kode.. :-)
Men mon ikke at det kan lade sig gøre, hvis man brugte en array..?

/theSurfer
Avatar billede macho Praktikant
11. december 2005 - 14:38 #6
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.
Avatar billede macho Praktikant
11. december 2005 - 14:46 #7
-> kabbak, jeg overså dette i dit første indlæg: Global Old As Variant

Hvad betyder det, og hvad skal jeg gøre ved det?
Avatar billede bak Forsker
11. december 2005 - 14:52 #8
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
Avatar billede bak Forsker
11. december 2005 - 14:55 #9
Se nu overså jeg macho's sidste indlæg. Det er sansynligvis derfor han ikke kan få kabbak's kode til at virke ....
Avatar billede macho Praktikant
11. december 2005 - 15:06 #10
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!
Avatar billede bak Forsker
11. december 2005 - 15:13 #11
ok. vær opmærksom på at den ikke virker hvis du sletter mere end een celle. Dette er bevidst :-)
Avatar billede macho Praktikant
11. december 2005 - 15:19 #12
Helt fint - det er lige som jeg vil ha' det :-)

Har du nogen anelse om, hvad jeg skulle ha' gjort med dette i kabbak's forslag:
"Global Old As Variant"
?
Avatar billede bak Forsker
11. december 2005 - 15:22 #13
Ja, du skal oprette et alm modul og smide den linie ind i den (i VBA -> Insert / Module)
Avatar billede thesurfer Nybegynder
11. december 2005 - 15:25 #14
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.. :-)

/theSurfer
Avatar billede macho Praktikant
11. december 2005 - 15:29 #15
Mange tak for forklaringen... det hjalp på forståelsen.
Faktisk fik jeg hermed kabbak's løsning til også at virke, men kun i én specifik celle ($A$4).
Avatar billede bak Forsker
11. december 2005 - 15:33 #16
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.
Avatar billede thesurfer Nybegynder
11. december 2005 - 15:39 #17
Hehehe..

Der er intet værre end en lærer, der siger "sådan er det bare", i stedet for at forklare det.. :-)

/theSurfer
Avatar billede macho Praktikant
11. december 2005 - 15:41 #18
Jamen, I er jo et par guttermænd alle sammen - ved ikke hvad jeg skulle ha' gjort, hvis ikke vi havde dette site :-)
Avatar billede thesurfer Nybegynder
11. december 2005 - 15:43 #19
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 :-)

/theSurfer
Avatar billede bak Forsker
11. december 2005 - 16:33 #20
men der mangler jo en regnearkskatatori .....
Avatar billede thesurfer Nybegynder
11. december 2005 - 16:37 #21
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
Stort udvalg af Excel kurser til alle niveauer og jobfunktioner

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