Avatar billede PGFfyn Mester
29. oktober 2019 - 12:48 Der er 38 kommentarer og
1 løsning

Bogholderi/kasseklade VBA koder

Hej.
Skal bruge et bogholderi program i VBA og har tænkt selv at lave dette - har go tid som pensionist - og har lavet lidt i VBA tidligere.
Hvilke koder skal bruges for at bogføre kassekladden, dvs. at få kassekladdens data overført til de i forvejen oprettede konti (= vertikale kontoblade i Excel)1 af gangen.
Søgning efter den korrekte konto må foregå vha. af kontonummer, og ved hjælp af tællere overføres beløb m.v. til 1. ledige position på kontokortet.
Håber det er nogenlunde beskrevet.
MVH

Povl
Avatar billede kim1a Ekspert
29. oktober 2019 - 16:21 #1
Næste ledige række (eller første tomme celle i en kolonne):
NextRow = Range("B" & Rows.Count).End(xlUp).Row + 1

Jeg ville tænke at en knap der siger "bogfør kassekladde" og så skal du have en
for next loop der løber hver enkelt linje igennem og sætter den ind ind på rigtig konto - noget a la:

For r = 1 to rows.count
kopier linje
find kontonr
sæt linje korrekt hen
next r
Avatar billede PGFfyn Mester
29. oktober 2019 - 17:00 #2
Hej Kim.

Lyder godt.

Mit største problem er din linje 3 - Find kontonr.

Jeg forestiller mig at min curser i Excel står på et kontonummer i kassekladden, og nu skal der findes det rigtige kontokort hvor linjen fra kassekladden skal bogføres - om der er noget LookUp eller lignende har jeg desværre ingen anelse om.
MVH

Povl
Avatar billede kim1a Ekspert
29. oktober 2019 - 18:49 #3
Ønsker du at hver fane er et kontokort, eller hvordan definerer du dette?
Avatar billede Jan K Ekspert
29. oktober 2019 - 19:52 #4
Der skal vel laves en postering på relevant konto og en tilvarende modpostering på en finanskonto?
Avatar billede kim1a Ekspert
29. oktober 2019 - 22:26 #5
Ja naturligvis. Det jeg mener er har du ikke tænkt dig at angive begge disse som bilagslinjer i en kassekladde? Skal vi så bare flytte samtlige bilagslinjer over i et andet ark og lave sumformler derfra for at vise konti?
Avatar billede Jan K Ekspert
30. oktober 2019 - 00:33 #6
#5 Nu ved jeg ikke hvordan OP's kassekladde ser ud. Den jeg bruger har disse felter

Dato, Bilagsnr, Tekst, Konto, Indtægter, Udgifter, Modkonto. I sidste felt kan man væge K for Kasse
og så B1, B2, B3 for tre forskellige bankkonti.

Der er altså kun en linje pr postering i kassekladden.
Avatar billede kim1a Ekspert
30. oktober 2019 - 07:58 #7
#5 ja det kan man beslutte hvordan man gør, det giver mindre indtastning at have de to konti på samme linje, men når vi arbejder i Excel (som er ret frit) kan det nemt give fejl, derfor vil jeg prioritere to linjer pr postering, fordi så er simpleste check altid at beløb giver nul.

Det er smag og behag.
Avatar billede PGFfyn Mester
30. oktober 2019 - 09:22 #8
Kim.
Ja jeg forestiller mig at der i Excel er et "fysisk" kontokort for hver konto ala et kontoudskrift fra banken, men selvfølgelig indeholdende de posteringer der er foretaget i kassekladden.
Jan.
Ja. Modpost på en finanskonto vil jeg kunne lave direkte i Excel.
Kim.
Jeg vil bevare kassekladden som den er, og kopiere linjen i kassekladden til det relevante kontokort (kontonummeret bestemmer hvortil linjen i kassekladden skal afleveres) som jeg har lavet i forvejen, måske 50 kontokort i samme Excel-ark som kassekladden, og når regnskabets time oprinder bruge summeringer derfra.
Avatar billede PGFfyn Mester
31. oktober 2019 - 13:24 #9
Hej igen.
Har 2 andre - formentlig - små problemer for jer.
Hvad er koden til følgende:
1. Står i en VILKÅRLIG celle med curseren og vil undersøge om denne celles tal = lig med et andet tal, dvs. uden rangeangivelse i koden.
2. Står i en vilkårlig celle, og vil kopiere denne celle og 6 celler til højre. Også her uden rangeangielse måske Right 6.
Venlig hilsen

Povl
Avatar billede Jan K Ekspert
31. oktober 2019 - 13:40 #10
1) Hvis du ikke vil have Range angivelse, hvorfra skal koden så vide, hvilket tal, der skal sammenlignes med?

2)   
    st = ActiveCell.Address
    sl = ActiveCell.Offset(0, 5).Address
    ActiveSheet.Range(st & ":" & sl).Copy
Avatar billede PGFfyn Mester
31. oktober 2019 - 14:52 #11
Tak.
1.
OK - kun den ene er uden Rangeangivelse - og det er curserens vilkårlige position.

Prøver kopiafdelingen - godt med noget hjælp.

Venlig hilsen

Povl
Avatar billede Jan K Ekspert
31. oktober 2019 - 15:05 #12
Hvis der cursorens placering så brug ActiveCell.Value
Avatar billede PGFfyn Mester
31. oktober 2019 - 15:19 #13
Hvordan giver man point i det her system
Avatar billede Jan K Ekspert
31. oktober 2019 - 15:29 #14
Der gives ikke længere point. Du kan bare acceptere en løsning.
Avatar billede kim1a Ekspert
31. oktober 2019 - 19:23 #15
Og en anden gang kan du godt give flere ;-)
Avatar billede PGFfyn Mester
31. oktober 2019 - 19:39 #16
Hej.
Det skal jeg huske.
Men hvorfor vil denne kode ikke kopiere linje nr. 2 i kasserapporten men kun den første - og desværre medfører at Excel går ned og skal genstartes.
Det kan gi thumps UP.
Dim ned As Integer
    ned = 1
    Do Until Range("a3") = ned
    Range("a5..g5").Select
    Selection.ClearContents
    Range("a6").Select
    ActiveCell.Offset(ned, 0).Select
    st = ActiveCell.Address
    sl = ActiveCell.Offset(0, 6).Address
    ActiveSheet.Range(st & "." & sl).Copy
    Range("a5").Select
    ActiveSheet.Paste
    Range("n5").Select
    If ActiveCell.Value = Range("d5").Value Then
    Selection.End(xlDown).Select
    ActiveCell.Offset(1, 0).Select
    ActiveSheet.Paste
    Application.CutCopyMode = True
    ned = ned + 1
    Else
    Selection.End(xlToRight).Select
    End If
    Loop
   
End Sub
Avatar billede store-morten Ekspert
31. oktober 2019 - 20:13 #17
Ser flere fejl ;-)

Men:
Selection.End(xlDown).Select vælger sidste række (N1048576)
Og derefter:
ActiveCell.Offset(1, 0).Select gå en celle ned!
Avatar billede store-morten Ekspert
31. oktober 2019 - 20:22 #18
Hvis N5 = D5 så:

Else
Selection.End(xlToRight).Select vælger sidste kolonne (XFD5)
Avatar billede PGFfyn Mester
31. oktober 2019 - 20:41 #19
Jan.

Hvori bestod rettelsen?
End Down er fyldt ud og stopper ved sidste celle som har indhold.

MVH

Povl
Avatar billede PGFfyn Mester
01. november 2019 - 07:59 #20
Hej igen.
Selection.End(xlToRight).Select vælger sidste kolonne (XFD5)

Er du helt sikker.
Mener at denne ordre stopper curser når den møder et indhold, og koderne kan da også overføre første linje i kasserapporten uden problemer ved hjælp af denne ordre, men derefter går det galt - og Excel går ned med fuld musik og skal genstartes.

Er der nogen der kan huske hvordan man kan angive at en formel skal gælde for et større område, dvs. der at der ikke skal kopieres formler.
Avatar billede store-morten Ekspert
01. november 2019 - 08:11 #21
Jeg testede i et tomt ark ;-(
Trækker mig
Avatar billede PGFfyn Mester
01. november 2019 - 08:28 #22
Betyder vel at du har ret?
Avatar billede Jan K Ekspert
01. november 2019 - 10:26 #23
Hvad står der i A3 til at begynde med?
Avatar billede PGFfyn Mester
01. november 2019 - 10:43 #24
4 - den tæller antal udfylde linjer i kasserapporten.
Kan se at ActiveCell.value ikke kan genkende et tal anden gang der skal udlægges linjer, men dog første gang.
Måske et eller andet hænger som forhindrer genkendelse?
Avatar billede Jan K Ekspert
01. november 2019 - 13:50 #25
Er det den damme celle, der er ActveCell i næste omgang?
Avatar billede PGFfyn Mester
01. november 2019 - 14:05 #26
Nej.
Avatar billede Jan K Ekspert
01. november 2019 - 15:00 #27
Hvis det ikke er den samme celle hver gang, kan det så tænkes, at det i virkeligheden ikke er et tal næste gang?

Der er så vidt jeg ved ingenting, der ændrer den måde VBA opfatter værdier på fra gennemløb til gennemløb.
Avatar billede PGFfyn Mester
01. november 2019 - 15:43 #28
Nej - har netop anvendt alle tal i en regneoperation - og det er tal.

Vi holder her - så starter jeg forfra - skal nok få det til at virke - engang.

Tak for nu.
Avatar billede Jan K Ekspert
01. november 2019 - 15:54 #29
Helt i orden. God fornøjelse :-)
Avatar billede store-morten Ekspert
01. november 2019 - 17:17 #30
Prøv denne:
Sub test()
Dim Næste As Integer

