När jag känner att jag tappat tråden brukar det vara för att man antingen har för många saker man inte vet hur man ska tackla, eller att man missat vad som egentligen är viktigt att fokusera på - steg för steg. Ibland får man ta en sak och bara fokusera
på det. Sen nästa, och nästa. (Detta är exakt samma princip som när man försöker bygga upp avancerade formler på bladet som innehåller många olika funktioner i samma formel - fokusera på vad varje enskilt steg ska åstadkomma. Hmmm, här gled vi lite utanför ämnet, men Excel handlar om struktur.)
Jag skrev om lite i koden, nu med de X som ska in. Och jag försöker nu lotsa dig igenom detta utifrån ett fokusperspektiv där koden följer vad som är viktigt att sätta - i rätt ordning.
Innan vi går in på själva koden vill jag återigen poängtera enkelheten, dels för användare, men även för dig som ska koda. Att ha två knappar för att mata in innovationstext/ärenden känns väl lite sisådär. Som användare skulle jag bara vilja skriva in min
info, oavsett om det är ett nytt ärende eller om jag uppdaterar ett gammalt ärende. Sen trycker jag bara på "Spara", punkt. Som programmerare kommer du få mer besvär om du behöver i princip samma sak som ska utföras men på flera ställen (flera knappar). Banta
så mycket det går, håll det enkelt för alla inblandade. Och när jag menar enkelt så menar jag ur användarperspektiv. Ur kodperspektiv kan det vara ruggigt avancerat så länge det gynnar användningen.
Ok, koden då.
För att ta upp den tappade tråden så är tankeordningen ungefär:
- 1, ta reda på vilken rad ska data hamna i. Detta styr var data landar ärendemässigt då hela raden motsvarar ett enskild innovation. Variabeln
rad innehåller värdet för gällande radnummer.
- 2, vilken kolumn hamnar data i (vad har användaren valt för kategori). Variabeln
kol innehåller värdet för gällande kolumn.
- 3, skriv in användartext på position enligt ovan
- 4, hantera markeringar, dvs X. Varje Checkbox är direkt synkat mot en specifik kolumn, förutom Teknik där vi återigen använder samma princip som i punkt 2 för att ta reda på vilken kolumn (AA:AD) som gäller.
Koden nedan följer punkterna ovan
Observera att jag har inte alla OptBut med i koden, du får fylla på med de du har. Samma sak med Checkbox länge ned, vilka du får justera namnen på också.
Sub CmdNy_Click()
Dim ws As Worksheet
Dim c As Range
Dim kol As Long
Dim rad As Long
Set ws = Worksheets(1)
'1. sätt raden för vald innovation/ny innovation
Set c = ws.Range("A1:A" & ws.Cells(Rows.Count, 1).End(xlDown).Row).Find(what:=ws.Range("B2").Value, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then 'träff finns
rad = c.Row
Else 'ingen träff
rad = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
End If
'2. sätt kolumnen för vald huvudkategori
Select Case True
Case Opn1.Value: kol = 4
Case Opn2.Value: kol = 5
Case Opn3.Value: kol = 6
Case Opn4.Value: kol = 7
End Select
'3. skriv in texten för innovationen på funnen rad och kol
ws.Cells(rad, kol) = "text"
'4. kontrollera de övriga Chb för ev X som ska sättas
If CheckBox1 Then ws.Cells(rad, 22) = "X"
If CheckBox2 Then ws.Cells(rad, 23) = "X"
If CheckBox3 Then ws.Cells(rad, 24) = "X"
If CheckBox4 Then
Select Case True
Case Opn15.Value: kol = 27
Case Opn16.Value: kol = 28
End Select
ws.Cells(rad, kol) = "X"
End If
End Sub
En sak till som inte är med i koden är radering av raden om man valt att enbart ändra i en befintlig innovation.
Exempelvis, om man ändrar ett kryss för en innovation kommer ett X skrivs för den nya kolumnen, men hur vet man om ev tidigare kryss ska vara med? Raderar man detta manuellt? Ett normalt förfarande då all info finns när du valt
en tidigare innovation är att radera allt på raden och sen skriva in det som finns när man klickar spara. Då kommer endast det som valts. Men det handlar ju om hur man vill att hanteringen ska gå till.
Testa och se om du kan få ovanstående kod att rulla så du kommer nåt steg framåt.