Avatar billede mccookie Seniormester
16. marts 2007 - 19:24 Der er 48 kommentarer og
1 løsning

Hent data fra fil

Hejsa

Jeg har et regneark der indeholder følgende:

Navn          Adresse    Leje nr.      Beløb
XXXX          XXXX        0123456        80,00-

osv.

Den kan vi kalde lejeliste......

Så har jeg et program der genererer en kommafil der ser sådan ud:

Lejenr  Beløb
0123456, 0000008000

osv.

Kan man med Excel lave noget import af denne kommafil, så der automatisk udfra kommafilen, indsættes det beløb som lejerne skylder??

Håber på positivt svar og at nogen kan hjælpe......

///Henning
Avatar billede supertekst Ekspert
16. marts 2007 - 19:54 #1
Ja -
Skal det importerede beløb adderes til evt. bestående beløb?
Er der tale om fortegn i importen

Er lejelisten i sorteret orden.
Hvor mange linier er der i denne - ca. ?

Hvis du har mulighed for at sende kopi/uddrag af begge filer - så vil det lette "ekspeditionen" - > pb@supertekst-it.dk
Avatar billede mccookie Seniormester
16. marts 2007 - 20:02 #2
Ja, lejelisten er i sorteret orden og alle lejenumre har 10 cifre og beløbet skal udskrives i kroner..
Avatar billede supertekst Ekspert
16. marts 2007 - 20:19 #3
Kode anbringes i Lejelistens ark1 i VBA
Tekstfilen anbringes i samme Mappe som Lejelisten
Koden iværksættes p.t. fra VBA - men ellers opret en knap og forbind den med:
Public Sub udførImport


Const importFilnavn = "import.txt"          'kan tilpasses
Dim sti, antalRæk
Public Sub udførImport()
Rem hentsti
    sti = ActiveWorkbook.Path
    If Right(sti, 1) <> "\" Then
        sti = sti + "\"
    End If
   
Rem antalrækker i lejeliste
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
   
Rem udfør importen
    importer
   
End Sub
Private Sub importer()
Dim lejenr, beløb, lejerRæk

    Open sti + importFilnavn For Input As #1
Rem indlæs overskrift
    Input #1, txt1, txt2
   
    While Not EOF(1)
        Input #1, lejenr, beløb
        lejerRæk = findLejer(lejenr)
        If lejerRæk > 0 Then
            opdaterbeløb lejerRæk, beløb
        Else
            MsgBox ("LejerNr.: " + CStr(lnr) + " ikke fundet")
        End If
    Wend
   
    Close #1
End Sub
Private Function findLejer(lnr)
Rem find lejenr i liste
    For r = 2 To antalRæk
        If Cells(r, 3) = lnr Then
            findLejer = r
            Exit Function
        End If
    Next r
    findLejer = 0
End Function
Private Sub opdaterbeløb(ræk, beløb)
    Cells(ræk, 4) = Cells(ræk, 4) + beløb
End Sub
Avatar billede mccookie Seniormester
16. marts 2007 - 20:38 #4
Hmm... jeg får denne fejl: Ambiguos name deteced: udførimport
Avatar billede supertekst Ekspert
16. marts 2007 - 20:44 #5
Dette her hører IKKE med til koden:

Kode anbringes i Lejelistens ark1 i VBA
Tekstfilen anbringes i samme Mappe som Lejelisten
Koden iværksættes p.t. fra VBA - men ellers opret en knap og forbind den med:
Public Sub udførImport <<<<<<--------------------- det var en del af forklaringen..
--------------------------------------------------
Avatar billede mccookie Seniormester
16. marts 2007 - 20:45 #6
Oki.... prøver lige igen ;)
Avatar billede mccookie Seniormester
16. marts 2007 - 20:54 #7
Ok, nu kører den, nices, men den finder ingen lejenr.

og jeg trykker ok de ala de 10 linier der er ;)

00200201, 0000003000
00200202, 0000003000
00200203, 0000003000
00200204, 0000003000
00200205, 0000003000
00200206, 0000003000
00200207, 0000003000
00200208, 0000003000
00200209, 0000003000
00200210, 0000003000


