01. november 2002 - 22:44Der er
20 kommentarer og 1 løsning
Script der henter data fra andet regneark
Hej
Jeg skal have lavet et script eller i hvert fald hjælpes godt i gang med et script. Des opgave er:
Der haves to filer. Den ene indeholder noget data som skal overføres til det andet regneark hver gang der fx trykkes på en knap i destinationsregnearkert. Det som skal kopieres stå i et kendt sheet og der vides i hvilke kolonner dataerne er. En af kollonerne i kildefilen kan indeholde et X(kryds) eller ej. Hvis der er et kryds skal dataen overføres til det andet ark ellers ikke.
Skriv hvis der er noget der er uklart elelr i har hjælp til dette =)
Jeg har selv kigget lidt på tidligere poster og der har jeg fundet at dette lignede mit tilfælde lidt og specielt det accepterede svar til sidst: http://www.eksperten.dk/spm/137489
Dog skal det laves om til at tjekke for afkrydsningen i hver række samen lede efter hvor meget data er, altså om der er datat ned til fx række 50.
Jeg er ikke lige helt hjemme i Excel, men det bedste råd jeg kan give dig er, at bruge eksperten's søgefunktion. Kører du sur i det der, så kan du oprette dit spørgsmål. Jeg har leget lidt med dataoverførsel.
I et regneark har jeg i celleA1 indtast flg:
=Regneark1!B1
så startede en guide, der spurgte om jeg ville oprette kæder til Regneark1, og det ville jeg gerne. Og så skrev Excel flg. formel:
Jo det er ganske nemt at opretet sådan en kæde, men problemet er at der ikke må oprettes en kæde. Der må kun hentes data når man beder den om det. Der ud over kan man ikke med alimdelig excel-formler laver noget kode der ikke efterlader blanke rækker for de rækker hvir i der ikke er et x(kryds).
Derfor mener jeg stadig at jeg har brug for at få lavet et script til opgaven =)
Det du efterlyser kan klares med et avanceret filter. Findes under Data->Filter->Avanceret filter.
Et avanceret filter kan udvælge de rækker i dit kildeark, hvor du har sat kryds ud for, og placere dem et andet sted i det samme ark (desværre kun i det samme ark)
Avanceret filter opererer med 3 begreber: Listeområde: det område dine data står i nu Kriterieområde: Her indtaster du i en celle den samme overskrift, som du har over kolonnen med krydser i (der skal være en kolonne overskrift), og i cellen under indtaster du et kryds Kopier til: Her indtaster du øverste venstre celle i det område, hvori du vil indsætte data. (husk det skal være på samme ark.
Denne filter-funktion kan du automatisere og tildele til den knap, du ønsker.
Overførslen til den anden projektmappe kan klares ved en simpel formel =Ark1!A1 på destinationsarket. Denne formel kopieres til det område hvori data skal indsættes. Er destiantionsarket i en anden projektmappe ændres formlen til =[filnavn.xls]Ark1!A1
erikjuul -> Jan Vogt har engang vist mig at avanceret filter ikke behøver at være i samme ark. Man skal bare starte filteret i Ark 2 og så udpege liste og kriterieområde i Ark 1
Selve filterfunktionen kanb jeg delvist få til at virke, for den tager kun den øverste linie af dataerne.
Og dels hvordan får jeg fat i selve scriptet der udfører filteroperationen, for nu indsætter den blot en værdi og det kan jeg jo ikek udføre på kommando(altås fra en knap)
Og stadig ville jeg foretrække et script der kunne foretage operatioen. Om så scriptet benytter sig af et filter er lgie meget .. men jeg ser stadig et script som det beste da jeg ikke er så glad for at haveet ark med de filtrerede dataer.
Øverste venstre celle i dine tabeller er navngivet "tblStart" altså feltet med "ID" og feltet med "Fornavn" - ret selv filnavnet.
Public Sub GetDataFromOtherWorkbook() Dim wbData As Workbook Dim rData As Range Dim rcell As Range Dim rInsert As Range Dim lCount As Long
'Application.ScreenUpdating = False Set rInsert = Range("tblStart") Set wbData = Application.Workbooks.Open(Filename:="C:\datafil.xls") Set rData = wbData.Sheets("Sheet1").Range("tblStart").CurrentRegion Set rData = rData.Offset(1, 0).Resize(rData.Rows.Count - 1)
lCount = 0 For Each rcell In rData.Columns(1).Cells With rcell If Not (UCase(.Offset(0, 5).Value) = "X") Then lCount = lCount + 1 rInsert.Offset(lCount, 0).Value = .Offset(0, 1).Value rInsert.Offset(lCount, 1).Value = .Offset(0, 2).Value rInsert.Offset(lCount, 2).Value = .Offset(0, 4).Value End If End With Next
' Clean up wbData.Close SaveChanges:=False Set wbData = Nothing Set rData = Nothing Set rcell = Nothing Set rInsert = Nothing Application.ScreenUpdating = True End Sub
Det virker ganske udemærket ... der er dog en lille ting jeg godt kunne tænke mig :)
Hvordan gør man sådan at den åbner datafilen i samme mappe som lsite filen, sådan at man frit kan flytte dem ti landre mapper uden at skulle ændre i koden.
Public Sub GetDataFromOtherWorkbook() Dim wbData As Workbook Dim rData As Range Dim rcell As Range Dim rInsert As Range Dim sFilePath As String Dim lCount As Long
Application.ScreenUpdating = False sFilePath = ActiveWorkbook.Path & "\" & "\datafil.xls" Set rInsert = Range("tblStart") Set wbData = Application.Workbooks.Open(Filename:=sFilePath) Set rData = wbData.Sheets("Sheet1").Range("tblStart").CurrentRegion Set rData = rData.Offset(1, 0).Resize(rData.Rows.Count - 1)
lCount = 0 For Each rcell In rData.Columns(1).Cells With rcell If Not (UCase(.Offset(0, 5).Value) = "X") Then lCount = lCount + 1 rInsert.Offset(lCount, 0).Value = .Offset(0, 1).Value rInsert.Offset(lCount, 1).Value = .Offset(0, 2).Value rInsert.Offset(lCount, 2).Value = .Offset(0, 4).Value End If End With Next
' Clean up wbData.Close SaveChanges:=False Set wbData = Nothing Set rData = Nothing Set rcell = Nothing Set rInsert = Nothing Application.ScreenUpdating = True End Sub
Lige nu sidder jeg og prøver på at få det til at passe ind i det rigtige ark. Her har jeg ldit problemer med. Men jeg tror at fejlen skyldes der er andre område navne som den så vælger i stedet for tblStart cellen. Kan du/nogen kort forklare hvordan der virker når du skriver: wbData.Sheets("Sheet1").Range("tblStart").CurrentRegion
´Hvad er det så den kigger efter når den vælger området ?
Jeg har stadig ikek fået det endeligt ti lat virke i det rigtige ark. Dette tror jeg skyldes som jeg også tidligere skrev at du bruger felt navne og jeg kna ikke helt se hvordan et enkelt feltnavn kan beskrive at det er et bestemt område man skal have.
Når du navngiver øverste venstre celle i dine tabeller som "tblStart" (altså overskriftsfeltet) så bruger jeg en funktion der CurrentRegion til at fange hele tabelområdet. I den ene fil er det feltet med "ID" der skal navngives og i den anden fil er det cellen med "Fornavn" der skal navngives. Ligesom i de filer jeg sendte dig. Ved du ikke hvordan du navngiver en celle ? - stil dig i cellen med "ID" vælg Indsæt/Navn/Definer skrif "tblStart" og tryk OK - det samme for den anden fil.
Jeg ved godt hvordan man definere .. men problemet er at jeg i den original fil har et andet område osm lapper ind over dette felt og for mig at se lader det til at CurrentRegion vælger det felt. Jeg prøver lige at spørge en ven i morgen og så får vi at se om han ikke kan løse det .. ellers vender jeg tilbage :)
Jeg har ikke fået min ven til at kigge på det da jeg har været meget hængt op med lektier det sidste stykke tid .. men jeg skal nok få bragt det i orden snart ... beklager ventetiden =)
Pokkers osse glemte at lukke det ... jeg fik det til at virke =)
Synes godt om
Ny brugerNybegynder
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.