21. december 2006 - 18:26Der er
29 kommentarer og 1 løsning
Funktion af kommandoknap
Hej!
Det kan være det bliver lidt kompliceret at forklare, men here goes:
I et ark, der fungerer som regnskab for spil på internettet, har jeg oprettet 5 rækker (rk. 10-14), hvor man i kolonnerne C-L indtaster data for de enkelte aktive spil. Hver af de 5 rækker er ét spil. Dvs. når man har et spil i gang, der ikke er afgjort skriver man det ind i den øverst ledige af de 5 rækker. Når spillet så er afgjort, indtaster man resultatet ("Win" eller "Loss") i kolonne K.
OK. Nedenunder de 5 rækker for aktive spil har jeg oprettet 500 rækker for afgjorte/tidligere spil, startende fra rk. 25. Samme kolonner som ovenfor.
En kommandoknap (kontrolelement) skal fungere på følgende måde: Når knappen aktiveres, skal de rækker hvor kolonne K er udfyldt (altså afgjorte spil), flyttes/kopieres fra de 5 rækker til den nedenstående liste, på øverst ledige plads. Samtidig skal de slettes fra "Aktive spil"-rækkerne, så der er plads til nye spil.
Håber det giver lidt mening. Ellers kan jeg godt sende mit ark...!?
Sub Flyt() For t = 10 To 14 x = Cells(525, 11).End(xlUp).Row + 1 If x < 25 Then x = 25 If Cells(t, 11) <> "" Then Range("C" & t & ":L" & t).Cut Range("C" & x) End If Next End Sub
Sub Makro1() For t = 10 To 14 x = Cells(25, 11).End(xlDown).Row - 1 If x > 525 Then x = 525 If Cells(t, 11) <> "" Then Range("C" & t & ":L" & t).Cut Range("C" & x) End If Next End Sub
Hmm... Kan ikke få det til at virke. Jeg har indsat ovenstående i programkoden for kommandoknappen, og afsluttet designtilstanden. Er det rigtigt? Som sagt skal den kun flytte rækken ned, hvis der er indtastet noget i rækkens K-celle.
ok har ændret lidt i koden, så den ikke ændrer på dit format nederste linie sættes i række 525 ret i 4 linie i koden hvis det skal være en anden
Private Sub CommandButton1_Click() For t = 10 To 14 x = Cells(25, 11).End(xlDown).Row - 1 If x > 525 Then x = 525 ' ret 525 begge steder hvis... If Cells(t, 11) <> "" Then Range("C" & t & ":L" & t).Copy Range("C" & x) Range("C" & t & ":L" & t).ClearContents End If Next End Sub
Første afgjorte spil skal til række 25, andet til 26 osv. Men faktisk tænkte jeg på, om ikke man kan gøre et eller andet, så man arrangerer de afgjorte spil i række 25-525 efter dato, altså med den laveste datoværdi øverst...? Så vil det jo være ligemeget hvor den indsætter rækken, hvis de alligevel bagefter bliver sorteret efter dato...
Private Sub CommandButton1_Click() For t = 10 To 14 x = Cells(525, 11).End(xlUp).Row + 1 If x < 25 Then x = 25 If Cells(t, 11) <> "" Then y = Range("C" & t & ":L" & t).Value Range("C" & x & ":L" & x) = y Range("C" & t & ":L" & t).ClearContents End If Next End Sub
Fint. Det ville jo også være fint, hvis der blev sorteret i de 5 øverste rækker. F.eks. hvis man har 3 aktive spil, og det andet bliver afgjort. Så vil de to spil der er tilbage stå i første og tredje række... Bare lidt kosmetik... :o)
Private Sub CommandButton1_Click() For t = 10 To 14 x = Cells(525, 11).End(xlUp).Row + 1 If x < 25 Then x = 25 If Cells(t, 11) <> "" Then y = Range("C" & t & ":L" & t).Value Range("C" & x & ":L" & x) = y Range("C" & t & ":L" & t).ClearContents End If Next x = Cells(525, 11).End(xlUp).Row Range("C25:L" & x).Select Selection.Sort Key1:=Range("C25"), Order1:=xlAscending, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal Range("C10:L14").Select Selection.Sort Key1:=Range("C10"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal Range("C10").Select End Sub
Det er supernice! :o) Et sidste lille problem...: Når den rykker den tredje række op (Active bets) efter at den anden er fjernet, tager den formateringen med igen... :o/
Private Sub CommandButton1_Click() Application.ScreenUpdating = False For t = 10 To 14 x = Cells(525, 11).End(xlUp).Row + 1 If x < 25 Then x = 25 If Cells(t, 11) <> "" Then y = Range("C" & t & ":L" & t).Value Range("C" & x & ":L" & x) = y Range("C" & t & ":L" & t).ClearContents End If Next x = Cells(525, 11).End(xlUp).Row Range("C25:L" & x).Select Selection.Sort Key1:=Range("C25"), Order1:=xlAscending, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal
For t = 10 To 14 Step 2 Range("C" & t & ":L" & t).Interior.ColorIndex = 24 Range("C" & t + 1 & ":L" & t + 1).Interior.ColorIndex = xlNone Next
For t = 25 To 524 Step 2 Range("C" & t & ":L" & t).Interior.ColorIndex = 24 Range("C" & t + 1 & ":L" & t + 1).Interior.ColorIndex = xlNone Next Application.ScreenUpdating = True End Sub
Yes, næsten perfekt! Nu lader det til, at formatet for visningen af datoen i række 25-525 er låst...! Den er ikke den samme som de 5 øverste rækker, og jeg kan ikke ændre den....!?
Hmm. Faktisk er der én ting til. De 5 øverste rækker: Data i kolonne L udregnes via en formel, der er afhængig af hvad der indtastes i kolonne K. Når Rækken flyttes slettes denne formel også. Kan man gøre noget ved det?
Brugerformateret? Ja, jeg har været inde og ændre formatet til Dansk 14.3.01, og jeg ville gerne have dette format i begge lister, altså faktisk hele kolonne C.
Tak for det, excelent! Det er helt perfekt! Så tror jeg der er styr på det hele... :o) Hvis ikke du har en løsning på datoformateringen, går det nok. Jeg har ikke lavet et brugerdefineret datoformat, hvis det var det du mente? Det er et af standardformaterne...
ok jeg ville nok formatere kolonne C med følgende format dd-mm-åå
Synes godt om
Ny brugerNybegynder
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.