Mit regneark:

lejenr    Navn    adresse    beløb
100200201           
100200202           
100200203           
100200204           
100200205           
100200206           
100200207           
100200208           
100200209           
100200210
Avatar billede mccookie Seniormester
16. marts 2007 - 20:55 #8
Ok, nu kører den, nices, men den finder ingen lejenr.

og jeg trykker ok de ala de 10 linier der er ;)

100200201, 0000003000
100200202, 0000003000
100200203, 0000003000
100200204, 0000003000
100200205, 0000003000
100200206, 0000003000
100200207, 0000003000
100200208, 0000003000
100200209, 0000003000
100200210, 0000003000


Mit regneark:

lejenr    Navn    adresse    beløb
100200201           
100200202           
100200203           
100200204           
100200205           
100200206           
100200207           
100200208           
100200209           
100200210
Avatar billede supertekst Ekspert
16. marts 2007 - 20:59 #9
Jeg har testet med 7-ciff. lejenr og der var ingen problemer med opdateringen

Jeg prøver med dit testgrundlag og vender tilbage.

Hvordan er dit lejenr formateret i Lejelisten?
Avatar billede mccookie Seniormester
16. marts 2007 - 21:01 #10
Nu er det formateret som tal...havde som tekst i starten og troede at det var der problemet gemte sig...
Avatar billede mccookie Seniormester
16. marts 2007 - 21:03 #11
prøvede lige med 7 cifre....der sker heller ikke såmeget ....
Avatar billede supertekst Ekspert
16. marts 2007 - 21:04 #12
PS: Jeg anvender denne opstilling i LEJELISTEN iflg. dit spørgsmål:
Navn          Adresse    Leje nr.      Beløb
XXXX          XXXX        0123456        80,00-

altså lejenr. i kolonne C.

Hvis Lejenr er i kolonne A - så ret følgende i denne function:


Private Function findLejer(lnr)
Rem find lejenr i liste
    For r = 2 To antalRæk
        If Cells(r, 1) = lnr Then    '<----------- p.t.:(r,3)
            findLejer = r
            Exit Function
        End If
    Next r
    findLejer = 0
End Function
Avatar billede mccookie Seniormester
16. marts 2007 - 21:09 #13
Ok, so far...... det virker, den henter og opdatere beløbet...

Men... 0000003000 skulle gerne blive til 30,00- og ikke 24000 som nu ;)

den opdaterer heller ikke linie 1 selvom lejeren findes ;(
Avatar billede mccookie Seniormester
16. marts 2007 - 21:10 #14
Hmm....aner ikke hvorfor den skrev 24000, nu skriver den som den skal 3000
Avatar billede mccookie Seniormester
16. marts 2007 - 21:14 #15
Private Sub opdaterbeløb(ræk, beløb)
    Cells(ræk, 4) = Cells(ræk, 4) + beløb / 100
End Sub

Ændrede ovenstående..... kan man indsætte 2 decimaler via den Sub??
Avatar billede supertekst Ekspert
16. marts 2007 - 21:16 #16
Første lejer - programmet antager, at linie 1 i importfilen er overskrifter - da dette ikke er tilfældet så sletter du følgende:

Private Sub importer()
Dim lejenr, beløb, lejerRæk

    Open sti + importFilnavn For Input As #1
Rem indlæs overskrift            '<---- slettes
    Input #1, txt1, txt2          '<---- slettes
   
    While Not EOF(1)
        Input #1, lejenr, beløb
        lejerRæk = findLejer(lejenr)
        If lejerRæk > 0 Then
            opdaterbeløb lejerRæk, beløb
        Else
            MsgBox ("LejerNr.: " + CStr(lnr) + " ikke fundet")
        End If
    Wend
Avatar billede mccookie Seniormester
16. marts 2007 - 21:16 #17
Jeg har blot formateret cellerne, så det er nærmest fiset....

Dog halter den lidt på linie 1
Avatar billede mccookie Seniormester
16. marts 2007 - 21:18 #18
Jamens hvad skal jeg sige..... ???

Det virker ligesom jeg tænker det skal ;) topnice...... og det løser en million problemer for mig ;)
Avatar billede mccookie Seniormester
16. marts 2007 - 21:19 #19
En luksusting.....kan evt. oprettes som ekstra spm.

