Avatar billede Rune Sommer Mester
14. januar 2010 - 17:32 Der er 15 kommentarer og
1 løsning

Sortering af låste celler evt. med VBA

Jeg har et regneark hvor alle næsten alle celler er u-låste. De eneste celler der er låst (når jeg aktiverer ark-beskyttelsen) er matrixen (E3:F300).
Jeg har optaget en makro (før jeg har aktiveret ark-beskyttelsen) der sorterer matrixen (A3:R300) i henhold til søjle F. Dette virker fint så længe ark-beskyttelsen ikke er slået til. Men når jeg låser arket, virker min makro-knap ikke længere.

Min test-fil ligger her:
http://www.gratisupload.dk/download/38801/

Det allerbedste vil være, hvis det låste (som beskrevet ovenfor) excel-ark kan auto-sortere matrixen (A3:R300) hver eneste gang jeg redigerer i en celle. Jeg har læst mikro lidt om VBA-programmering, men læst mange steder, at man kan rigtig meget med VBA.

Så sidder der nogen med VBA/Makro-erfaring der kan auto-sortere et delvist låst excel-ark, hver gang man redigerer en celle, vil jeg rigtig gerne vide hvordan man kan gøre dette.

Mvh. Rune
Avatar billede excelent Ekspert
14. januar 2010 - 17:41 #1
Kan du ikke blot tillade sortering når du beskytter arket
Avatar billede Rune Sommer Mester
14. januar 2010 - 17:49 #2
Jeg har forsøgt dette. Uden succes desværre. Jeg ved ikke om det er på grund af at matrixen der skal sorteres både indeholder låste og ulåste celler.
Avatar billede excelent Ekspert
14. januar 2010 - 18:04 #3
ok må jeg lige se din kode, så skal jeg rette den til
Avatar billede Rune Sommer Mester
14. januar 2010 - 18:10 #4
Jeg har lagt et link til excel-arket øverst i spørgsmålet. Deri er det hele. De små makro-optagelser jeg har lavet i de to ark hedder blot:



Sub SortFD()
'
' Makro11 Makro
' Makro indspillet 14-01-2010 af Rune Vang Thomsen
'
' Genvejstast:Ctrl+w
'
    Range("A3:Q300").Select
    Selection.Sort Key1:=Range("F3"), Order1:=xlDescending, Key2:=Range( _
        "D3"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _
        :=True, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
        DataOption2:=xlSortNormal
    Range("A3").Select
End Sub



og 




Sub SorterProvider()
'
' SorterProvider Makro
' Makro indspillet 14-01-2010 af Rune Vang Thomsen
'
' Genvejstast:Ctrl+e
'
    Range("A2:C50000").Select
    Selection.Sort Key1:=Range("B2"), Order1:=xlDescending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Range("A2").Select
End Sub
Avatar billede excelent Ekspert
14. januar 2010 - 18:20 #5
Skal lige vide i hvile celler du evt. retter i begge ark
Avatar billede Rune Sommer Mester
14. januar 2010 - 18:26 #6
I fanebladet: "Provider" skal al min data skrives.
I fanebladet: "Kunde bestillinger" skriver jeg KUN varenummeret (Søjle D). Ud fra varenummeret henter Søjle E og F deres data fra fanebladet "Provider".

Hvis det giver nogen mening :)

Det handler altså om at skrive de rå data ind i "provider", og så lade det andet faneblad hente data derfra.
Avatar billede excelent Ekspert
14. januar 2010 - 18:41 #7
Højreklik på K.B arket's fane
Vælg Vis programkode og indsæt koden der
Koden kører (sorterer) hver gang du ændrer noget i området D3:D5000

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("D3:D5000")) Is Nothing Then Exit Sub
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=False, AllowSorting:=True
    Range("A3:Q300").Select
    Selection.Sort Key1:=Range("F3"), Order1:=xlDescending, Key2:=Range( _
        "D3"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _
        :=True, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
        DataOption2:=xlSortNormal
    Range("A3").Select
ActiveSheet.Unprotect
End Sub

Højreklik på Provider's arkfane
Vælg Vis programkode og indsæt koden der
Koden kører (sorterer) hver gang du ændrer noget i området D3:D50000

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A2:C50000")) Is Nothing Then Exit Sub
    Range("A2:C50000").Select
    Selection.Sort Key1:=Range("B2"), Order1:=xlDescending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Range("A2").Select
End Sub
Avatar billede Rune Sommer Mester
14. januar 2010 - 18:52 #8
I din første kode-stump får jeg en error.
Hvis arket er ubeskyttet, så får kode-stumpen arket til at blive beskyttet efter en ændring af en af cellerne.
MEN.
Jeg får en bug - den sorterer ikke. Men du har ganske vist fået arket til at auto-"et-eller-andet" når jeg ændrer en celleværdi i matrixen.
Avatar billede excelent Ekspert
14. januar 2010 - 18:53 #9
ups fik lige byttet om på beskyttelsen :-)

