Avatar billede poull Nybegynder
01. november 2002 - 22:44 Der 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 =)
Avatar billede poull Nybegynder
01. november 2002 - 22:50 #1
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.
Avatar billede mugs Novice
01. november 2002 - 23:03 #2
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:

='C:\Dokumenter\[Regneark1.xls]Ark1'!B1

Tag dine point igen, og prøv dig frem.
Avatar billede poull Nybegynder
01. november 2002 - 23:29 #3
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 =)
02. november 2002 - 00:40 #4
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
Avatar billede bak Forsker
02. november 2002 - 07:20 #5
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
Avatar billede poull Nybegynder
02. november 2002 - 13:44 #6
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)
Avatar billede poull Nybegynder
02. november 2002 - 13:51 #7
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.
02. november 2002 - 20:09 #8
Hej poull - hvis du vil sende mig de to ark, så skal jeg lige lave det lille nummer, hvis du vil have en VBA løsning. fd@win-consult.com
03. november 2002 - 01:00 #9
Ø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
Avatar billede poull Nybegynder
04. november 2002 - 18:26 #10
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.
04. november 2002 - 18:31 #11
Det skulle vel være noget lignende dette her:

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
Avatar billede poull Nybegynder
04. november 2002 - 20:22 #12
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 ?
Avatar billede poull Nybegynder
04. november 2002 - 20:26 #13
Angående din rettelse med samme mappe, så virker den fint idet at jeg tilføjer:
    Dim sFilePath As String

=)
04. november 2002 - 21:52 #14
Har du fået al den hjælp du skulle have ?
Avatar billede poull Nybegynder
04. november 2002 - 22:48 #15
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.

Håber du forstår =)
04. november 2002 - 22:54 #16
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.
Avatar billede poull Nybegynder
05. november 2002 - 17:38 #17
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 :)
05. november 2002 - 22:05 #18
Du er også velkommen til at sende mig original arket - jeg kender alt til fortrolighed.
29. november 2002 - 13:14 #19
hvordan går det her ?
Avatar billede poull Nybegynder
29. november 2002 - 15:13 #20
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 =)
Avatar billede poull Nybegynder
17. februar 2003 - 14:03 #21
Pokkers osse glemte at lukke det ... jeg fik det til at virke =)
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