Avatar billede tcpip Nybegynder
06. januar 2003 - 14:47 Der er 22 kommentarer og
1 løsning

Makro

Hej Hej

Jeg sidder med et lille problem inde i en Excel. Jeg vil gerne indsætte en række ved hjælp af makroen, og det er i sig selv ikke noget problem, men når jeg gerne selv vil bestemme hvor rækken skal indsættes bliver det til et problem....?

Jeg vil gerne at "rækken" altid bliver indsat over/under rækken X, håber at spørgsmålet er til at forstå....
Avatar billede amerikaner Nybegynder
06. januar 2003 - 14:55 #1
x = 10 '--eller hvad?
    '-- over x
    Rows(x & ":" & x).Select
    Selection.Insert Shift:=xlDown

under x er x + 1
    Rows(x+1 & ":" & x+1).Select
06. januar 2003 - 14:59 #2
Skal makroen spørge hvor rækken skal indsættes, eller vil du starte med at markere en række, hvor der skal indsættes en, og herefter starte afviklingen af makroen?
Avatar billede kabbak Professor
06. januar 2003 - 15:02 #3
Sub Makro1()

    Selection.Rows.Select
    Selection.Insert Shift:=xlDown
End Sub
klik ind på den celle der er under stedet hvor du vil indsætte rækken og kør makroen
Avatar billede martin_moth Mester
06. januar 2003 - 15:45 #4
x = InputBox("Hvilken række vil du indsætte en ny række under?")
Rows(x + 1 & ":" & x + 1).Select
Selection.Insert Shift:=xlDown

Bare en lille udvidelse til amerikaner's svar - ingen pts til mig
Avatar billede tcpip Nybegynder
09. januar 2003 - 08:15 #5
Hvis nu vi siger at makroen skal sætte den første række ind ovenfor række 7, næste gang skal indsætte den nye række, er det ovenfor række 8 osv.
Dvs. at efter en første indsættelse skal makroen selv finde ud af at den skal gå en række ned før den indsætte den nye, når der bliver trykket på kommandoknappen......kan det laves
Avatar billede martin_moth Mester
09. januar 2003 - 08:30 #6
Ja da. Du vælger bare de værdier for x du ønsker i nedenstående:

  Rows(x + 1 & ":" & x + 1).Select
  Selection.Insert Shift:=xlDown

Fx.
  x=2
  Rows(x + 1 & ":" & x + 1).Select
  Selection.Insert Shift:=xlDown
  x=7
  Rows(x + 1 & ":" & x + 1).Select
  Selection.Insert Shift:=xlDown

Eller
  for x=5 to 25 step 5
    Rows(x + 1 & ":" & x + 1).Select
    Selection.Insert Shift:=xlDown
  Next x

HUSK på, at når du indsætter en række, skifter de nedenstående rækker numre. Tag højde for det når du vælger dine x'ere :o)
Avatar billede tcpip Nybegynder
09. januar 2003 - 09:41 #7
hej martin_moth

tak for din hjælp.....men den nederst af dine eksempler forstår jeg ikke....?

når jeg "kører" makroen sker der følgende:
den indsætter en ny række ved række 5+1 (rigtig)
derefter indsætter den en ny række ved række 20+1 ?????
og til slut indsætter den en ny række ved række 25+1 (rigtig)

kan du forklare dette.....?
Avatar billede martin_moth Mester
09. januar 2003 - 09:53 #8
Den Indsætter flere rækker end du skriver. Starter med at indsætte under række 5, og herefter hver 5. række indtil rækken under rækker 25 nås.

Prøv at læse linien
  "for x=5 to 25 step 5"

Det er ikke så kryptisk endda. X skal til start være 5, skal forøges til den når 25, og skal springe 5 ad gangen...
Avatar billede tcpip Nybegynder
09. januar 2003 - 10:04 #9
ok!! tak

men jeg tror at jeg har forklaret hele mit "lille" problem forkert....

det jeg er ude efter er en makro der hver gang den bliver aktiveret indsætte en ny række overfor/nedefor den forudgående....?

dvs. at makroen skal indsætte en ny række f.eks. ved række 7 derefter skal brugeren have mulighed for at lave nogle indtastninger.....næste gang makroen bliver aktiveret skal makroen indsætte en ny række ved 7+1, næste gang igen skal rækken indsættes ved 7+2 osv.... men der vígtig at brugeren for mulighed for at lave indtastninger i mellemtiden......
Avatar billede martin_moth Mester
09. januar 2003 - 10:33 #10
OK - så har du behov for en tæller, der ikke bliver nulstillet hver gang macroen afsluttes. Når macroen afsluttes, slettes alle variablers indhold fra hukommelsen, og når den starter igen ved den ikke hvad X var sidste gang. Derfor:

Du kan enten skrive tælleren til reg-databasen (fyy - noget snavs) eller til fx. en ekstern fil :o)

Skrivning/læsning fra ekstern fil, se www.eksperten.dk/spm/297031 Du kan næsten bare kopiere det hele. Problemer, så spørg igen...
Avatar billede martin_moth Mester
09. januar 2003 - 10:38 #11
Eller - jeg kan da godt lave det for dig - hvad gør man ikke for hele 30 points!

  filnummer = FreeFile
  Dim x As String
  Open "C:\Fil.txt" For Input As #filnummer
    Line Input #filnummer, x  'Putter 1. linie ind i x
  Close #filnummer

  Rows(val(x) + 1 & ":" & val(x) + 1).Select
  Selection.Insert Shift:=xlDown
  x = str(val(x) + 1)
 
  Open "C:\Fil.txt" For Output As #filnummer
  Print #filnummer, x 'Skriver indholdet af x til filen
  Close #filnummer

Start med at oprette c:\fil.txt, og skriv fx. tallet 6 i første linie. Herefter kan du køre macroen...
Avatar billede martin_moth Mester
09. januar 2003 - 10:39 #12
PS: Jeg glemte at dimme filnummer: Dim filnummer as Integer
Avatar billede tcpip Nybegynder
09. januar 2003 - 15:31 #13
Tak for din hjælp martin moth det virker bare, men jeg har lige et par ting mere som jeg ikke hitte ud af, hvis du gider og blive ved at hjælpe en nybegynder....?

1. kan makroen på en eller anden måde nulstille den txt fil som excel skriver når man er færdig.....fordi er nemlig min mening at excel-filen skal bruges som skabelon.....?

2. er det muligt at videre udbygge makroen så den kan kopier formlerne fra ovenstående række med ned i den nye....?

Ps. jeg vidste ikke at dette en så stor opgave.....beklager!!
Avatar billede tcpip Nybegynder
09. januar 2003 - 15:36 #14
ups!! der mangler vidst et par ord....håber at det er til at forstå..
Avatar billede martin_moth Mester
09. januar 2003 - 16:41 #15
ad 1.

Sub auto_close() 'Denne sub køres automatisk når regnearket lukkes i Excel
  Dim filnummer As Integer
  filnummer = FreeFile
  Open "C:\Fil.txt" For Output As #filnummer
  Print #filnummer, "6" 'Skriver startværdien til filen - klar til senere brug
  Close #filnummer
End Sub



ad 2.

Efter linien x = Str(Val(x) + 1) indsætter du følgende kode, der kopierer formlen ovenfor (kun formlen i kolonne A, ikke kolonne B, C, ...)

  Range("A" & Val(x) - 1).Select ' < NY KODE
  Selection.Copy ' < NY KODE
  Range("A" & Val(x)).Select  ' < NY KODE
  ActiveSheet.Paste ' < NY KODE
  Application.CutCopyMode = False  ' < NY KODE



Mht. din kommentar i dit PS, så kan du jo bare give flere points :o)
Avatar billede tcpip Nybegynder
10. januar 2003 - 13:39 #16
Hej martin_moth

Som du nok har regnet ud er jeg nybegynder med stort B, også på denne side. Jeg skal nok være god ved dig ret point mæssigt, hvis du gider og hjælpe en (forhåbentligt) en sidste gang.

Det sidste vil være at det skal hele skal lægge sammen forneden.

Eks.

Jeg har en formel der ser ud som følgende:

C4/B4 resultatet vises i D4
Så sættes der en ny række ind:
C5/B5 resultatet vises i D5

Nede i D8 skal summen af D4:D5 vises

Mit problem er når jeg indsætte den nye række ændres D8 til D9 men formelen ser stadigvæk ud som før (D4:D5), men den skulle jo gerne være ændret til D4:D6. Hvordan laves det…..?

Mvh.
Morten
10. januar 2003 - 13:55 #17
Ved at medtage cellen over og under dine tal til summering vha. SUM()
I stedet for =SUM(D4:D5) skriver du =SUM(D3:D6). Det forudsætter selvfølgelig, at der ikke står noget i cellerne D3 og D6.
Avatar billede martin_moth Mester
10. januar 2003 - 17:31 #18
Ja, gør som erikjuul foreslår, eller skriv formlen een gang til:

  Range("D9").Select
  ActiveCell.FormulaR1C1 = "=SUM(R[-4]C:R[-1]C)"

Som det fremgår af ovenstående, virker sum-formlen relativt til den AKTUELLE celle, i dette tilfælde celle D9. Altså tages der udgangspunkt i celle D9. Herfra summeres i eksemplet fra række nummer fire overfor den aktuelle række (-4) til rækken lige over den aktuelle række (-1)

Altså svarer den viste formel til "Sum(D5:D8)"

I ovenstående kan du ændre D9, -4 og -1 til det der passer dig, eller gøre dem til funktioner af x, hvis det passer bedre.
Avatar billede tcpip Nybegynder
13. januar 2003 - 08:21 #19
Jeg kan ikke få den foreslået formel til at virke til mit formål.....det jeg er ude efter er, en metode (formel) der  automatisk kan finde ud af at, formelen, hvor summen vises, skal udvides med med en nye celle hver gang der indsættes en  række. Og det skulle gerne kunne kører sammen med alt det andet der er blevet lavet i makroen.....?
Avatar billede martin_moth Mester
13. januar 2003 - 11:06 #20
Ja - kik på mit svar 10/01-2003 17:31:58. Brug en funktion af X i stedet for -1 og -4 :o)
Avatar billede martin_moth Mester
13. januar 2003 - 11:12 #21
Fx:

  Range("D9").Select
  ActiveCell.FormulaR1C1 = "=SUM(R[-" & x-2 & "]C:R[-1]C)"

Om der skal stå 4-x, x+10, x-5 eller hvad må du selv finde ud af - det afhænger af hvilke rækkenumre du bruger, og hvor mange rækker der skal summeres...
Avatar billede tcpip Nybegynder
13. januar 2003 - 13:38 #22
Hej martin_moth

Jeg syntes lige du skal se det færdige resultat.....

Sub Ny_række()

    filnummer = FreeFile
  Dim x As String
  Open "J:\Fil.txt" For Input As #filnummer
    Line Input #filnummer, x  'Putter 1. linie ind i x
  Close #filnummer

  Rows(Val(x) + 1 & ":" & Val(x) + 1).Select
  Selection.Insert Shift:=xlDown
  x = Str(Val(x) + 1)
 
  Range("D" & Val(x) - 1).Select ' < NY KODE
  Selection.Copy ' < NY KODE
  Range("D" & Val(x)).Select  ' < NY KODE
  ActiveSheet.Paste ' < NY KODE
  Application.CutCopyMode = False  ' < NY KODE
 
  Range("D" & Val(x) + 2).Select
  ActiveCell.FormulaR1C1 = "=SUM(R[-" & x - 2 & "]C:R[-2]C)"
 
  Open "J:\Fil.txt" For Output As #filnummer
  Print #filnummer, x 'Skriver indholdet af x til filen
  Close #filnummer
 
 
   
End Sub
Sub auto_close() 'Denne sub køres automatisk når regnearket lukkes i Excel
 
  Dim filnummer As Integer
  filnummer = FreeFile
  Open "J:\Fil.txt" For Output As #filnummer
  Print #filnummer, "5" 'Skriver startværdien til filen - klar til senere brug
  Close #filnummer
End Sub
Avatar billede martin_moth Mester
13. januar 2003 - 13:54 #23
Smukt - sådan ville jeg også selv have gjort det (øhh - men der er jo også mig selv der har skrevet 90% af det *GGG*)

Tak for de 60p :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester