Fahlar Skrevet 2. august 2017 Del Skrevet 2. august 2017 Hei, jeg håper noen kan hjelpe meg med et problem jeg sitter fast ved. Jeg forsøker å lage et interaktivt skjema hvor de som skal bruke det kun skal kunne trykke på knapper for å få all informasjon. Kort fortalt er skjemaet delt i 5 ark. Hele boken er en oversikt over vikarbyråer. Ark 1 inneholder kun to valg: Bransje og Geografi. Arket heter "Start" Ark 2 inneholder et utvalg av 14 ulike bransjer. Arket heter "Bransjer" Ark 3 inneholder et utvalg av 18 ulike geografiske områder. Arket heter "Geografi" Ark 4 inneholder i utgangspunktet ingenting, men vil bli fylt opp av andre knapper. Det er her utfordringen min ligger. Arket heter "Min Liste" Ark 5 inneholder en statisk liste over alle vikarbyråene. Arket er tenkt skjult slik at det fungerer som en bakgrunn der de ulike knappene henter informasjonen, men som alltid er skjult for brukerne. Arket heter "Bakgrunn skjult" I ark 2 og ark 3 fungerer makroene slik at de enkelt og greit går inn i Ark 5, kopierer de relevante vikarbyråene og kopierer dem inn i det relevante arket, hvor de alltid starter på rad 1. Ved siden av dette ligger det enda en knapp som heter "Min Liste". Tanken er at når de trykker på for eksempel knappen som er plassert i rad 1, så vil de relevante cellene i rad 1 bli kopiert over i Ark 4. Og at om de deretter trykker på knappen plassert på rad 34 så vil de bli plassert i rad 2. Det er her jeg støtet på et problem. Siden Ark 2 og 3 fungerer på en slik måte at det konkrete innholdet i rad 1 (Eksempelvis celleinnholdet G1:K1 i Ark 3) stadig blir byttet ut. Derfor vil jeg at hver gang en "min liste" knapp blir trykket på så går makroen rett til Ark 4, finner den neste ledige raden (A:E) og plasserer det som står i cellene på raden i Ark 2 eller 3 der. Jeg har unnet en kode som teoretisk sikkert fungerer flott, men jeg forstår den ikke, og får dermed ikke modifisert den til å passe mitt ark. Kan noen hjelpe meg her? Det jeg altså vil at knappen "Min Liste" skal gjøre er 1. Merke cellene som skal kopieres (for eksempel G14:K14) 2. Gå inn i Ark 4 ("Min Liste") 3. Lime inn i neste ledige rad Enkelt nok helt sikkert for de som kan makro sånn på ordentlig, men jeg kan makroer via "registrer" funksjonen Lenke til kommentar
Harald Staff Skrevet 2. august 2017 Del Skrevet 2. august 2017 Hei La oss først velge at første ledige rad er raden under siste brukte rad. Det går å detektere "hull" midt i en liste også, men det er mer omstendelig. La oss også velge at det står noe i A-cella i alle brukte rader, så det holder å lete i kolonne 1 som er A. Koden for dette er Cells(Rows.Count, 1).End(xlUp).Row + 1 Så trenger man ikke velge eller gå til, medmindre du skal ha med deg farger og annen celleformatering over. Du bare sier at verdien der skal være samme som verdien et annet sted. Her er koden. Jeg starter med å gi fra-ark og til-ark navn, og så hvilke rad det skal kopieres fra, her er det raden cursor står i og arket du jobber i som er kilden: Sub Jobb() Dim RadFra As Long, RadTil As Long Dim Fra As Worksheet, Til As Worksheet Set Fra = ActiveSheet RadFra = ActiveCell.Row Set Til = Sheets("Min Liste") RadTil = Til.Cells(Rows.Count, 1).End(xlUp).Row + 1 Til.Range(Til.Cells(RadTil, 1), Til.Cells(RadTil, 5)).Value = _ Fra.Range(Fra.Cells(RadFra, 1), Fra.Cells(RadFra, 5)).Value End Sub Endre Fra og Radfra hvis du bruker en annen logikk. HTH. Besste hilsen Harald Lenke til kommentar
Harald Staff Skrevet 2. august 2017 Del Skrevet 2. august 2017 Oops. Fra G til K ja. Da må vi opp med kolonnenumrene: Fra.Range(Fra.Cells(RadFra, 7), Fra.Cells(RadFra, 11)).Value Lenke til kommentar
Fahlar Skrevet 2. august 2017 Forfatter Del Skrevet 2. august 2017 hei, og takk for svar! Likte veldig godt tanken her med å bare "speile" innholdet, og lime det inn i neste ledige rad i "Min Liste", det er akkurat det jeg vil! Men... Det skjer liksom ikke noe når jeg bruker denne. Jeg har en egen knapp på hver rad, som skal lete spesifikt i den raden den er plassert i; altså knapp på rad 1 leter i rad 1, knapp på rad 2 leter i rad 2 også videre. Jeg gjetter på at hvorfor det ikke skjer noe, er at den leter i Kolonne A, en kolonne som er tom. Og jeg klarer ikke helt å forstå hvordan jeg skal endre "søkefeltet" til rad 1 kolonne G, blir det da: RadFra = Cells(Row.Count, 7) Jeg vil at den skal søke i den spesifikke raden den ligger på hver gang, og helst ikke at den skal velge den raden jeg har markert en celle på. Dette henger sammen med at tanken er at hele skjemaet skal kunne fungere kun med mus, og er ikke meningen å skrive inn i. Samtidig er søkefeltet nøyaktig det samme hver gang: Ark: "Geografi"/"Bransje" - men ActiveSheet funker nok, siden det ikke går ann å trykke knappen uten å være inne i arket "Geografi" Celler: "G1:K1" Hvor tilpasser jeg for å få det til å fungere som jeg vil? Tusen takk på forhånd! Likte veldig godt tanken her med å bare "speile" innholdet, og lime det inn i neste ledige rad i "Min Liste", det er akuratt det jeg vil! Lenke til kommentar
Harald Staff Skrevet 2. august 2017 Del Skrevet 2. august 2017 Nei. A-kolonnen og RadTil gjelder Til, altså arket det kopieres til. Koden som finner første ledige rad. Først, prøv å klikke på en celle i raden du vil kopiere fra, og så kjører koden. Funker det da? Det er isåfall fordi RadFra hentes fra aktiv celle, "der du står". Problemet med å bruke en knapp som identifisering er at knapper er minst tre forskjellige ting, og at ingen av dem ligger i celler, de flyter over regnearket. De har en slags binding til cella du sto i da du laget eller limte inn knappen, men det er for skjørt til å bruke som data. Spørsmålet er da om knappene gjør noe mer allerede som identifiserer riktig rad. Hvis ikke må du tilordne hver kapp til hver sin makro som peker til hvert sitt radnummer. Gjør det i så fall helst sånn: Sub Knapp1_click() Call Jobb(1) End Sub Sub Knapp2_click() Call Jobb(2) End Sub Sub Knapp3_click() Call Jobb(3) End Sub Sub Knapp4_click() Call Jobb(4) End Sub 'osv osv, og så selve resten: Sub Jobb(RadFra as Long) Dim RadTil As Long Dim Fra As Worksheet, Til As Worksheet Set Fra = ActiveSheet Set Til = Sheets("Min Liste") RadTil = Til.Cells(Rows.Count, 1).End(xlUp).Row + 1 Til.Range(Til.Cells(RadTil, 1), Til.Cells(RadTil, 5)).Value = _ Fra.Range(Fra.Cells(RadFra, 1), Fra.Cells(RadFra, 5)).Value End Sub Beste hilsen Harald Lenke til kommentar
Fahlar Skrevet 3. august 2017 Forfatter Del Skrevet 3. august 2017 Jeg tilordnet hver knapp til å velge en riktig rad i kolonne G: Sub Knapp1_click() Range("G1").Select Call Jobb End Sub Da funker det nesten perfekt! Jeg har to tweaks jeg gjerne skulle fått inn, men er usikker på hvordan jeg gjør det. 1. Av en eller annen grunn begynner den å kopiere inn i "Min Liste" på rad 2, og ikke rad 1. Er det noen grunn til det? 2. Er det mulig å dra med formateringen på teksten? Eller vil det fungere om jeg formatiserer "Min Liste" på forhånd, vil teksten da tilpasse seg formatiseringen? Tusen takk så langt, dette blir veldig bra! Lenke til kommentar
Fahlar Skrevet 3. august 2017 Forfatter Del Skrevet 3. august 2017 For å spesifisere det viktigste med tanke på tweak nr 2: I Kolonne J så befinner det seg en link til nettsiden til det aktuelle vikarbyrået. Denne linken blir brutt når det kopieres over. Lenke til kommentar
Harald Staff Skrevet 3. august 2017 Del Skrevet 3. august 2017 1 Ja grunnen er at xlup treffer rad 1 i et tomt ark, og så plusser vi på 1. Rad 1 skal som oftest inneholde overskrift, så dette er gjerne ønsket adferd. 2 Ja, formater Til-arket på forhånd så det ser bra ut. Ved kopiering drar man gjerne med seg allverdens rask, som fonter, farger, tegneobjekter, ... Lenken løser vi ved å lage den på nytt: Sub Jobb() Dim RadFra As Long, RadTil As Long Dim Fra As Worksheet, Til As Worksheet Set Fra = ActiveSheet RadFra = ActiveCell.Row Set Til = Sheets("Min Liste") RadTil = Til.Cells(Rows.Count, 1).End(xlUp).Row + 1 Til.Range(Til.Cells(RadTil, 1), Til.Cells(RadTil, 5)).Value = _ Fra.Range(Fra.Cells(RadFra, 7), Fra.Cells(RadFra, 11)).Value On Error Resume Next With Til .Hyperlinks.Add Anchor:=.Cells(RadTil, 4), _ Address:=Fra.Cells(RadFra, 10).Hyperlinks(1).Address, _ ScreenTip:="Klikk og bli klok", _ TextToDisplay:=Fra.Cells(RadFra, 10).Value End With End Sub Beste hilsen Harald Lenke til kommentar
Fahlar Skrevet 3. august 2017 Forfatter Del Skrevet 3. august 2017 Fungerte perfekt tusen takk for hjelpa! Lenke til kommentar
Harald Staff Skrevet 3. august 2017 Del Skrevet 3. august 2017 Så bra. Bare hyggelig det. Hvis dette skal brukes av andre enn deg selv så skal du kanskje legge inn en MsgBox "Linje " & RadFra & " er kopiert!", vbInformation, "Dette gikk fint" nederst, rett før EndSub. En "vanlig bruker" forvirres gjerne av at ingenting tilsynelatende skjer og klikker mange ganger. Beste hilsen Harald Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå