VBA-kod excell 2010

Anonym
2019-04-28T17:03:29+00:00

Hej,

Jag har skapat en mall för protokoll i vilken jag lagt in nåra VBA-finesser i celler för en kolumn. I dessa celler ligger en "Checkbox" (Chb1, Chb2, os.v som öppnar ETT formulär som man sedan kan göra nåra val på och när man sedan klickar "OK" så ska datat från formuläret (UserForm1), ramla in på första lediga (tomma) cell i kolumn A, samt att datat skrivs in i den cell som öppnat upp formuläret, dvs genom villkoret "om Chb1.Value = True, Then. . . cellens värde(text) = formulärets datavärde. Allt detta fungerar perfekt. Detta är skapat på Blad1 i arbetsboken.

Mitt problem blir nu att när jag kopierar bladet och därmed skapar Blad3, så får jag ju givetvis felmeddelande när jag använder "UserForm1" som pekar via kod mot Blad1. . . .?!!!

Min fråga blir således: Hur kan man på ett smart och smidigt sätt anända ETT och SAMMA formulär (UserForm) för flera blad i arbetsboken?

Jag får en känsla av att man måste sätta villkor genom VBA-kod, och använda Activesheet eller nåt sådant. . .

Frustrerad amatör men som älskar att laborera med VBA-koder och dess finesser i excell. :)

// Väl mött. . .

Magnus i Alingsås (072-745 80 40)

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

25 svar

