Gå til innhold

Slå sammen flere regneark


Anbefalte innlegg

Heisann!

 

Er ganske så nybegynner innenfor VB, men det begynner å komme seg :)

 

Men akkurat nå står jeg fast..

 

Jeg skal slå sammen flere regneark som kommer i en Excelfil.

Arkene heter forskjellige ting fra fil til fil, men innholdet er lik i alle ( men kan være forskjellig mende data i hvert ark) .

 

Jeg skal fjerne de 17 første linjene i hvert ark - og så slå de sammen i et felles ark- slik at jeg kan gjøre en felles "redigering" der ( i et program jeg har skrevet :) *stolt* :w00t: ) (men som bare virker på et ark- -foreløpig :roll: ).

 

Noen som har noen tips for å få meg i gang ?

 

 

Modesty

Endret av modesty
Lenke til kommentar
Videoannonse
Annonse
Heisann!

 

Er ganske så nybegynner innenfor VB, men det begynner å komme seg :)

 

Men akkurat nå står jeg fast..

 

Jeg skal slå sammen flere regneark som kommer i en Excelfil.

Arkene heter forskjellige ting fra fil til fil, men innholdet er lik i alle ( men kan være forskjellig mende data i hvert ark) .

 

Jeg skal fjerne de 17 første linjene i hvert ark - og så slå de sammen i et felles ark- slik at jeg kan gjøre en felles "redigering" der ( i et program jeg har skrevet :) *stolt* :w00t: ) (men som bare virker på et ark- -foreløpig :roll: ).

 

Noen som har noen tips for å få meg i gang ?

 

 

Modesty

 

Skjønte ikke helt spørsmålet ditt, men etter det jeg kan forstå av spørsmålet er vel "copy-paste" det beste alternativet.....?!?!?

Lenke til kommentar

HEi, skal prøve å forklare litt bedre :)

 

Har en regnebok , med tre ark.

 

Alle arkene har lik utforming ( noen overskriftsrader m.m. som skal fjernes).

 

Innholdet i arkene skal klippes ut fra vært ark og settes inn i ark 4.

 

Problemet er at arkene heter forskjellige ting fra gang til gang.

 

Vill gjerne skrevet noe som gjør følgende :

 

1. Setter inn et nytt ark.

2. Kopeier innhold i ark1 ( fra og med rad 18 ) og kopierer dette inn i det nye arket.

3. Kopiere innhold i ark2 ( fra og med rad 18) og kopierer det inn under det som er i det nye arket ( (NumberOfRows+1)

4. Osv for hvert ark som er i regneboken ( kan være mange)

 

Problemet er at eg ikke forstår hvordan eg skal skrive koden for at programmet skal gå gjennom alle ark i regenboken og gjøre dette...

 

M.

Lenke til kommentar
kanskje teit spm men hva gjør egentlig den for-løkken? på meg virker det ikke som den kopierer...

 

Hei!

 

Nei, den kopierer ikke innholdet i arkene i filen.

 

Jeg ønsker jo at den skal "gå" gjennom hvert ark i en fil og hente innholdet der og så kopiere det inn i samme ark.

 

Men man er da litt på vei nå ? Siden det vil være forskjellige bnavn på både ark og filer, samt lengde på innholdet, kan man vel ikek ta opp en makro for å få koden til dette ? ( innbillermeg at man må opp på et mer avansert nivå enn så ..;))

 

MOoesty

Lenke til kommentar

Hei dere

 

For-løkken er svaret på spørsmålet "hvordan eg skal skrive koden for at programmet skal gå gjennom alle ark i regenboken". Objekt-tilordningen er viktig for adresseringen og for å slippe all verdens Select og Activate og annet griseri. Så kan forhåpentligvis OP bytte ut messageboxen med koden som "bare virker på et ark". Jeg må ha mye mer dedtaljer om både filene og kunnskapsnivået for en lim-og-kjør-løsning ;)

 

Beste hilsen Harald

Lenke til kommentar

Hei :)

 

Vet ikke kordan eg skal forklare kunnskapsnivået mitt..;) - men under er ihvertfall koden for å slå sammen selve Filene (ofte flere). Og nivået mitt er tydeligvis ikke høyt nok til å klare å skrive det samme for selve arkene.

 

Men regner med det vil være noe av det samme som skal kjøres i de enkelte arkene, bare at man caller på arkene i stedet ? det vanskelige er hvor det skal inn, og hvordan;)

 

 

Dim i As Variant

 

For i = 0 To Me.ListBox1.ListCount - 1

varFile = Me.ListBox1.List(i)

Dim wb1 As New Workbook

Application.Workbooks.Open varFile

Set wb1 = ActiveWorkbook

TempFile = ActiveWorkbook.FullName

TempFileName = ActiveWorkbook.Name

Sheets(1).Activate

Range("a1").Select

Dim w As Worksheet

Set w = Worksheets(1)

w.AutoFilterMode = False

NumberOfRows = NextEmptyRow - 1

'Finne overskriftsrad mellom 1 og 40...:

Dim a As Integer

Dim s As String

For a = 1 To 40

If Range("A" & a).FormulaR1C1 = "DATO" Then

s = Range("A" & a).Address

End If

 

Next a

 

Range(s).EntireRow.Delete

Range(s & ":O" & NumberOfRows).Select

Selection.Copy

WorkbookOne.Activate

StartPos = NextEmptyRow

Range("a" & StartPos).Select

ActiveSheet.Paste

Dim s2 As String

s2 = ""

Dim d As New DataObject

d.SetText s2

d.PutInClipboard

Range("I" & StartPos & ":I" & NextEmptyRow - 1).FormulaR1C1 = Left(TempFileName, Len(TempFileName) - 4)

 

'Application.Workbooks.Open TempFile

'Range("a1").Activate

wb1.Close False

Next i

 

 

MOdesty

Lenke til kommentar

Se om dette får deg i gang. Jeg har ikke testkjørt, har ikke tid til å sette opp demofiler og listbokser:

Sub test()
Dim varfile As String
Dim i As Long, a As Long
Dim WorkbookOne As Workbook
Dim Wb1 As Workbook
Dim W As Worksheet

Set WorkbookOne = ThisWorkbook 'eller ?

For i = 0 To Me.ListBox1.ListCount - 1
varfile = Me.ListBox1.List(i)
Set Wb1 = Workbooks.Open(varfile)
For Each W In Wb1.Worksheets
	W.AutoFilterMode = False
	For a = 1 To 40
		If W.Range("A" & a).FormulaR1C1 = "DATO" Then
			s = W.Range("A" & a).Address
		End If
	Next a
	'finn startpos og numberofrows her, så
	W.Range(s).EntireRow.Delete
	W.Range(s & ":O" & NumberOfRows).Copy Destination:=WorkbookOne.Sheets(1).Range("A" & startpos)
Next W
Wb1.Close False
Set Wb1 = Nothing
Next i

End Sub

Legg merke til direkte adressering og fravære av select og activate. Se

http://www.dailydoseofexcel.com/archives/2...t-and-activate/

 

HTH. Beste hilsen Harald

Lenke til kommentar

Hei Modesty.

Det er en stor fordel for oss andre om du bruker CODE taggen for å legge koden inne i en code boks.

Dette er mye mere leselig
Ikke bare fordi det er inne i en boks
	Men også fordi at INNRYKK virker
Er du ikke enig?
Tenkte nok det;-)

 

Bare å skrive CODE inne i [ og ]

Avslutt med /CODE inne i klammene og du er i mål.

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...