i KB arket denne

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("D3:D5000")) Is Nothing Then Exit Sub
ActiveSheet.Unprotect
    Range("A3:Q300").Select
    Selection.Sort Key1:=Range("F3"), Order1:=xlDescending, Key2:=Range( _
        "D3"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _
        :=True, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
        DataOption2:=xlSortNormal
    Range("A3").Select
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=False, AllowSorting:=True
End Sub
Avatar billede Rune Sommer Mester
14. januar 2010 - 18:59 #10
I det andet ark "provider" auto-sorterer den hver gang en celle ændres i matrixen (A3:A5000) Hvilket er super fint. Der er dog heller ikke nogen celler som er beskyttede.


Hvsi jeg vil have "provider" til kun at auto-opdatere ved indtastning i søjle C, er det så ikke sådan her det skal se ud?


Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C2:C50000")) Is Nothing Then Exit Sub
    Range("A2:C50000").Select
    Selection.Sort Key1:=Range("B2"), Order1:=xlDescending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Range("A2").Select
End Sub
Avatar billede excelent Ekspert
14. januar 2010 - 19:06 #11
jo præcis

skal den også kodes til at auto beskytte arket ?
Avatar billede Rune Sommer Mester
14. januar 2010 - 19:07 #12
Nu virker det i begge ark. Og jeg har testet, at jeg blot kan ændre de celler der får arket til at auto-sortere:

If Intersect(Target, Range("C2:C50000")) Is Nothing Then Exit Sub

1000 tak for assistancen. Nu har jeg tilmed noget mere jeg kan eksperimentere ud fra. Synes det der VBA er svært at komme rigtigt i gang med (uden bøger og kurser).

Hvis jeg kunne give dig 1000 points havde du fået det!
Men læg et svar - så kan jeg berige dig med 150 af slagsen.

Igen tak for din hurtige assistance - og dine korte og præcise forklaringer.

Mvh. Rune
Avatar billede Rune Sommer Mester
14. januar 2010 - 19:09 #13
Nej, ark 2 behøver ikke at blive auto-beskyttet. Så skal det vel u-beskyttes hver gang man skal skrive noget nyt i det? eller?
Avatar billede excelent Ekspert
14. januar 2010 - 19:15 #14
ja som du ser i det andet arks kode, der fjernes beskyttelsen i linie 3 og sættes igen i næst sidste linie,
Men hvis ikke det er nødvendigt, er det naturligvis bedst at undgå

velbekom
Avatar billede Rune Sommer Mester
14. januar 2010 - 19:59 #15
Hvis jeg må komme med et tillægsspørgsmål ang. beskyttelsen af arket. Så har jeg fundet ud af hvordan (hvis arket er beskkyttet med en kode) at VBA-koden kan låse arket op ved at skrive

ActiveSheet.Unprotect Password:="DAK"  (eksempel)

Man kan sikkert også få VBA-koden til at sætte koden tilbage igen, så koden ikke blot er blank.

Men i alle tilfælde kan jeg stadig højreklikke på fanebladet og se "programkode" - hvori kodeordet jo står. Og så er der jo ikke meget fidus ved at have en kode længere?

Jeg tænker på - kan "vis programkode" beskyttes, så man ikke kan se koden derfra? Eller er vi så ude i noget helt andet?

Det er ikke vigtigt. Jeg er blot nysgerrig, nu hvor jeg har lært lidt :)

Mvh. Rune
Avatar billede excelent Ekspert
14. januar 2010 - 20:23 #16
Ja man kan godt skjule/beskytte koden i VBA (intet er dog 100% sikkert)

I VBA-editoren (ALT+F11) vælger du VBAProject Properties.. i menuen Tools
Under fanen Protection sætter du flueben ved "Lock Project for viewing" og indtaster et kodeord
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