VBA-kod excell 2010

Anonym
2019-05-22T13:19:42+00:00

Hej P3excel!

Jag sitter med likartade funderingar som vi haft tidiagre, men i ett annat projekt med ett excelldatablad jag byggt upp för att samla  och koppla innovationsideer från min arbetgrupp.

Min första fundeirng är hur jag enklast skriver kod för att styra inmatad textbeskrivning från "txtÄ1" i formulär (UserForm1) där jag har fyra kategorival som väljs via checkboxar (ChbFörvärv(D), ChbAdmin(E), ChbBuissness(F), ChbModell(G)).

Beroende på vilken av dessa checkboxar som är vald, ska texten i txtÄ1 hamna på Blad1 och antingen i kolumn D, E, F eller G beroende på Chb-valet.

Beorende på om det är ett HELT NYTT "case", dvs nytt innovationsnummer, så ska allt styras ner mot första lediga rad.

Alternativet är att man väljer ett BEFINTLIGT Ino-NR och då ska tetxten styras ner till den raden och dom kolumnerna.

Jag stannar där med mina frågor och hoppas än en gång på ditt ovärderliga stöd i detta.

//MagnusG_68

Microsoft 365 och Office | Excel | För hemanvändning | Windows

Låst fråga. Den här frågan har migrerats från Microsoft Support Community. Du kan rösta på om det är till hjälp, men du kan inte lägga till kommentarer eller svar eller följa frågan.

0 kommentarer Inga kommentarer

51 svar

