Gå til innhold

Excel - knapper og kopiering over i et annet ark


Fahlar

Anbefalte innlegg

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
Videoannonse
Annonse

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

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

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

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

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...