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
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.. --------------------------------------------------
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
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
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.
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
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 ***
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
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!
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.