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-07T10:21:51+00:00

    Två saker i koden:

    1. Jag har under ca 20 år av vba-kodande aldrig stött på felmeddelandet "identifieraren under markören kan inte tolkas".

    Det är lite av en vag text, lite som Error 1004, men där 1004 är klart simplare att lösa. Om du kommer koda i framtiden kommer 1004 bli ett bekant ansikte ;-)

    De två rader jag pekar på i bilden nedan vid de gröna blobbarna (punkt 1) gör samma sak. Den nya kod jag gav senast räcker för radsökningen efter gällande InoNr så kodraden med Set c ska inte vara kvar, men den genererar inga fel så det är inte problemet.

    Det gav mig dock en hint om att raden du får gulmarkerat ska fungera. Om du inte får fel på raden med Set c så ska det inte bli fel på denna rad heller. Det finns en liten skillnad också från tidigare - ws har ramlat bort före ordet Range, det ska stå ws.Range. Men detta genererar inga fel, men du borde lägga till det. Min gissning på vad som går fel är om du kopierat texten från forumet och klistrat rakt in i vbe. Jag fick problem när jag skulle svara senast, och jag märkte att texten som jag klistrat in från min vbe inte betedde sig korrekt med radbrytningar och liknande. Jag kunde inte klicka "Skicka", och fick börja om, men nåt (osynligt) skräp kan ligga och skvalpa som du får med från texten i detta forum. Rekommendationen är att skriva in koden för hand. Ta bort allt fr o m raden Set c till End If som ses i bilden, och skriv in texten igen manuellt. Du får kolla inlägget tidigare för raden rad=ws.Range så du får med hela texten.

    Exakt den text som jag skickade senast fungerar på min dator, det enda som skiljer är vad som eventuellt kan stå i din textbox för InoNr, så där ligger allt i dina händer att det är ett giltigt värde (men även om det skulle stå "gurka" i din textbox skulle du inte få det meddelande du fick).

    1. Jag såg att du inte deklarerat variabeln nr överst bland Dim-satserna. Du bör lägga till nr också, som ska deklareras som Long. Detta ger inga fel, men kan ställa till med obehag om man inte har koll på sina variabler.

    Att du inte fått någon notis om missad variabeldeklaration betyder att du inte satt detta som "ett måste" i inställningarna.

    Ett tips, gör så. Det gör du i denna meny:

    I vb-editorn går du till menyn Verktyg, sen Alternativ, och i fliken Redigerare finns en checkruta som heter "Variabler måste deklareras", markera den. Om du gjort rätt kommer du överst i alla kodfönster numera se texten "Option Explicit".

    Slutligen. Du har rätt angående TxtIno1.Text, jag har helt enkelt inte hängt med i dina ändringar av vad ärendetextboxen heter. Trodde detta var kopplat till InoNr på något sätt, vilket det uppenbarligen inte var.

    Var det här svaret till hjälp?

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