Næste = 1
Sidste = Range("A3") + 1

    Do Until Sidste = Næste
        Range("A5:G5").ClearContents
        Range("A6").Offset(Næste, 0).Select
       
    st = ActiveCell.Address
    sl = ActiveCell.Offset(0, 6).Address
       
        ActiveSheet.Range(st & ":" & sl).Copy _
        destination:=ActiveSheet.Range("A5")
   
        If Range("N5").Value = Range("D5").Value Then
       
            SidsteRækkeKolonneN = Range("N" & Rows.Count).End(xlUp).Row + 1
            Range("N" & Range("N" & Rows.Count).End(xlUp).Row + 1).Select
           
            ActiveSheet.Range(st & ":" & sl).Copy _
            destination:=ActiveCell
           
            Application.CutCopyMode = True
            Næste = Næste + 1
           
            Else
            Selection.End(xlToRight).Select
           
        End If
    Loop
 
End Sub
Avatar billede PGFfyn Mester
01. november 2019 - 17:26 #31
If Range("N5").Value = Range("D5").Value Then

Den fejler her, og udlægger kun 1. linje
Avatar billede store-morten Ekspert
01. november 2019 - 17:46 #32
Har sendt en PB
Avatar billede PGFfyn Mester
03. november 2019 - 20:35 #33
Hej Jan.

Så kom der styr på udlægningen, nu funker det, og starter om nogle dage med sikkerhed og tanker for brugeren.
Stor hjælp fra dig - tak for det - måske jeg vender tilbage, bla. for at se om du kan smadre systemet.
Og StoreMorten - med privat besked og tilsendt regneark - der blev meget stille.
Just for INFO og relevante kommentarer: er 73 år gammel, ØK-direktør i 30 år (migatronic), og Stats.aut.Rev og startede med macroer i Lotus123 i 1982
Tak for nu.

Venlig hilsen

Povl
Avatar billede store-morten Ekspert
03. november 2019 - 20:51 #34
Jeg har lagt min adr. i PB. og har intet modtaget ;-(
Avatar billede PGFfyn Mester
04. november 2019 - 08:21 #35
Har igen checket din adresse, og mailen er ikke kommet retur, så adressen som den er sendt til må vel eksistere.
Avatar billede PGFfyn Mester
05. november 2019 - 12:56 #36
Hej Jan.
Har brugt Find til at finde adresse på kontonummer, og nu vil gerne at cursoren går til denne adresse - men hvordan.
Jeg er sikker på at du ved det!
MVH

Povl
Avatar billede store-morten Ekspert
06. november 2019 - 16:19 #37
Kode pt.
Sub OverFørPoster()

Dim Næste As Integer

Application.ScreenUpdating = False
Næste = 1
sidste = WorksheetFunction.CountA(Range("A7:A99")) + 1

    Do Until sidste = Næste
        Range("A5:G5").ClearContents
        Range("A6").Offset(Næste, 0).Select
       
    st = ActiveCell.Address
    sl = ActiveCell.Offset(0, 6).Address
       
        ActiveSheet.Range(st & ":" & sl).Copy _
        Destination:=ActiveSheet.Range("A5")
   
        kol = Range("N5:ZZ5").Find(What:=Range("D5")).Column
        Cells(Rows.Count, kol).End(xlUp).Offset(1, 0).Select
       
           
            ActiveSheet.Range(st & ":" & sl).Copy _
            Destination:=ActiveCell
           
            Application.CutCopyMode = True
            Næste = Næste + 1
    Loop
   
    Range("A5:G5").ClearContents
Application.ScreenUpdating = True
End Sub
Avatar billede store-morten Ekspert
06. november 2019 - 22:05 #38
Forfinet kode:
Sub OverFørPoster()
Dim Næste, sidste, SøgKontoNr, kol As Integer
Dim st, sl As String

Application.ScreenUpdating = False

Næste = 1
sidste = WorksheetFunction.CountA(Range("A7:A99")) + 1

    Do Until sidste = Næste
        Range("A6").Offset(Næste, 0).Select
       
    st = ActiveCell.Address
    sl = ActiveCell.Offset(0, 6).Address
    SøgKontoNr = ActiveCell.Offset(0, 3)
   
        kol = Range("N5:ZZ5").Find(What:=SøgKontoNr).Column
       
    ActiveSheet.Range(st & ":" & sl).Copy _
    Destination:=Range(Cells(Rows.Count, kol).End(xlUp).Offset(1, 0).Address)
   
        Næste = Næste + 1
    Loop

Application.CutCopyMode = True
Application.ScreenUpdating = True
End Sub
Avatar billede PGFfyn Mester
08. november 2019 - 17:19 #39
Er der nogen som kan gennemskue hvor denne macro ikke gemmer første fil
men nr. 2.
Filen som makroen kører fra er nr. 2. Ser ud til at æ ø er blevet forvansket i kopieringen.

Sub GEMejBogf()

Dim Filnavn As String
Dim Gemme As String

Filnavn = "KasseEJbogf"
ChDir "C:\users\povl\desktop\"
ActiveWorkbook.SaveAs


Filnavn = "Kasse Bogf?rt"
ChDir "C:\users\povl\desktop\"
ActiveWorkbook.SaveAs

End Sub
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

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