Kopiering af data fra .CSV til tabel i andet regneark

I dette fora kan du stille spørgsmål om Microsoft Excel og regneark generelt.
Besvar
soren@topholm.dk
Begynder
Indlæg:2
Tilmeldt:8. apr 2016, 11:13
Kopiering af data fra .CSV til tabel i andet regneark

Indlæg af soren@topholm.dk » 8. apr 2016, 11:16

Hej Alle

Jeg er forholdsvis ny, når det drejer sig om at kode Excel makroer i VBA, men har dog lidt kodningserfaring fra tidligere.

Jeg sidder med et konkret problem, hvor jeg har behov for at kopierer data fra en CSV fil (der er eksporteret fra en SCCM web rapport, til en tabel i regneark.

Jeg skal kopiere 5 kolonner fra CSV filen, ind i de første 5 rækker i den eksisterende tabel.

Jeg benytter

Kode: Vælg alt

RANGE.COPY
og vælger kildedata som Range("A:E"), og vil så gerne placerer det i den anden række i tabellen (lige under overskriften, Range("A2")), men når jeg forsøger at køre makroen for jeg en fejl:
Run-time error '1004': Du kan ikke indsætte dette her, fordi Kopiér-området og indsætningsområdet ikke har samme størrelse.
Marker én celle i indsætningsområdet eller et område med samme størrelse, og prøv at sætte ind igen."

Jeg mener jo faktisk at jeg forsøger at sætte det ind i én celle (A2), men det virker bare ikke.. Håber at der er en af jer der kan hjælpe mig Smile

Herunder ses VBA koden i makroen, som jeg forsøger at afvikle:

Kode: Vælg alt

Sub Copy_export_data()
'
' Definer workbooks, worksheets og ranges som variabler
'  Definer workbooks
    Dim wb_source
    Dim wb_dist
'    
'  Definer worksheets
    Dim ws_source
    Dim ws_dist
'   
'  Definer ranges
    Dim rng_source As Range
    Dim rng_dist As Range
'   
' Tildel værdier til definderede variabler
'  Tildel værdier til workbooks
    Set wb_source = Application.Workbooks("Computers with a specific product - Filter.csv")
    Set wb_dist = Application.Workbooks("Brugere med softwareprodukt1")
'   
'  Tildel værdier til worksheets
    Set ws_source = wb_source.Worksheets("Computers with a specific produ")
    Set ws_dist = wb_dist.Worksheets("Licensoversigt")
'   
'  Tildel værdier til ranges
    Set rng_source = ws_source.Range("A:E")
    Set rng_dist = ws_dist.Range("A2")
'   
' Kopier range fra det ene regneark til det andet
    rng_source.Copy rng_dist
'
End Sub

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: Kopiering af data fra .CSV til tabel i andet regneark

Indlæg af cristian » 9. apr 2016, 12:52

Rettede CODE og QUOTES til i #0

soren@topholm.dk
Begynder
Indlæg:2
Tilmeldt:8. apr 2016, 11:13

Re: Kopiering af data fra .CSV til tabel i andet regneark

Indlæg af soren@topholm.dk » 9. apr 2016, 13:59

Hej Alle

Det lykkedes at finde en løsning på problemet, ved at begrænse størrelsen på det dataområde jeg forsøgte at kopiere, så det i stedet sættes som herunder:

Kode: Vælg alt

'  Tildel værdier til ranges
    Set rng_source = ws_source.Range("A1:E9999")
    Set rng_dist = ws_dist.Range("A2")
Dette har dog den uheldige konsekvens, at området ikke er dynamisk, og at jeg altid får 9999 rækker i min tabel, selvom datasættet er langt mindre. Derfor har jeg nu lavet lidt om i koden, så den tager højde for størrelsen på datasættet, ved at bruge Range.End til at selektere source_rng.

Kode: Vælg alt

'  Tildel værdier til ranges
    Set rng_source = ws_source.Range("A1", Range("A1").End(xlToRight).End(xlDown))
    Set rng_dist = ws_dist.Range("A2")
Med denne rettelse virker det nu helt efter hensigten, og jeg får ingen tomme rækker i min tabel.
Den endelige makro kan ses herunder:

Kode: Vælg alt

Sub Forbered_og_importer_SCCM_data()
'
' Denne makro kopierer de modificerede data fra SCCM rapporten til det nye regneark, lavet ud fra
' denne skabelonen (Brugere med softwareprodukt.xltm) på fanebladet Licensoversigt, hvor data beriges med
' informationer fra fanebladet AD brugere.
'
' Definer workbooks, worksheets og ranges som variabler
'  Definer workbooks
    Dim wb_source
    Dim wb_dist
    
'  Definer worksheets
    Dim ws_source
    Dim ws_dist
    
'  Definer ranges
    Dim rng_source As Range
    Dim rng_dist As Range
    
' Tildel værdier til definderede variabler
'  Tildel værdier til workbooks
    Set wb_source = Application.Workbooks("Computers with a specific product - Filter.csv")
    Set wb_dist = Application.Workbooks("Brugere med softwareprodukt1")
    
'  Tildel værdier til worksheets
    Set ws_source = wb_source.Worksheets("Computers with a specific produ")
    Set ws_dist = wb_dist.Worksheets("Licensoversigt")
    
'  Tildel værdier til ranges
    Set rng_source = ws_source.Range("A1", Range("A1").End(xlToRight).End(xlToRight).End(xlDown))
    Set rng_dist = ws_dist.Range("A2")
    
' Kopier range fra det ene regneark til det andet
    rng_source.Copy rng_dist
'
' Skift tilbage til Brugere med softwareprodukt1
    wb_dist.Activate
'
' Luk SCCM eksport fil uden at gemme
    wb_source.Close SaveChanges:=False
'
End Sub
Håber der er andre der kan bruge en af disse to mulige løsninger, hvis de løber ind i en Run-time error 1004, af samme årsag som jeg gjorde :-)

PS Tak for hjælpen med formateringen, Cristian :-D

Besvar