Kan man tage alle de beløb som der ikke findes en lejer til, lægge dem sammen og til sidst udskrive dem som et beløb??
Avatar billede supertekst Ekspert
16. marts 2007 - 21:21 #20
Iflg. dette: "og beløbet skal udskrives i kroner.." var antagelsen at det var hele kr - men hvis dette ikke er tilfældet - så er din tilføjelse OK - men beløbs-kolonner skal så formateres med 2 dec.
Avatar billede mccookie Seniormester
16. marts 2007 - 21:22 #21
Jeps, har nemlig bare formateret hele kolonnen og det ser ud til at virke ligesom det skal ;)
Avatar billede supertekst Ekspert
16. marts 2007 - 21:24 #22
Vedr. "Luksus" - den få du med i købet. - et øjeblik.....
Avatar billede mccookie Seniormester
16. marts 2007 - 21:26 #23
oki....
Avatar billede supertekst Ekspert
16. marts 2007 - 21:38 #24
Const importFilnavn = "import.txt"          'kan tilpasses
Dim sti, antalRæk
Dim ingenLejer As Single
Private Sub udførImport()
Rem hentsti
    sti = ActiveWorkbook.Path
    If Right(sti, 1) <> "\" Then
        sti = sti + "\"
    End If
   
    ingenLejer = 0
   
Rem antalrækker i lejeliste
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
   
Rem udfør importen
    importer

Rem Test om omsamlede beløb for ukendt lejer
    If ingenLejer > 0 Then
        antalRæk = antalRæk + 1
        Cells(antalRæk, 1) = "Ukendt lejer"
        Cells(antalRæk, 4) = ingenLejer
    End If

    MsgBox ("Importen udført")
End Sub
Private Sub importer()
Dim lejenr, beløb, lejerRæk
    Open sti + importFilnavn For Input As #1
    While Not EOF(1)
        Input #1, lejenr, beløb
        lejerRæk = findLejer(lejenr)
        If lejerRæk > 0 Then
            opdaterbeløb lejerRæk, beløb
        Else
            MsgBox ("LejerNr.: " + CStr(lejenr) + " ikke fundet")
            ingenLejer = ingenLejer + beløb
        End If
    Wend
   
    Close #1
End Sub
Private Function findLejer(lnr)
Rem find lejenr i liste
    For r = 2 To antalRæk
        If Cells(r, 1) = lnr Then
            findLejer = r
            Exit Function
        End If
    Next r
    findLejer = 0
End Function
Private Sub opdaterbeløb(ræk, beløb)
    Cells(ræk, 4) = Cells(ræk, 4) + beløb / 100
End Sub
Avatar billede supertekst Ekspert
16. marts 2007 - 21:39 #25
Ups.: skal også have tilføjet / 100

            ingenLejer = ingenLejer + beløb / 100
Avatar billede mccookie Seniormester
16. marts 2007 - 21:42 #26
Hmm...den spørger efter et navn til denne makro..... virker ikke helt....
Avatar billede supertekst Ekspert
16. marts 2007 - 21:44 #27
Hvor optræder fejlen - er der mulighed for DEBUG - hvad er meldingen??
Avatar billede mccookie Seniormester
16. marts 2007 - 21:45 #28
Nu kører den...men påstår at alle lejere ikke eksisterer......og den lægger 10*300kr sammen til 300.000,-
Avatar billede mccookie Seniormester
16. marts 2007 - 21:48 #29
Nu tæller den rigtigt...... men trodser at listen kontra filen indeholder de samme 10 lejer numre....
Avatar billede supertekst Ekspert
16. marts 2007 - 21:49 #30
Spørgsmål: Jeg har flyttet LejeNr til kolonne A - har du også det eller???

Har du udført tilføjelsen - min kommentar 21:39:57 ???
Avatar billede mccookie Seniormester
16. marts 2007 - 21:50 #31
Spørgsmål: Jeg har flyttet LejeNr til kolonne A - har du også det eller???
OK, finder ikke lejerne

