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-06-28T11:36:40+00:00

    Hej P3excel,

    Nu har jag finlirat med dom mindre "blessyrerna" och fått till dom så som jag ösnkar, ex datumfält som ska fyllas i samt att veckodagarna anges automatiskt m.m.

    Jag har även skrivit in IF-saterna så som du beskrivit - se hela Subrutinen nedan. . . .

    Den utmaning som jag nu står inför är att få "SPARA-knappen" på formuläret att verkställa så att all data ramlar in på bladet. För det krävs - så som jag tänkt och förstått - att Subrutinen styr(jobbar) mot första lediga rad (i det fall vi skapar ett NYTT "Ino-Nr".

    Just nu så händer inget när jag klickar på "SPARA-knappen". . . säkert något banalt i Subrutinen som saknas. Behöver din hjälp!!

    Subrutinen som den ser ut just nu för "CmdSave":

    /Hälsning, MagnusG_68

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer
  2. Anonym
    2019-06-27T19:08:43+00:00

    Angående Om-satser behöver du INTE ett Else för varje. De funkar fint helt fristående, och fristående ska de också vara.

    Alla dina rader med If OptXXX ska se lika ut (förutom deras unika detaljer Anm/Påg/Test/Imp, och rader samt TxtDatum)

    De tre ElseIf tar du bort och börjar raderna med If, skippa Else i slutet och även End If.

    Jag visar exempel på If-satser

    Om bara en rad ska utföras efter att ett villkor uppfyllts kan man skriva allt på en rad:

    If A>0 Then ws.Range("B1") = "Ja"

    Om fler aktiviteter ska inträffa då villkor uppfyllts lyfter man ner dessa rader till separata rader samt inkluderar ett End If

    If A>0 Then

      ws.Range("B1") = "Ja"

      ws.Range("F1") = "Ja"

    End If

    Om ett villkor uppfylls ska en kod utföras, om villkoret inte uppfylls gäller en annan kod - här infogar man Else

    If A>0 Then

      ws.Range("B1") = "Ja"

    Else

      ws.Range("B1") = "Nej"

    End If

    Om ett villkor uppfylls eller ej, samt att ett andra villkor kollas om det första ej inträffade - här kommer ElseIf

    If A>0 Then

      ws.Range("A1") = "Ja"

    ElseIf A<0 Then

      ws.Range("A1") = "Neg"

    Else

      ws.Range("A1") = "Noll"

    End If

    I ditt fall räcker det med att kolla resp OptButton, är den satt skrivs motsvarande TxtDatum ut.

    Att sätta automatiskt datum, ja det funkar. Allt funkar tänkte jag nästan säga ;-)

    I koden för OptPåg_Click() lägger du kod som sätter för text för TxtDatum2, och texten är helt enkelt dagens datum vilket ges av kommandot Date

    TxtDatum2.Text = Date

    och sen likadant för övriga procedurer för de andra optbuttons

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer
  3. Anonym
    2019-06-27T14:08:26+00:00

    Hej igen,

    Innan jag lämnar jobbet för dagen så skickar jag in en frågeställning rörande det sista som du informerat om, vilket gäller If-satsen för Optbut och datumet i textrutan. . .

    Hur ska If_Then-satsen se ut totalt sett? Så som jag "lärt mig" (tolkat) denna villkorskodning så måste det alltid finnas ett "motalternativ" när man väljer "om ett villkor är uppfyllt, så gäller detta. . ., annar OM detta är uppfyllt så gäller det andra. . . osv.

    För att j ag nu ska slippa massa onödiga felmeddelanden så behöver jag ditt förtydligande i detta.

    Därutöver så har jag funderat lite på om det går att skapa en finess så att NÄR man klickar i Optbut (ex "OptPåg"), så sätts automatsikt dagens datum i textrutan ("TxtDatum2"). . .  Går det?

    /MagnusG_68

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer
  4. Anonym
    2019-06-27T13:33:08+00:00

    Hej P3excel,

    Tack!!! Förklaringen med alternativen för "Bald-hanteringen" är ovärderlig och jag - hör och häpna - förstår exakt varenda ord och detalj i förklaringen du lämnar - helt fantastsikt kul och skönt att förstå.

    Jag känner själv att jag hädanefter kommer jobba utifrån alternativ 1 och 2, troligtvis 2:an mestadels och med variabelstrategin. Otroligt smidigit och enkel hantering, och som du säger enkelt att justera vid namnbyte på bladet.

    Jag har för övrigt lagt in koden i händelsen för min SpnDatum så att när jag nu "klickar" fram datum i textrutan så uppdateras LblDag med motsvarande veckodag - ler. . . !!! :)

    Jag har ännu inte riktigt plockat in alla kodrader för "SPARA-knappen" men är på G. . . Gör ju allt detta mellan alla andra ordinarie åtaganden.

    / Vänlig hälsning MagnusG_68

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer
  5. Anonym
    2019-06-26T10:50:02+00:00

    Måste bara börja med blad...

    Det här med bladnamn är lite tycke och smak, men man bör anamma ett konsekvent sätt när man jobbar med/mot de olika bladen.

    Skrivsättet du använder är absolut inte fel, men jag ska visa för- och nackdelar med de olika sätt som finns, och du kanske hittar ett sätt som du fäster dig vid.

    När man jobbar i excelfiler kan allt ifrån ett till flera tiotals, eller hundratals, blad förekomma. Och blad kan läggas till och ibland raderas. När man då jobbar i vba behöver man tala om vilket blad som avses när en cell, t ex A1, eller annat ska påverkas. Det finns tre huvudvarianter här:

    1. Worksheets(1).Range("A1")
    2. Worksheets("Blad1").Range("A1")
    3. Blad1.Range("A1")

    Alternativ 1 innehåller så kallad indexerad notering, där värdet inom parentes anger vilket blad i ordningen som gäller. Flyttas bladen så ändras ordningen - där måste man ha koll. Men detta är ett smidigt sätt att loopa igenom flera blad om man har fler än ett.

    Alternativ 2 innehåller namnet som en textsträng för det blad som gäller. Flyttar man runt bladen så gäller kopplingen fortfarande eftersom namnet styr. Döper man däremot om bladet måste detta justeras i koden. Oftast gör man det på ett ställe - i början av koden då det är smartast att använda variabler, typ Set ws = , istället för att hårdkoda bladnamn genom hela koden. Återkommer till detta.

    Alternativ 3 styr mot det blad som det var när bladet skapades. Blad1 är det första bladet (oavsett om det flyttas eller byter namn), Blad2 är det andra bladet som skapades (oavsett om det flyttas eller byter namn), osv. Fördelen här är man alltid pekar mot det blad som avses oavsett yttre omständigheter, men personligen tycker jag detta är det sämsta av alla alternativ (personlig åsikt). Låt säga att två blad skapas (Blad1 och Blad2) som också initialt kommer ges namnen Blad1 samt Blad2. Om det första bladet tas bort och det andra bladet då döps om till Blad1 så kommer den andra ändå som objekt vara Blad2 eftersom detta aldrig ändras. Namnet må vara Blad1 men dess objektnamn är Blad2, vilket är precis vad du ser i den bild du visade. För mig är detta rörigt, vänta bara om/tills du har filer med många blad.

    Nackdelen med detta är att om man har många blad som skapats, justerats, raderats genom åren, och kopplar kod till de olika bladen så kommer kanske Blad2 egentligen mena det fjärde bladet, Blad5 kanske är det andra bladet osv. För mig är detta när man kollar i projektfönstret för de olika bladen helt vilseledande. Personligen styr jag på alt 1 eller 2, konsekvent.

    Inget alternativ är enskilt rätt eller fel, ha koll på bladen och var noggrann och konsekvent så fixar det sig.

    Min princip gällande blad är att i början av koden alltid sätta bladvariabler till de blad man ämnar påverka.

    T ex,

    Dim ws As Worksheet

    Set ws = Worksheets("Bladnamn")

    rakt igenom hela koden använder jag nu ws.Range("A1") eftersom ws pekar mot det blad som har namnet Bladnamn. Om detta namn ändras, så ändrar man det bara på ett ställe, överst i koden där variabeln sattes.

    Lång harang, och nu till den korta harangen.

    Din formaterade text (datum) sätts enligt

    LblDag.Caption = Format(TxtDatum.Value, "dddd")

    eller bara "ddd" om du vill ha tre tecken för veckodagen.

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer