Avatar billede folj Forsker
06. maj 2014 - 12:00 Der er 2 kommentarer og
1 løsning

Nogen der kender problemet med at rækker blever slettet delvist.

Vi har nogle excel-ark der styrer eksempelvis rettelser vi skal have foretaget i forskellige procedurer. Der er rigtig mange brugere af arket, og de er ikke lige meget excel-hajer allesammen.

Forestil dig at vi har et stort ark, hvor kolonne A er den unikke ID. Det kan være dato, dokumentnummer eller alt muligt andet, der danner rækkens unikke id.
Hvis det så er en excel-spasser der markerer nogle cellerne B til Z i en række, højreklikker og vælger delete, så vil excel fjerne de markerede celler, og brugeren får muligheden for at vælge om excel skal rykke de øvrige celler op.
Så bliver resultatet at cellerne B til Z i de nedenfor-liggende rækker bliver rykket en plads op, men det resulterer i at data i de rækker er rykket en plads jo ikke passer med den unikke id, som rækken har.

Dette kan ødelægge alle ens data, som måske kun var forankret det ene sted.
Udover at lave back-ups, hvordan sikrer man sig imod, at excel-spassere får mine data "fucked up" på denne måde - kan man overhovedet sikre sig på en men måde - evt vha. VBA.
Avatar billede madklub Guru
06. maj 2014 - 13:06 #1
Lås og beskyt arket.
Avatar billede folj Forsker
02. juni 2014 - 09:07 #2
Jeg har kun dårlige erfaringer med låste ark.
Jeg har oplevet andre uhensigstsmæssige begrænsninger på låste ark.

Jeg har selv udviklet en anden løsning.
Indsatte et 1-tal i alle de første 256  celler i række 65536

Herefter afvikler jeg en makro hver gang der er ændringer i ark.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  If ChectLastRowIntact Then
  Else
    MsgBox "Den eller De rækker du har slette er kun slettet delvist" & Chr(10) & "Derfor får du ikke lov til at gemme ændringerne " & Chr(10) & "Filen lukker nu..."
    ThisWorkbook.Saved = True ' hvis der er ændret kommer den ikke og spørger om gem
    ThisWorkbook.Close ' lukker uden at gemme
  End If
End Sub


Min function 'ChectLastRowIntact' ser sådan ud:
Function ChectLastRowIntact()
' tjekker at der står 1-taller i hele række 65536

    ChectLastRowIntact = True ' sætter defaultværdien til true

Dim LastRowArrayValues As Variant

LastRowArrayValues = Range("Row65536") ' hiver alle værdierne ind i et array der kan gennemløbes på no time
  For i = 1 To 256
    If LastRowArrayValues(1, i) <> 1 Then
      ChectLastRowIntact = False
    End If
  Next i
End Function


Ovennævnte gør at hvis brugeren sletter en række delvist, så vil rækken af 1-taller i række 65536 blive brudt, og det bliver registreret straks, hvorefter brugeren informeres og filen lukke uden at gemme...
Avatar billede folj Forsker
02. juni 2014 - 09:15 #3
@madklub...
Nu endte jeg jo med at afvise dit svar, og jeg må nok hellere uddybe mit svar lidt, selvom jeg ikke lige kan komme på konkrete eksempler hvor jeg vil opleve de begrænsninger på låste ark so jeg nævnte.

For de andre opgaver brugerne udfører vil gøre det svært for mig at styre hvad der skal være låst, og ikke låst.

Jeg synes jeg er meget mere tryg ved at gøre det andet med at tjekke en række langt nede i arket om celler har flyttet sig, og så lukke filen uden at gemme.

Nu tester jeg det i en periode, og ser om der er uhensigtsmæssigheder forbundet med det.
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