Har du udført tilføjelsen - min kommentar 21:39:57 ???
Jeps, den virker nu efter hensigten
Avatar billede supertekst Ekspert
16. marts 2007 - 21:52 #32
Status? - er det OK
Avatar billede mccookie Seniormester
16. marts 2007 - 21:54 #33
Men den finder ikke lejerne...
Avatar billede mccookie Seniormester
16. marts 2007 - 21:56 #34
Åh nej, nu kommer der en runtime error 55 når jeg forsøger at køre den, noget med file already open!
Avatar billede supertekst Ekspert
16. marts 2007 - 21:59 #35
Hvilken kolonne i Lejeliste har du p.t. Lejenr?

I den sidste version forudsætter programmet, at det er kolonne A:
***
Rem find lejenr i liste
    For r = 2 To antalRæk
        If Cells(r, 1) = lnr Then <---- (r,1) 1 = A
            findLejer = r
            Exit Function
        End If
    Next r
    findLejer = 0
End Function
***

Hos mig er der ingen problemer!!
Avatar billede mccookie Seniormester
16. marts 2007 - 22:00 #36
Arrghhh.... de ligger jo stadig i kol C læste lige lidt for hurtigt!!
Avatar billede supertekst Ekspert
16. marts 2007 - 22:02 #37
Det tager vi lige højde for - ny version af nedenstående "Sub":

Private Sub importer()
Dim lejenr, beløb, lejerRæk
On Error GoTo lukImport

    Open sti + importFilnavn For Input As #1
    While Not EOF(1)
        Input #1, lejenr, beløb
        lejerRæk = findLejer(lejenr)
        If lejerRæk > 0 Then
            opdaterbeløb lejerRæk, beløb
        Else
            MsgBox ("LejerNr.: " + CStr(lejenr) + " ikke fundet")
            ingenLejer = ingenLejer + beløb / 100
        End If
    Wend
   
    Close #1
    Exit Sub
   
lukImport:
    Resume Next
End Sub

Skulle fungere - men tester den lige....
Avatar billede mccookie Seniormester
16. marts 2007 - 22:04 #38
Ok...prøver lige at oprette nyt regneark....nu er den helt på tværs...
Avatar billede supertekst Ekspert
16. marts 2007 - 22:04 #39
Testet OK
Avatar billede mccookie Seniormester
16. marts 2007 - 22:09 #40
Ok.... men nu er den vist helt galt ;( Når jeg trykker play, så kommer der bare en tom boks op, har jeg trykket på noget forkert? VBA scriptet ligger der som det skal!
Avatar billede supertekst Ekspert
16. marts 2007 - 22:13 #41
Hvis du sender en mail til mig: pb@supertekst-it.dk - så returnerer jeg min testfiler.
Avatar billede mccookie Seniormester
16. marts 2007 - 22:15 #42
gjort
Avatar billede supertekst Ekspert
16. marts 2007 - 22:40 #43
Er ikke modtaget i skrivende stund - hvis ikke der er noget i postkassen indenfor rimelig tid - så fortsætter vi i morgen.....
Avatar billede mccookie Seniormester
16. marts 2007 - 22:49 #44
Det er sendt igen....

Hvordan kan det være at jeg ikke kan afvikle/køre VBA script fra min Excel nu??
Avatar billede supertekst Ekspert
16. marts 2007 - 23:03 #45
?? - Prøv evt. at genstarte....
Avatar billede mccookie Seniormester
16. marts 2007 - 23:09 #46
Er startet igen ved udgangspunktet....

Når den starter scriptet...kører den og udskriver og så skriver den noget Input past end of file og kører jeg den igen siger den: file already open!
Avatar billede mccookie Seniormester
16. marts 2007 - 23:27 #47
De virker 100%

Smid et svar og indkasserer straks 200p
Avatar billede supertekst Ekspert
16. marts 2007 - 23:33 #48
Fint - tak for dysten...
Avatar billede mccookie Seniormester
16. marts 2007 - 23:40 #49
Jeg bukker og takker endnu engang ;)
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