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-10T11:03:10+00:00

    Bra att det hoppade rätt till slut.

    Angående fortsättningen så måste det läggas upp på så sätt som frågor på forum normalt hanteras. Det här har blivit lite för omfattande med alltför många sidospår i samma tråd. Tanken med forum är ju att andra också kan ta nytta en enskilda frågor som ställs, vilket blir svårt när det är hela koncept som diskuteras.

    Så för ditt nästa steg som du nämnde senast borde du försöka skapa kod som just lägger in text från bladet utifrån valt InoNr. Detta är inte så långt ifrån det vi just har gjort tidigare, bara att informationen går åt andra hållet - från celler till textrutor, så ta hjälp av tidigare kod och fundera hur det kan gå till.

    Anledningen till att du bör skriva koden själv, vilket jag påpekade för några inlägg sedan, är att det blir lättare att styra upp det till enskilda frågor du kan ställa, och att du lär dig skriva kod efter behov.

    Du sa att du förstår det jag beskriver, men (utan att vara för hård) du måste kunna ta fram egen kod också. För mig är det skillnad mellan att veta och förstå. Lär ett barn vad 8 gånger 8 är, den kan lära sig utantill hela gångertabellen utan att förstå multiplikation. Men att förstå konceptet gör att man kan multiplicera vilka tal som helst utan att först ha lärt sig svaren på alla kombinationer. Barnet vet vad 8x8 är, men förstår den varför? Jag känner lite samma sak. Inte för att jag tvivlar på att du förstår när du får koden, men jag ser inga frågor baserat på kod du själv försökt ta fram, så jag vet inte var du står.

    Ett gammalt talesätt jag använde i mitt tidigare jobb:

    "Ge en man en fisk och han har mat för dagen. Ge en man ett fiskespö och han har mat resten av livet."

    Jag kan inte ge fisk hela tiden, du måste fiska själv. Men när enstaka problem längs vägen dyker upp, då tar man det i forumet och man svarar på en fråga per tråd. Dyker det upp sidofrågor - ny tråd.

    Du får avsluta denna tråd med att sätta den som löst i och med att knappen Spara nu fungerar, vilket var huvudmålet för denna tråd. Svara inte mer i denna tråd, den är alldeles för lång redan. Ger dig i kast med det nya och var inte rädd om du får låååånga loopar eller annat. När du kör fast i koden, ställ en specifik fråga. Och du, använd relevant rubrik för vad frågan pekar på.

    Hur som helst kommer det att lösa sig.

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer
  2. Anonym
    2019-07-09T08:49:02+00:00

    Hej,

    Jodå, jag försöker verkligen förstå vad resp kodrad utför och står för, tro mig. Det är också mycket tack vare dina förklaringar som jag börjar få en klar förståelse för vad som händer. . . Det är en viss ovana för "mitt öga" att jobba med så mpnga variabler och delvis nya också.

    Även om det för dig kan tolkas på mina svar som om jag inte förstår stegen, så är det inte riktigt så illa. . . ;) Jag är fullt med på hur koden letar upp rad och kolumn utifrån inmatad data på formuläret.

    Jag lyckades hitta felkällan - det var via en systematisk kontroll av objekten på formuläret, där jag utgick ifrån ditt resoneman att något objekt inte är identifierat . . . Det var ju ganska uppenbart att kolumnvärdet blev "0" då kodstrukturen var så tydligt skriven utifrån att all val var tvungna att göras, vilket gjorde mig misstänksam på att något objekt inte var intakt på formuläret. Mycket riktigt så låg det en opBut-knapp ovanpå den ordinarie "Opn1" som jag klickade i när jag gjorde mina tester. Den hette "OptionButton8" och var sålunda inte med i Subrutinen, varför variabeln "kol" blev satt till "0".

    Jag justerade detta och gjorde sedan tre olika tester med tre olika val där jag fick med alla dom valmöjligheter som vi skapat på formuläret. Allt fungerade KLOCKRENT!! Jag är superglad!!

    Nästa steg jag skulle vilja nu ha hjälp med är ju att få Spn-button-knappen på formuläert att bläddra fram alla inlagda Ino-NRXX på bladet. Därtill ska all text och val som hör till - helst - visas på formuläret.

    Övrig fråga: "UnloadMe" - kan jag skriva det längst ner i Subritinen för att stänga formuläret automatiskt när man tyckt på SPARA-knappen?

    /Hälsning MagnusG_68

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer
  3. Anonym
    2019-07-09T08:08:14+00:00

    Om du ger dig själv chansen att hitta problemen så tror jag du skulle lösa det. Jag nämnde vid ett tidigare inlägg att du måste sätta dig in i koden och förstå vad som händer, annars kan du varken utveckla det du vill göra eller som i nuläget hitta de problem som alltid dyker upp när man kodar.

    Tankegången är egentligen rätt simpel, men är man inte med på vad raderna i koden gör, ja då blir det förstås genast knepigare.

    Då du sett att variabeln kol har värdet 0, vilket inte är bra, så måste man tänka:

    "ok, var sätts detta värde?" Jo, i blocket ovanför där du har dina OptBtn.

    "Och vad gör att kol får ett värde?" Ja, beroende på vilken OptBtn användaren valt.

    "Varför får vi 0 då?" Förmodligen för att man inte valt ett alternativ.

    När du kodar, och speciellt låter användare köra programmet, kommer du träffa på många ställen där koden flippar ur för att man inte gjort saker som borde göras, dvs missat några val eller glömt fylla i något som borde fyllts i. Detta måste fångas upp av koden, och du har inget annat val än att lära dig hur det sker. Därför måste du sätta dig in i koden, inte bara för att avlusa den, utan för att täppa till alla luckor och brister som upptäcks när koden körs i praktiken.

    Ett exempel på att täppa till luckan i koden där kol kan bli 0 (för att användaren kan glömma att göra ett val) är att sätta en If-sats före ws.Cells(rad, kol) = TxtIno1.Text som kollar att både rad och kol är skilt från 0. Är någon 0 så utförs inte kodraden och man kan även låta en meddelanderuta ploppa fram med text till användaren som säger "Du har missat välja kategori!".

    Det var bara ett exempel, det är upp till dig hur du fångar alla användarmissar som möjligen dyker upp. Det handlar om att göra en robust kod. Kan användaren göra fel så kommer de att göra fel, så är det.

    (Fortfarande fattar jag inte varför du får "Identifieraren under markören...." som meddelande. Om jag sätter kol till 0 och kör så får jag det gamla välkända Körfel 1004. Det kan vara något annat som ligger och lurar i din dator som inte mår bra.)

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer
  4. Anonym
    2019-07-09T06:32:50+00:00

    Godmorgon,

    Här har avlusningsarbetet startat och skjortärmarna uppkavalde. . . Det som orsakar att koden stannar på raden "ws.cells(rad, kol). . ." verkar vara att variabeln kol får värdet "0". . .  Varför?? Här räcker inte min komopetens till att tolka vidare för åtgärd av felet. . .

    Hälsning; MagnusG_68

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer
  5. Anonym
    2019-07-08T18:42:06+00:00

    Det är nu du behöver köra lite detektivarbete själv genom att kika på de olika variabler och objekt du har i koden.

    När man får fel i koden och en rad blir markerad så börjar man givetvis att kolla alla ingående delar som finns på just den raden.

    Här kan man göra på olika sätt, och det är något man lär sig under vba-resans gång. Du måste själv kolla din kod varför det inte funkar, det är inget jag kan se. Samma kod på min dator körs utan problem, så något gör vi olika.

    Olika sätt att kolla variabler:

    1. Du kan låta variablers värden skrivas ut i Direktfönstret, som du gjorde tidigare för att se vad för värden de faktiskt har. Genom att skriva ? variabelnamn och sen trycka Enter får man värdet utskrivet (? betyder Print i debugläget, dvs skriv ut angiven variabel).
    2. Du kan peka, INTE klicka, på valfri variabel för att se vilket värde den har just i det frusna läget när koden stoppats.
    3. Man kan sätta de variabler man vill följa i ett enskilt fönster och se värden när de ändrar sig under kodens förlopp - men detta steg hoppar vi över i nuläget.

    Fokusera på punkt 1 eller 2. Och det du vill kolla är variablerna på den gulmarkerade raden:

    rad, kol samt om textvärdet från din textruta (eller textrutan i sig) är giltig.

    Det enda jag förbryllar mig över är ditt felmeddelande. De fel du kan få, som jag ser det, är att rad och/eller kol inte får något värde, dvs de har värdet 0, eller att din textruta inte är ett giltigt objekt - är textrutans namn korrekt? Är rad eller kol lika med 0 ges felkod 1004. Om du inte har korrekt objektnamn för textrutan borde excel skrika direkt i inledningen eftersom rutan då skulle tolkas som en odefinierad variabel.

    Min bästa gissning - om rad och kol är ok - är att nåt galet är det med dina objekt; i det här fallet textrutan för ärendetext.

    Du får testa helt enkelt och se vilka delar på raden som spökar.

    Och, om du skulle hitta skumma variabelvärden, fundera på varför de i så fall har dessa felaktiga värden, och ta ytterligare ett steg att försöka se varför de får de felaktiga värdena. Detta är grunden i att avlusa sin kod, så det är bara att kavla upp ärmarna och börja gräva.

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer