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: Nyast
  1. Anonym
    2019-07-10T11:48:38+00:00

    Hej,

    Ja, du har nog med all säkerhet helt rätt när det gäller "min trygghet och stabilitet" i att ta fram egen kod, särkilt med dom formuleringarna i kodraderna som du i detta forum visat upp och kombinerat ihop.

    Fiskespö eller ej är kanske en bra liknelse och jag strävar jättemycket mot att hitta en "lagom " nivå vilket jag tycker detta som du visat upp för mig här, är, verkligen.

    Det som nog kan uppfatts som att du "matar mig med fisk" hela tiden, är att jag sitter med min subrutin, blad och tankar om hur det ska fungera, fastnar och får förslag på hur det kan lösas genom kodning med variabler och uttryck. vilka jag på egen hand - hittills - endast sett i rullningslister av valmöjligheter när jag själv lekt med mina "looopar, och If-End-satser etc. När jag väl skriver in dessa så sker ju ett "lärande"men det blir något jag måste sätta mig ner nu i efterhand och "plugga in" för att det verkligen ska komma av sig själv på ett naturligt sätt nästa gång jag behöver liknande lösningar.  . . 

    Jag förstår verkligen vad koden gör och säger, det är bara just kombona av uttryck som ex ".Find(What:=TxtInoNr.Text, LookIn:=xlValues, LookAt:=xlWhole).Row", eller "i = ws.cells(rows.Count, 1).end(xlup).offset(1, 0).row", bara för att ta nåra.

    För mig blir det verkligen att lära sig vissa saker utantill - uttryckmässigt - men samtidigt förstå att det är just detta uttryck jag måste använda mig av för att få ihop helheten i koden. Här kan man nog dra parallellen till multiplikationstabellen. . . .  :)

    En annan viktig grundläggande förutsättning är ju att jag inte fått någon som lärt och förklarat hur man kan sätta variabler, dvs att man gör en för worksheet, en annan för Range medans kol, rad och nr blir "Long" och ibland "i As Integer". . . Här har jag försökt läsa i VBA-bok men förstår inte riktigt teoribeskrivningen av det hela. . .  Tyvärr.

    Nu stänger vi denna "tråd" och jag börjar ge mig ikast med min Spnbut och TxtInoNr som ska plcoka upp all info FRÅN BLADET TILL FORMULÄRET.

    Än en gång - jättestort TACK för din support. Hoppas du finns kvar där ute nästa gång jag behöver ditt stöd och kunnande. . .

    //MagnusG_68

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer
  2. 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
  3. 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
  4. 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
  5. 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