Avatar billede Peter Praktikant
14. november 2003 - 13:17 Der er 21 kommentarer og
1 løsning

Fjerne linjer fra tabel i protected sheet.

Hej
Jeg har et regneark med et advanced filter.
Dette filter laver en tabel i sheet1. Nu ligger det så sådan at jeg gerne vil kunne fjerne nogle af linjerne fra tabellen. Dette kunne jo gøres ved at highlighte linjen og vælge delete fra højrekliksmenuen. Men da sheet'et er protected kan det jo ikke lade sig gøre.
Jeg vil så gerne have det sådan, at hvis man dobbeltklikker på en celle i søjle A slettes denne linje. Jeg tænker det kan gøres med visual og jeg kunne nok også godt selv lave det med 20 funktioner, en for hver celle i søjle A. Men kan man lave det sådan, at hvis man højreklikker på en celle i A7:A28 fjernes den linjer man har klikket på?
Avatar billede Peter Praktikant
14. november 2003 - 13:18 #1
Det jeg havde i tankerne var, at sheet'et blev unprotected ved dobbeltklik i rangen og linjen der korresponderer til den aktive celle så blev slettet. Sheet protectes til slut.
Avatar billede janvogt Praktikant
14. november 2003 - 13:25 #2
Om du kan gøre det med et dobbeltklik tror jeg måske ikke, men du kan ihvertfald gøre det v.h.a. en makro, som først slår arkbeskyttelsen fra, derefter sletter den valgte linie og til sidst slår beskyttelsen til igen.
Avatar billede Peter Praktikant
14. november 2003 - 13:39 #3
men så kan jeg vel bare lade visual lytte efter dobbeltklik den celle og så køre makroen derfra:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
If Not Intersect(Target, Range("A6")) Is Nothing Then
    Call delRow
End If
End Sub

Men problemet er, at jeg så skal lave 20 makroer, en for hver linje jeg vil have mulighed for at slette. Ligeledes skal jeg lave 20 stykker kode. Derfor ville jeg gerne lave et stykke kode der sletter linjen ved dobbeltklik på den.
Avatar billede Peter Praktikant
14. november 2003 - 13:41 #4
ved dobbeltklik
slå arkbeskyttelse fra
variabel = aktiv cellenummer
delete row_variabel
slå arkbeskyttelse til

Sådan nogenlunde må pseudokoden se ud, jeg kan bare ikke finde ud af visual basic og er slet ikke klar over om det kan lade sig gøre.
Avatar billede janvogt Praktikant
14. november 2003 - 13:49 #5
Følgende kode sletter den valgte linie:
Selection.EntireRow.Delete

Denne kode fjerner password:

Dim WS As Worksheet
    For Each WS In ActiveWorkbook.Worksheets
        WS.Unprotect Password:="petter"
    Next WS
    ActiveWorkbook.Unprotect Password:="xxx"

og denne kobler den på igen:


    For Each WS In ActiveWorkbook.Worksheets
        WS.Protect Password:="petter"
    Next WS
    ActiveWorkbook.Protect Password:="xxx"
Avatar billede Peter Praktikant
14. november 2003 - 14:00 #6
If Not Intersect(Target, Range("A7:A50")) Is Nothing Then
    Worksheet.Unprotect
    Selection.EntireRow.Delete
    Worksheet.Protect
End If

Men det virker ikke. Den midterste linje virker fint, men det er ophævelse af beskyttelse der ikke virker. Jeg behøver vel ikke unprotecte hele workbook'en (det er kun det aktive sheet der er protected).
Avatar billede janvogt Praktikant
14. november 2003 - 14:15 #7
Nej, du behøver ikke unprotecte hele workbooken.

Arket skal være beskyttet, når du kører makroen.

Prøv evt. at fjerne If-sætningen og sætte koden ind i en almindelig Sub-End sub blok.
Avatar billede Peter Praktikant
14. november 2003 - 14:17 #8
løst ved at ændre til ActiveSheet.Unprotect
Avatar billede janvogt Praktikant
14. november 2003 - 14:17 #9
Prøv at bruge ActiveSheet.Unprotect i stedet.
Avatar billede janvogt Praktikant
14. november 2003 - 14:18 #10
Hehe
Avatar billede Peter Praktikant
14. november 2003 - 14:18 #11
If Not Intersect(Target, Range("A7:A50")) Is Nothing Then
    ActiveSheet.Unprotect
    Selection.EntireRow.Delete
    ActiveSheet.Protect
End If

Sådan ser koden ud, den fungerer
Avatar billede janvogt Praktikant
14. november 2003 - 14:20 #12
Fint :-)
Avatar billede Peter Praktikant
14. november 2003 - 14:20 #13
OK, det var jo hurtig hjælp, tusind tak for hjælpen endnu engang.
Avatar billede janvogt Praktikant
14. november 2003 - 14:22 #14
Velbekomme og god weekend :-)
Avatar billede Peter Praktikant
14. november 2003 - 14:22 #15
jo tak, ilm
Avatar billede Peter Praktikant
14. november 2003 - 14:55 #16
En sidste ting, jeg har denne her kode:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
If Not Intersect(Target, Range("A6:H6")) Is Nothing Then
    ActiveSheet.Unprotect
    Range("A6:I50").sort Key1:=Range("A7"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
  ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
End Sub

Den sorterer tabellen efter indgang A7 ved dobbeltklik på en af overskrifterne. Hvordan kan man gøre det sådan at den sorterer efter den celle der svarer til cellen under den celle der er klikket i?
Altså hvis jeg klikker på B6 så sorterer den efter B7.
Avatar billede Peter Praktikant
14. november 2003 - 15:05 #17
Det er klaret:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
If Not Intersect(Target, Range("A6:I6")) Is Nothing Then
    ActiveSheet.Unprotect
    Range("A6:I50").sort Key1:=ActiveCell, Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
  ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
End Sub
Avatar billede Peter Praktikant
14. november 2003 - 15:12 #18
Men jeg ville gerne vide hvordan jeg kan sætte rangen til at gå fra A6 og hele vejen ned uden at skulle sætte den til A6:A65536 eller hvor meget det nu er. Kan man gøre sådan at rangen går fra A6 til sidste celle med indhold? Kan man også gøre det med navngivne områder? Jeg bruger advanced filter og der har jeg jo en database, denne er ikke fast størrelse, så derfor har jeg måtte lave området database noget større end indholdet er pt, kan det løses?
Avatar billede janvogt Praktikant
14. november 2003 - 16:25 #19
Ja, det tror jeg.
Du kan lave et navngivent område, som du selv skriver, hvor du definerer et dynamisk område v.h.a. formlen OFFSET(FORSKYDNING).
I VBA-koden kan du så bare henvise til dette navn.
Avatar billede Peter Praktikant
14. november 2003 - 16:29 #20
kan du forklare det lidt nærmere, hvordan kan jeg navngive et område som går fra a6:I(sidste celle med indhold)?
Avatar billede Peter Praktikant
14. november 2003 - 16:37 #21
Nu tror jeg at jeg har ramt det sidste problem:
http://www.eksperten.dk/spm/427565
Hvis du vil være behjælpelig vil det være meget værdsat.
Avatar billede Peter Praktikant
14. november 2003 - 18:12 #22
sådan, Google var min ven, jeg har fundet ud af hvordan man navngiver ved brug af offset, det er smart.
Arket er nu færdigt og spiller max, mange tak for hjælpen.
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