Sortera efter: Mest användbara
  1. Anonym
    2019-05-02T08:49:36+00:00

    Hej och god förmidag!!

    Svar "nej", jag får inte namnet på det blad som checkboxarna är på. Får felmeddelande "Körfel 424, Objekt krävs".

    En fundering som jag har är hurivida Namnet på bladfliken påverkar, dvs att Blad1(BPU-uppföljning_Geoteknik) har texten inom parantes med i VBA-hierarkin. . . ?

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer
  2. Anonym
    2019-05-02T07:48:51+00:00

    Det första vi gör är att kolla om ws är det blad vi tror att det är, och därefter (om ws är ok) kolla om Chb1 är förstått av Excel som ett objekt på detta blad.

    Kör koden på vanligt sätt, och när du får felet med den gula raden markerad där ws.Chb1 står ska du fråga några saker i Direktfönstret. När felet dyker upp och om Direktfönstret ej är synligt trycker du Ctrl+G, annars går du till Direktfönstret utan att avbryta koden (gula markeringen ska vara kvar).

    1. Skriv

    ? ws.name (tryck Enter)

    Får du namnet på det blad som checkboxarna är på?

    1. Om ws är ok, skriv

    ? ws.Chb1.name (tryck Enter)

    Får du namnet på checkboxen eller blir det samma fel som du får vid gulmarkeringen?

    Beroende på hur det går med ovanstående så tar vi det från där.

    Angående bilder så klipper jag ut delar ur skärmen via skärmklipp:

    1. Start-knappen
    2. Tillbehör i Windows
    3. Skärmklippverktyget

    När programmet öppnas väljer du bara Nytt, då får du ett kors som du kan klicka och dra med musen så du skapar den rektangel du vill klippa ut. Sen är det bara Spara som....

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer
  3. Anonym
    2019-05-01T16:29:04+00:00

    Hej igen,

    Jag har testat körningen via "Direktfönstret " med ws.Chb1= True resp False" och det funkar på det aktiva bladet.

    Jag får ändp inte till det med kodstrukturen för verkställande-knappen (Cmd1) på formuläret. Jag får ett körfel som jag nämnde tidigare, där "ws.Chb1" markeras och anges som "Går inte hitta metoden eller datamedlemmen". . . ???!! Hur gör du för att få såna tydliga bilder som du klippt in (bifogat) i dina svar. Jag redigerar in i Paint och sparar sedan på skrivbordet som jag därefter laddar upp här. Ser ut att bli jättesmått och oläsbart. . . Bilden är ett urklipp direkt från koden för Cmd1 på formuläret.

    Hälsning Magnus_G68

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer
  4. Anonym
    2019-04-30T18:37:48+00:00

    Vi kommer att lösa det här, inga tvivel som helst.

    Jag var lite otydlig när jag skrev att variabler skulle deklareras överst i koden. Med det menas överst i den procedur de tillhör, vilket inte är så givet om man inte vet.

    Sammanfattat angående variabler:

    En procedur eller funktion har ett procedurhuvud och ett slut (gulmarkerade i bilden)

    Alla variabler deklareras i princip uteslutande direkt under procedurhuvudet INOM proceduren, innan all annan kod kommer. De ska läggas där oavsett när i koden de kommer användas.

    Det finns variabler som kan vara inom parentesen i själva procedurhuvudet och kallas då argument, men det behöver vi inte ta upp nu (men jäklar så nyttigt att kunna i ditt framtida kodande). Sen finns det globala variabler som faktiskt placeras överst (ovanför alla procedurer), men vi lämnar det också.

    Sen till ditt problem med felmeddelandet du får.

    Eftersom du får meddelandet att det inte går att hitta metoden eller datamedlemmen så betyder det att Chb1 inte är det objekt jag trodde du hade på ditt blad (eller att ws lurar på något vis). Vi börjar med att klargöra vad för checkboxar du använder. Jag gissade på ActiveX-kontroller, men återigen kanske har jag förhastat mig.

    När du placerade dina checkboxar på bladet, från vilken kategori enligt bilden nedan var det?

    Formulärkontroller eller ActiveX-kontroller

    Eftersom du använt kod tidigare mot dessa checkboxar så ser jag inget annat alternativ än att det är ActiveX, men jag vill bara dubbelkolla med dig att så är fallet.

    Det som troligen spökar är att det aktiva bladet inte satts korrekt i koden, så ws.Chb1 tolkas inte korrekt.

    Vi kan kolla om det går att sätta din första checkbox på ett "manuellt" sätt där vi använder både ws och Chb1.

    Se till att första bladet är det aktiva bladet. Gå till vb-editorn och se till att Direktfönstret är öppnat (tryck Ctrl+G, så visas den).

    I fönstret skriver du

    Set ws = Activesheet (tryck Enter)

    Skriv

    ws.chb1.value = True (eller False, bara du växlar värdet så du ser att något händer, tryck Enter)

    Ändrade checkboxen värde så funkar koden. Då är det ws som inte hamnat rätt, och detta kanske rättar sig själv enligt beskrivningen av var du placerar variabler jag nämnde i början.

    Nya tester, nya framsteg hoppas jag.

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer
  5. Anonym
    2019-04-30T11:34:45+00:00

    Hej,

    Det var inga som helst probelm med att förstå din pedagogiskt bra beskrivna förklaring. Det som händer för mig är att jag blir lite osäker på vart jag ska skriva "Dim-satserna.

    När jag har UserForm1 aktivt och väljer "Visa kod" så skriver jag allt där. LÄngst upp i Script-sidan så skriver jag in följande under "Allmänt";

    Dim cb As Object

    Dim ws As Worksheet

    Set ws = ActiveSheet

    Nedanför detta sedan skriver jag koden för knapparna på formuläret. När jag väler att testköra Cmd1 så får jag felkod(meddelande) Kompileringsfel; Ogiltigt utanför procedur och så pekar man på "Set ws As Activesheet"

    Vad gör jag för fel?

    I övrigt så har jag lagt in dom kodsträngar som du visat där dom hör hemma och bytt ut alla BladX mot ws

    Känns som vi är nära att få till detta nu. . .

    Detta jag skriver nu är efter at tjag själv redigerat och justerat och fått till en del av det jag nämner ovan. Jag har lagt in Dim-saterna i samma procedur som själva koden det gäller (som körs), inte separat längst upp som "Allmän". Dock så kavrstår problemet när jag trycker på Cmd1-knappen på formuläret. Jag får ett felmeddelande om att "Det går inte att hitta metoden eller datamedlemmen". . . ?! samtidigt som Chb1 är markerat i ws.Chb1. Frustrerande!!

    // Hälsning Magnus_G68

    Var det här svaret till hjälp?

    0 kommentarer Inga kommentarer