Avatar billede roadi Nybegynder
23. april 2003 - 12:38 Der er 10 kommentarer og
1 løsning

Kopiere data!

Hej Eksperter!

Jeg vil meget gerne ved hjælp af en tryk knap hente alle data i et ark, og ligge dem over i et andet ark(fil).

I modtager arket er der i forvejen data som er sorteret pr. Id.

Filen jeg henter fra indeholde kun nogle af disse id el. alle. Det er lidt med forskel.

Dvs. når jeg trykke på knappen skal den hente alle data i filen jeg henter fra, sammenligne dem med modtage arket og smide dem ind hvor de hører hjemme.

Eks.

Før at jeg trykker på knappen

Afsender fil:          Modtager Fil:
ID - Navn:                ID - Navn:
1 - Lars                  1-Lars
2 - Jens                  2-Børge
3 - Bent                  3-Bent
4 - Jørgen                4-Peter
                          5-Ole

Efter processen har kørt:

Afsender fil:          Modtager Fil:
ID - Navn:                ID - Navn:
1 - Lars                  1-Lars
2 - Jens                  2-Jens
3 - Bent                  3-Bent
4 - Jørgen                4-Jørgen
                          5-Ole


Er der nogen der kan hjælpe mig med at lave et VBA script der kan gøre det?

Det skal lige siges at jeg absolut ingen erfarring har med VBA, jeg har dog kodet en del ASP.

Håber at der er nogen der gider at hjælpe.

/roadi
Avatar billede kabbak Professor
23. april 2003 - 17:28 #1
Sub Hent_og_Sammenlign()
Dim GLSidste, NYSidste As Integer

'  ret selv Fil og mappe navnene til dit behov
    Workbooks.Open Filename:= _
        "C:\Dokumenter\Excel\Mappe4.xls"
    Sheets("Nydata").Select
    Sheets("Nydata").Move After:=Workbooks("GLdata.xls").Sheets(3)
    Sheets("GlData").Select
   
    GLSidste = ActiveCell.SpecialCells(xlLastCell).Row ' Sidste række med data i hoved arket
    Sheets("Nydata").Select
    NYSidste = ActiveCell.SpecialCells(xlLastCell).Row ' Sidste række med data i Afsender arket
    For i = 1 To GLSidste
    For J = 1 To NYSidste
    ' hvis du har ID i A kolonnen og navnet i B kolonnen , så virker det
    If Sheets("GlData").Cells(i, 1) = Sheets("Nydata").Cells(J, 1) Then
    Sheets("GlData").Cells(i, 2) = Sheets("Nydata").Cells(J, 2)
    End If
    Next
    Next
        Sheets("Nydata").Select ' fjerner afsender arket igen
    ActiveWindow.SelectedSheets.Delete
End Sub
Avatar billede roadi Nybegynder
24. april 2003 - 13:26 #2
Hmm..

Jeg har ikke helt forstået det..

Hvad er mappe4.xls? er det modtager filen?

Hvor åbner jeg afsender filen?

/Roadi
Avatar billede kabbak Professor
24. april 2003 - 13:55 #3
mappe4.xls = den fil du får tilsendt.
Avatar billede kabbak Professor
24. april 2003 - 13:57 #4
Koden skal ligge i den excel mappe, som du vil have dataerne ind i
Avatar billede kabbak Professor
24. april 2003 - 14:09 #5
Jeg går ud fra at det er excel mapper både den der skal opdateres og den du får tilsendt.

Jeg er også gået ud fra at ID ligger i kolonne A begge steder.

Nydata = navnet på det ark i  mappe4.xls, som dataerne er skrevet på.

GlData = navnet på det ark som skal opdateres i din excel mappe

I kolonne A arket "GlData" går jeg også ud fra at du har fortløbende nummer nedad, for hvis nummeret ikke eksisterer i dit ark, bliver det heller ikke oprettet.
Avatar billede roadi Nybegynder
24. april 2003 - 14:45 #6
Hvad hvis jeg nu har et tredie ark hvor programmet i, hvad gør jeg så??
Avatar billede kabbak Professor
24. april 2003 - 19:15 #7
Hvis du med et tredie ark, mener en tredie excelfil, så gør du sådan.

Denne makro ligger du i et modul i Modtager Fil: = den jeg kalder GlData

Sub Hent_og_Sammenlign()
Dim GLSidste, NYSidste As Integer

'  ret selv Fil og mappe navnene til dit behov
    Workbooks.Open Filename:= _
        "C:\Dokumenter\Excel\Mappe4.xls"
    Sheets("Nydata").Select
    Sheets("Nydata").Move After:=Workbooks("GLdata.xls").Sheets(3)
    Sheets("GlData").Select
   
    GLSidste = ActiveCell.SpecialCells(xlLastCell).Row ' Sidste række med data i hoved arket
    Sheets("Nydata").Select
    NYSidste = ActiveCell.SpecialCells(xlLastCell).Row ' Sidste række med data i Afsender arket
    For i = 1 To GLSidste
    For J = 1 To NYSidste
    ' hvis du har ID i A kolonnen og navnet i B kolonnen , så virker det
    If Sheets("GlData").Cells(i, 1) = Sheets("Nydata").Cells(J, 1) Then
    Sheets("GlData").Cells(i, 2) = Sheets("Nydata").Cells(J, 2)
    End If
    Next
    Next
        Sheets("Nydata").Select ' fjerner afsender arket igen
    ActiveWindow.SelectedSheets.Delete
End Sub

den her lægger du i dit tredie ark/mappe og kalder den med en knap

Private Sub CommandButton1_Click()
    Workbooks.Open Filename:= _
        "C:\Dokumenter\Excel\GLdata.xls"
    Application.Run "GLdata.xls!Hent_og_Sammenlign"
    ActiveWorkbook.Save
    ActiveWindow.Close
End Sub


så skulle det hele virke.
Avatar billede kabbak Professor
28. april 2003 - 19:09 #8
Tak, men kører det som det skal
Avatar billede roadi Nybegynder
28. april 2003 - 19:16 #9
Ja, det gør det..
Avatar billede roadi Nybegynder
16. maj 2003 - 23:44 #10
Hvis du vil ha' nogle point, så lav lige et svar, så jeg kan lukke tråden
Avatar billede roadi Nybegynder
16. maj 2003 - 23:45 #11
Undskyld jeg er vist lidt træt...
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