Gå til innhold

Trenger litt hjelp i Excel VBA


Anbefalte innlegg

Holder på med en oppgave i Excel VBA,men trenger hjelp til et par ting.

 

Jeg har en tabell i B3:G7 som skal flyttes til D10:I14, når det trykkes på en knapp. Jeg får flyttet innholdet, men ikke kantlinjene i tabellen. Koden jeg har brukt:

 

Dim x As Variant

x = Range("B3:G7").Value

Range("B3:G7").Value = Range("D10:I14").Value

Range("D10:I14").Value = x

 

 

I en annen oppgave har jeg følgende ord plassert i cellene A1:A4:

 

LAMA

KROKODILLE

PYTONSLANGE

ELEFANT

 

Når jeg trykker på en knapp skal listen bli slik:

 

ELEFANT

PYTONSLANGE

KROKODILLE

LAMA

 

Også tilbake til riktig rekkefølge når jeg trykker igjen.

 

Hvordan skal jeg gjøre dette? takker for svar på forhånd;)

Lenke til kommentar
Videoannonse
Annonse

Hei

 

Value er bare beregnede resultater. Sjekk andre range-properties, som format, numberformat, borders, ...

Eller simpelthen spill inn en makro mens du gjør det, eller deler av det, manuelt, for et kodeutgangspunkt. Klarer ikke svare bedre uten hele oppgaveteksten.

 

Sorteringsoppgaven gir meg ingen mening verken i "gal" eller "riktig" rekkefølge. Men det er en ide å ha forskjellige nummerrekker i nabokolonnene og sortere etter disse, dersom inge nadre sorteringskriterier er å få øye på.

 

HTH. Beste hilsen Harald

Lenke til kommentar

I "sorteringsoppgaven" er vel hensikten å reversere radene, om jeg ikke tar helt feil? I så fall burde følgende kode fungere utmerket:

Sub btnReverse()

   Dim Row As Integer, Height As Integer, Column As Integer

   Height = Selection.Rows.Count

   ' Reverser rader kolonne for kolonne
   For Row = 1 To (Height - 1) / 2
       For Column = 1 To Selection.Columns.Count
           SwapCells Selection(Row, Column), Selection(Height - Row + 1, Column)
       Next
   Next

End Sub

Sub SwapCells(A As Range, B As Range)

   Dim Temp

   Temp = B
   B = A
   A = Temp

End Sub

Lenke til kommentar

Doh! Det har du antakelig rett i ja.

Pass på at løsningen din bruker default property til Range og dermed overskriver formler. Dersom det er problematisk, løses det ved å bruke enten Formula eller FormulaR1C1 -alt ettersom hvordan den skal håndtere cellereferansene:

 

Temp = B.FormulaR1C1

B.FormulaR1C1 = A.FormulaR1C1

A.FormulaR1C1 = Temp

 

Beste hilsen Harald

Lenke til kommentar
I "sorteringsoppgaven" er vel hensikten å reversere radene, om jeg ikke tar helt feil? I så fall burde følgende kode fungere utmerket:

Sub btnReverse()

   Dim Row As Integer, Height As Integer, Column As Integer

   Height = Selection.Rows.Count

   ' Reverser rader kolonne for kolonne
   For Row = 1 To (Height - 1) / 2
       For Column = 1 To Selection.Columns.Count
           SwapCells Selection(Row, Column), Selection(Height - Row + 1, Column)
       Next
   Next

End Sub

Sub SwapCells(A As Range, B As Range)

   Dim Temp

   Temp = B
   B = A
   A = Temp

End Sub

 

Jeg er helt grønn på dette området, men det skjer ikke noe etter at jeg har lagt inn koden over.

 

Står i oppgaven:

Den enkleste måten å løse denne oppgaven på, er å bruke et like stort område i regnearket som mellomlagring, f.eks "A11:A14". Mellomlagringsområdet skal slettes så snart listen er snudd.

 

Forslag til pseudokode for løsning:

 

START VBA-RUTINE

 

FOR ALLE CELLER I DEN OPPRINNELIGE LISTEN, UTFØR

kopier ord til tilsvarende CELLE i mellomlageret

SLUTT UTFØR

 

FOR ALLE CELLER I MELLOMLAGERET, UTFØR

kopier ord til ny posisjon(CELLE) i den opprinnelige listen

SLUTT UTFØR

 

FOR ALLE CELLER I MELLOMLAGERET, UTFØR

SLett innhold i CELLE

SLUTT UTFØR

Lenke til kommentar

Jeg har nå oppdaget en kode;)

 

Dim x As Variant

x = Range("A1").Value

Range("A1").Value = Range("A4").Value

Range("A4").Value = x

Dim y As Variant

y = Range("A2").Value

Range("A2").Value = Range("A3").Value

Range("A3").Value = y

End Sub

 

Men jeg sliter fortsatt med å få flyttet hele tabellen med kantlinjene å ikke bare innholdet. Hvilken cellereferanse skal man bruke dersom jeg bruker format istedet for range?

Lenke til kommentar

Oppgaven tar feil. Den enkleste måten er å nummerere cellene i nabokolonnen nedover, og så sortere etter denne stigende eller synkende, og eventuelt å slette numrene igjen.

Ellers ser det ut som oppgaveteksten befatter seg med å flytte ordene, ikke kantlinjer og annet.

 

Strever fremdeles med å skjønne hva dette er en øvelse i. Er det å skrive løkker? Det forklarer forslag til løsning i så fall.

 

HTH. Beste hilsen Harald

Lenke til kommentar
Oppgaven tar feil. Den enkleste måten er å nummerere cellene i nabokolonnen nedover, og så sortere etter denne stigende eller synkende, og eventuelt å slette numrene igjen.

Ellers ser det ut som oppgaveteksten befatter seg med å flytte ordene, ikke kantlinjer og annet.

 

Strever fremdeles med å skjønne hva dette er en øvelse i. Er det å skrive løkker? Det forklarer forslag til løsning i så fall.

 

HTH. Beste hilsen Harald

 

Det er ikke i denne oppgaven jeg skal flytte kantlinjene;)

 

Hva skal jeg sette inn som A og B i denne koden, evt hvordan skal jeg skrive det for å ikke få en feilmelding? Tabellen står i B3:G7 og skal flyttes til D10:I14.

 

Temp = B.FormulaR1C1

B.FormulaR1C1 = A.FormulaR1C1

A.FormulaR1C1 = Temp

Lenke til kommentar

Ah ok.

Linjene mine var små tilføyelser til aadnk's kode. Prøv den først du. Lim inn i en modul, så, viktig, merker du tabellen og bare den, så kjører du makro btnReverse.

 

Men det den gjør er å stokke om tabellen. Flytte celler er annerledes. Igjen: Spill inn en makro mens du gjør det manuelt, og ta det derfra.

 

HTH. 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å
×
×
  • Opprett ny...