Sortera efter: Mest användbara
  1. Anonym
    2019-07-06T10:23:56+00:00

    Hej,

    Ja, vi borde vara endast någon "feltryckning" ifårn att allt ska ramla in på bladet när SPARA-knappen används. . . Jag förstår din beskrivning av koden med "If-satsen", och givetvis också att variablerna i detta skede nyttjas för att få in det nya Ino-Nr;et på rätt rad och dess uppräkning vid NYTT. . .

    Jag har gjort dom korrigeringar du nämnt, dock får jag vid test nedanstående felmeddelande;

    I övrigt - är det korrekt att ange "ws.cells(rad, kol) = TxtIno1.Text" så som jag gjort? Det är ju beskrivningstexten som ska in i den kolumn och rad som sätts o kodraderna ovanför. . .

    Förstår inte riktigt vad felmeddelandet åsyftar. . .

    /Hälsning MagnusG_68

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer
  2. Anonym
    2019-07-05T19:22:56+00:00

    Lite vajsing är det fortfarande i koden med att hitta raden. Hela koden du har mellan A1:A1000 och Find ska bort. Det var det vi ersatte med just A1000, dvs att inte gå till sista använda raden i kolumn A.

    Textboxen har du fått in rätt där sökningen efter vald INO görs.

    Men, i och med att du valt alt 2 så måste en del annat göras om, och för att ändå spara tid och ett dussin extra inlägg så visar jag hur det kan se ut. Men, acceptera inte bara koden utan försök gå igenom och se vad den gör så du hänger med.

    If TxtInoNr.Text <> "" Then

            rad = Range("A1:A1000").Find(What:=TxtInoNr.Text, LookIn:=xlValues, LookAt:=xlWhole).Row

    Else

            rad = Cells(Rows.Count, 1).End(xlUp).Row

            nr = Mid(Cells(rad, 1).Value, 7) + 1

            rad = rad + 1

            Cells(rad, 1) = "Ino-NR" & nr

    End If

    Som pseudokod beskrivs koden som följande:

    OM Textrutan för InoNr ej är tom DÅ GÄLLER

      variabeln rad blir det radnummer där innehållet i TxtInoNr påträffas i cellområdet A1:A1000

    ANNARS

      variabeln rad blir det radnummer där sista inskrivna InoNr är, i kolumn A

      variabeln nr ges det numeriska värdet ur sista inskrivna InoNr plus 1 (här bör egentligen Clng användas, vilket konverterar text till tal innan vi plussar med 1, men excel fattar).

      variabeln rad ökas med 1 för att peka på raden efter som är tom (alltså första lediga)

      denna lediga rad får det nya InoNr inskrivet i kol A

    SLUT

    Dessutom, variabeln rad används nu för samtliga inskrivningar som följer i koden efter ovanstående kod.

    Antingen ett påträffat InoNr, eller en ny ledig rad för nytt ärende.

    Du har dock ännu inte ändrat på

    ws.Cells(rad, 1) = TxtInoNr.Text

    Det nya InoNr skrivs nu in med den nya kod du fått, och det borde stå något som skriver in ärendetexten istället, dvs det som ska in på kol 4-20.

    T ex, ws.Cells(rad, kol) = txtÄ1.Text (eller vad din ärendetext heter som objekt).

    Nu tror jag du är nära. Med "spara" i alla fall.

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer
  3. Anonym
    2019-07-05T19:19:41+00:00

    Fick felmeddelande när jag svarade på inlägget.

    Provar snart igen...

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer
  4. Anonym
    2019-07-05T17:13:19+00:00

    Hej,

    Mitt tänk och min bild och programmeringsstrategi för detta inovationsblad är exakt så som du beskriver avslutningsvis ovan, alternativ 2.

    I kolumn A (A6:A1000), ska alla InoNrXX som skapas skrivas in av formuläret. Inga val görs av knappar på Blad 2, utan det görs via formuläret precis som du skriver.

    1. Antingen NYTT InoNR och då är "TxtInorNr" tom när man trycker på SPARA-knappen. . . Här vill jag precis som du skriver, att koden ska förstå att det är ett NYTT ärende och letar upp lämplig rad (första lediga). Det vi (jag) då också måste få till är ju att koden lägger in nästa "littera/InoNr-id" korrekt, dvs om det föreg numret är ex "InoNr-34", så ska alltså koden plussa på "1" och skriva in "Ino-NR35" på den lediga raden i kolumn A.
    2. Befintligt InoNr plockas fram via SpnBut och visas i TxtInoNr-boxen med all tillhörande data i dom fält och boxar m.m som tillhör. Redigering görs och uppgifterna på den rad som InoNr:et tillhör uppdateras när SPARA-knappen används. Här ska då kodningen styras av valet i TxtInoNr-boxen precis som du nämner.

    Det är så här jag tänkt och vill ha det. 

    Jag gjorde dock en lite "test" på eget bevåg och skriv in ett nummer i textboxen. Jag hade dessförinnan försökt rätta till den felaktiga kodraden som vi nämnt ovan.

    När jag tryckte på SPARA-knappen stannade körningen på just den raden och markerade "fel" - se nedan:

    Hur tar vi detta härifrån ?? Känns ändå som att vi är rätt nära en lösning.  . . hur än konstigt det kan låta i dina öron med tanke på min ringa erfarenhet av VBA-kodning på den här nivån. . .  :)

    /Hälsning MagnusG_68

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer
  5. Anonym
    2019-07-03T08:22:17+00:00

    Den långa harangen markerat i rött på din bild är som du förstått inte rätt.

    Om du kollar koden i inlägget som du skickade in den 1 juli så ska det vara ungefär så, med skillnaden att vi satte maxrader till 1000 - som du gjort rätt, och att vi ska byta ut var INO-nr finns. Du har fått med Find två ggr. Kolla tidigare kod, det som ska ändras är det jag tidigare markerade i rött. Vad det ska ändras till kommer jag till längre ned.

    Angående C1 (eller B2) så nämnde jag att detta INTE ska gälla, utan du måste skriva var någonstans det går att läsa ur vilket INO-nr som gäller.

    Jag sökte i C1 eftersom det var så jag testade koden, och du har B2 eftersom det var där INO-nr fanns i begynnelsen innan du städade. Nu ska det vara skrivet den position där INO-nr är i dagsläget. Och enligt din bild är det textrutan uppe till höger med rubriken Innovationsnummer (Id):

    I och med att platsen för INO-nr flyttats från en tidigare cellposition till en textruta på ditt Userform så ska den tidigare delen i koden där det stod ws.Range("B2").Value ändras till exempelvis TextBox1.Text (där textbox1 är namnet på den textruta som visar INO-nr). En reservation här är att rutan kan vara tom, vilket cell B2 inte var eftersom man valde nytt INO eller befintligt innan man gick in i Userform. Här kanske koden måste ändras, men det beror på hur du väljer att hantera textrutans innehåll. Dvs ska användaren först behöva välja INO-nr - antingen befintligt, eller klicka för ett nytt ärende så nytt nummer hamnar i boxen. Eller kan rutan vara tom? Om rutan kan vara tom måste koden för sökning av raden efter valt INO-nr ändras (det finns ju inget att söka efter).

    Som jag ser det kan du välja två spår.

    1. Textrutan för INO-nr måste alltid väljas av användaren innan man matar in data, oavsett nytt eller befintligt ärende. Om det är befintliga ärenden så skrollar man fram till det man vill ha, och om det är nytt klickar man (på en knapp som måste läggas till - fanns förut på excelbladet). I båda fallen hamnar sen ett INO-nr i textrutan, vilket används för sökning.
    2. Användaren skrollar fram till önskat INO-nr om ett befintligt ärende ska justeras. Om det är ett nytt ärende lämnas rutan tom och data matas in i informationsfälten för ärendet. Därefter klickar man på spara, och om textrutan är tom förstår koden att det är ett nytt ärende och letar upp lämplig rad, annars hittas raden genom att söka korrekt rad via numret i textrutan.

    Koden i dagsläget (den harang du brottas med) gäller för punkt 1. Om du väljer punkt 2 behövs lite justeringar, men det är bara en If-sats, så det krånglar inte till det eftersom efterföljande If-sats med If Not c försvinner.

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer