Avatar billede steensommer Praktikant
19. januar 2004 - 00:44 Der er 8 kommentarer og
1 løsning

Genopret slettet celle

Hej
I en projektmappes regneark er anbragt følgende kode der når en celle slettes i kolonne A efterfølgende sletter resten af rækken. Jeg har lagt en lille sikkerhed ind for ikke ved en fejl at slette en hel række - den fungerer udmærket pånær at selve den slettede celle ikke genoprettes efter man har svaret nej til at slette rækken. Kan dette lade sig gøre? Jeg har forsøgt med at lave en oldselection og genoprette den efter negationen men uden held:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Dim Trange As Range
Dim c As Range
Set Trange = Range("A3: A1000")
'slå alle events fra da vi her henter nye data og den ellers vil køre igen.
Application.EnableEvents = False

On Error GoTo Slut

'check om den indtastede celle er i Trange
If Not Intersect(Target, Trange) Is Nothing Then
  'Hvis cellen ikke er tom (blevet slettet)
 
  If Len(Target.Value) = 0 Then
      'Target.EntireRow.ClearContents
        Dim Msg, Style, Title, Ctxt, Response, MyString
        Msg = "Ønsker du at slette rækken?"    ' Define message.
        Style = vbYesNo + vbDefaultButton2    ' Define buttons.
        Title = "Meddelelsesbox"    ' Define title.
        Response = MsgBox(Msg, Style, Title)
            If Response = vbYes Then
                Target.Offset(0, 1).ClearContents
                Target.Offset(0, 2).ClearContents
                Target.Offset(0, 3).ClearContents
                Target.Offset(0, 4).ClearContents
                Target.Offset(0, 5).ClearContents
                Target.Offset(0, 6).ClearContents
                Target.Offset(0, 7).ClearContents
            End If
           
  End If

End If
Application.EnableEvents = True
Exit Sub

'slå events til igen
Slut:
Application.EnableEvents = True
MsgBox ("Fejl fundet")
End Sub

vh Steen
Avatar billede kabbak Professor
19. januar 2004 - 01:22 #1
Public BeforeVal As String 'NY global variabel for gammel værdi


Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False
Dim Trange As Range
Dim c As Range
Set Trange = Range("A3: A1000")
'slå alle events fra da vi her henter nye data og den ellers vil køre igen.
Application.EnableEvents = False

On Error GoTo Slut

'check om den indtastede celle er i Trange
If Not Intersect(Target, Trange) Is Nothing Then
'Hvis cellen ikke er tom (blevet slettet)

If Len(Target.Value) = 0 Then
'Target.EntireRow.ClearContents
Dim Msg, Style, Title, Ctxt, Response, MyString
Msg = "Ønsker du at slette rækken?" ' Define message.
Style = vbYesNo + vbDefaultButton2 ' Define buttons.
Title = "Meddelelsesbox" ' Define title.
Response = MsgBox(Msg, Style, Title)
If Response = vbYes Then
Target.Offset(0, 1).ClearContents
Target.Offset(0, 2).ClearContents
Target.Offset(0, 3).ClearContents
Target.Offset(0, 4).ClearContents
Target.Offset(0, 5).ClearContents
Target.Offset(0, 6).ClearContents
Target.Offset(0, 7).ClearContents
Else
Target = BeforeVal 'NY Indsætter den gamle værdi igen
End If

End If

End If
Application.EnableEvents = True
Exit Sub

'slå events til igen
Slut:
Application.EnableEvents = True
MsgBox ("Fejl fundet")
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
BeforeVal = Target.Formula 'NY Fanger gammel værdi

End Sub
Avatar billede steensommer Praktikant
19. januar 2004 - 01:28 #2
Hej kabbak
Nå du er i lige så høj grad som undertegnede en natteravn - dejligt at du gider kigge på det.
Det fungerer ikke helt. Den sletter blot den celle (i Kolonne A) man står i - ingen spørgsmål fremkommer og resten af rækken slettes ikke!
Avatar billede kabbak Professor
19. januar 2004 - 01:36 #3
den virker er testet

hvis du siger nej til at slette rækken, genskabes værdien i A kolonnen

Har du fået det hele med

den her
Public BeforeVal As String 'NY global variabel for gammel værdi

og denne

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
BeforeVal = Target.Formula 'NY Fanger gammel værdi
End Sub

og de par linier i din kode

Else
Target = BeforeVal 'NY Indsætter den gamle værdi igen
Avatar billede steensommer Praktikant
19. januar 2004 - 01:41 #4
Undskyld kabbak - den lavede en fejl første gang hvor jeg ikke havde fået Selection_Change med.
Derfor var jeg nødt til at køre en sub med Application.enableevent = True - nu kører det ---> skide godt.

Svar og du får point. Tak for hjælpen igen
Avatar billede kabbak Professor
19. januar 2004 - 01:44 #5
Du skal nok lige ændre til denne, for ellers får du fejl på arket hvis du makere flere celler på en gang.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Slut
BeforeVal = Target.Formula 'NY Fanger gammel værdi
Slut:
End Sub
Avatar billede steensommer Praktikant
19. januar 2004 - 01:46 #6
Tror du at der er risiko for lidt sammenblanding - jeg har i forvejen noget stående i sub'en pga ønsket om farve af aktive række:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Slut
BeforeVal = Target.Formula 'NY Fanger gammel værdi

Static OldRange As Range
With Target.EntireRow
    .Interior.ColorIndex = 19 ' yellow - change as needed
End With
OldRange.Interior.ColorIndex = xlColorIndexNone
Set OldRange = Target.EntireRow
Slut:
End Sub
Avatar billede kabbak Professor
19. januar 2004 - 01:58 #7
prøv sådan

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Trange As Range
Set Trange = Range("A3: A1000")
If Not Intersect(Target, Trange) Is Nothing Then
  BeforeVal = Target.Formula 'NY Fanger gammel værdi
End If

Static OldRange As Range
With Target.EntireRow
    .Interior.ColorIndex = 19 ' yellow - change as needed
End With
OldRange.Interior.ColorIndex = xlColorIndexNone
Set OldRange = Target.EntireRow

End Sub
Avatar billede kabbak Professor
19. januar 2004 - 01:59 #8
jeg går i seng nu, godnat og tak for point ;-))
Avatar billede steensommer Praktikant
19. januar 2004 - 01:59 #9
Tak for hjælpen igen, godnat
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