Avatar billede Peter Praktikant
23. januar 2002 - 14:15 Der er 19 kommentarer og
1 løsning

Regnskab med brug af tal fra tidligere regnskab

Jeg har et regnskab som består af x søjler og en række for hver forbruger. De første søjler er forbrug af hver vare, den næste søjle er regning for forbrug, den næste søjle er forbrugerens gl. gæld. Den næste er at betale (regning + gl. gæld), den sidste er betalt.
Jeg har lavet det sådan, at når jeg laver et nyt regnskab skubber jeg det gamle ned og kopiere en skabelon ind som ikke er udfyldt. Det gør så, at der kommer en række gamle regnskaber nedenunder det nyeste, hvor det nyeste afhænger af alle de tidligere fordi gl. gæld bliver udregnet ud fra "at betale" - "betalt" for måneden før.
Jeg vil så gerne have det sådan, at det kun er det nyeste regnskab der er i arket + en søjle med gl. gæld. Derfor ville det så blive nødt til at fungere på den måde, at når jeg skal til at lave det nye regnskab skal der for hver forbruger udregnes gl. gæld ved at tage "at betale" - "betalt" i det nyeste regnskab og så slette alt forbrug og betalt-søjlen så det er klart til at taste ind i. gl. gæld skal derfor ikke udregnes med en formel, men tages fra en søjle som opdateres en gang om måneden (altså når jeg laver nyt regnskab).
Spørgsmålet er derfor efter denne lange udredning:
Kan man lave en funktion som tager og udregner den nuværende gæld for alle forbrugere og smider den over i en søjle og derefter sletter alle værdier i et bestemt antal celler?
Avatar billede Peter Praktikant
23. januar 2002 - 14:18 #1
værdien der bliver smidt over i en anden celle skal selvfølgelig være statisk, altså ikke afhænge af andre celler.
Avatar billede Peter Praktikant
23. januar 2002 - 15:01 #2
jeg ved ikke om jeg lige skal prøve at præcisere det jeg gerne vil have:
Regnearket:
  a-h                    i          j            k          l        q
søjler med forbrug    regning    gl. gæld    at betale    betalt    gæld pt

regning udregnes fra forbrug. gl. gæld fås fra sidste måneds at betale-betalt. at betale er regning+gl.gæld. Betalt giver sig selv. gæld pt er at betale-betalt. gæld pt er en søjle med formler (=K12-L12 f.eks).
Det jeg skal bruge, er en macro der kopierer q-søjlen over i j søjlen og sletter søjlerne A-H og L.
Avatar billede Peter Praktikant
23. januar 2002 - 15:02 #3
q-søjlen skal kopieres over i j-søjlen som værdier.
Bogstaverne blev desværre rykket, men jeg håber i kan tyde det alligevel.
Avatar billede ransborg Juniormester
23. januar 2002 - 15:11 #4
Du kan evt bruge denne her:
Sub Makro1()
'
' Makro1 Makro
' Makro indspillet 23-01-2002 af Claus Ransborg
'

'
    Range("Q2").Select
    Range(Selection, Selection.End(xlUp)).Select
    Range("Q2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Range("J2").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Range("A2:H2").Select
    Range("H2").Activate
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("L2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents
End Sub


MVH
Claus
Avatar billede ransborg Juniormester
23. januar 2002 - 15:23 #5
hmmmm det er meget skidt, at man ikke kan se på oversigten, om der er kommet nye indslag.

:-( Claus
Avatar billede ransborg Juniormester
23. januar 2002 - 15:24 #6
hov, sorry - nu er det mig, som lige skal se mig for :-)
Avatar billede Peter Praktikant
23. januar 2002 - 15:27 #7
man kan da se hvor mange indlæg der er. Jeg har ikke prøvet endnu, det skal vel sættes ind som en macro.
Hvad skal jeg helt præcist ændre, hvis det kun er rækkerne fra 3 til 18 det drejer sig om?
Avatar billede ransborg Juniormester
23. januar 2002 - 15:33 #8
Du skal ændre de steder, hvor der står angivet 2 f.eks. A2:H2 skal rettes til A3:H3 - jeg har lavet den, så den tager de rækker, som du har med. Det vil sige, om der er 18 eller 19 rækker, betyder intet.

MVH
Claus
Avatar billede Peter Praktikant
23. januar 2002 - 16:41 #9
jeg har nu prøvet at implementere det, men der er et mindre problem. Jeg har i forvejen en programstump til at køre:Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rPayed As Range
    Set rPayed = Range("L3:L18")
   
    If Not Intersect(Target, rPayed) Is Nothing Then
        If Not Target.Value = "" Then
            Dim wksPay As Worksheet
            Dim lNumRow As Long
            Set wksPay = ActiveWorkbook.Worksheets("Indbetalt")
            lNumRow = wksPay.Range("A2").CurrentRegion.Rows.Count + 1
            wksPay.Range("A" & CStr(lNumRow)).Value = Range("A" & CStr(Target.Row)).Value
            wksPay.Range("C" & CStr(lNumRow)).Value = Now
            wksPay.Range("D" & CStr(lNumRow)).Value = Target.Value
            wksPay.Range("B" & CStr(lNumRow)).Value = InputBox("Indtast navn på indbetaler", "Systeminformation")
            Set wksPay = Nothing
        End If
    End If
   
    Set rPayed = Nothing
End Sub

Denne brokker sig når makroen vil til at slette indholdet af første celle med indhold i søjle L, er der en måde dette kan løses på?
Avatar billede Peter Praktikant
23. januar 2002 - 16:51 #10
jeg har løst det, måske ikke så fix en måde, men her er det i hvert fald:
Range("L2").Select
Selection.ClearContents
Range("L3").Select
Selection.ClearContents
osv
Hvis der er en smartere måde vil jeg meget gerne høre det.
Tak for hjælpen
Avatar billede b_hansen Novice
24. januar 2002 - 07:09 #11
Det burde være nok med

Range("L2:XX").Select
Selection.ClearContents


Hvor XX angiver sidste celle i det område, du vil slette. Det forudsætter naturligvis, at der er tale om et sammenhængende område *S*
Avatar billede b_hansen Novice
24. januar 2002 - 07:14 #12
Ok, det er altid en god ide at læse det hele, inden man svarer *S* . Jeg kan se, at det er kolonne L, der giver problemer, så du kunne bruge følgende:

Range("L2:L18").Select
Selection.ClearContents

På den måde får du slettet alt i kolonne L.
Avatar billede Peter Praktikant
24. januar 2002 - 12:27 #13
men det giver problemer i kollone L pga denne linje i vb-programmet:
If Not Target.Value = "" Then
Så hvis man gør som du skriver får man netop fejl.
Avatar billede b_hansen Novice
24. januar 2002 - 12:51 #14
hvor har du sat Clearcontents ind? Jeg kan ikke se det ud fra dit eksempel.
Avatar billede Peter Praktikant
28. januar 2002 - 11:20 #15
b_hansen > jeg har desværre ikke fået mails om nye indlæg, så du må undskylde jeg først svarer nu. Jeg havde fra start sat de 2 linjer ind du foreslår
Range("L2:L18").Select
Selection.ClearContents
Men det giver en fejl i vb-scriptet når jeg vil udføre makroen.
Men da jeg godt kunne slette cellerne enkeltvis har jeg bare gjort det i makroen. Da makroen kun skal skrives en gang, ser jeg ikke nogle problemer med de ekstra linjer, tidsmæssigt mht udførelse er der heller ikke problemer.
Men hvis du kan gennemskue hvorfor den giver en fejl fra vb-scriptet vil jeg da meget gerne høre det.
Scriptet kan du se i min kommentar fra 16.41 d. 23/1
Avatar billede b_hansen Novice
28. januar 2002 - 11:43 #16
umiddelbart kan jeg ikke se, at der skal være noget galt... Men kan du ikke snyde, og i stedet bruge:

rPayed.Select
Selection.ClearContents

Men jeg kan altså ikke se ud fra din kodestump, hvor du vil foretage din sletning af kolonne L.... Og jeg kan heller ikke få din kode til at fungere her
Avatar billede Peter Praktikant
28. januar 2002 - 12:45 #17
Jeg tror vi snakker lidt forbi hinanden. Dette er hele koden:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rPayed As Range
    Set rPayed = Range("L3:L18")
   
    If Not Intersect(Target, rPayed) Is Nothing Then
        If Not Target.Value = "" Then
            Dim wksPay As Worksheet
            Dim lNumRow As Long
            Set wksPay = ActiveWorkbook.Worksheets("Indbetalt")
            lNumRow = wksPay.Range("A2").CurrentRegion.Rows.Count + 1
            wksPay.Range("A" & CStr(lNumRow)).Value = Range("A" & CStr(Target.Row)).Value
            wksPay.Range("C" & CStr(lNumRow)).Value = Now
            wksPay.Range("D" & CStr(lNumRow)).Value = Target.Value
            wksPay.Range("B" & CStr(lNumRow)).Value = InputBox("Indtast navn på indbetaler", "Systeminformation")
            Set wksPay = Nothing
        End If
    End If
   
    Set rPayed = Nothing
End Sub

Og her er hele makroen:
Sub nyt_regnskab()
'
' Macro5 Macro
' Macro recorded 23-01-2002 by Peter Anskjær
'

'
    Range("Q3:Q18").Select
    Selection.Copy
    Range("J3:J18").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("B3:H18").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("L3").Select
    Selection.ClearContents
    Range("L4").Select
    Selection.ClearContents
    Range("L5").Select
    Selection.ClearContents
    Range("L6").Select
    Selection.ClearContents
    Range("L7").Select
    Selection.ClearContents
    Range("L8").Select
    Selection.ClearContents
    Range("L9").Select
    Selection.ClearContents
    Range("L10").Select
    Selection.ClearContents
    Range("L11").Select
    Selection.ClearContents
    Range("L12").Select
    Selection.ClearContents
    Range("L13").Select
    Selection.ClearContents
    Range("L14").Select
    Selection.ClearContents
    Range("L15").Select
    Selection.ClearContents
    Range("L16").Select
    Selection.ClearContents
    Range("L17").Select
    Selection.ClearContents
    Range("L18").Select
    Selection.ClearContents
    Range("B3").Select
End Sub

VB-scriptet gør, at når jeg indtaster i L3:L18 cellerne tager den værdien samt dato og betaler og indsætter på et andet sheet. Dette gøres med det samme. Dette script skal ikke slette noget.
Makroen bruges så til en gang om måneden at gøre klar til at lave et nyt regnskab.
Men når du skriver rPayed.select... ved jeg ikke om du mener det skal sættes i makroen eller vb-scriptet, hvis det sættes i makroen hvad sker der så? Det ved jeg ikke. Jeg prøver senere i dag, men tror ikke det virker da scriptet brokker sig over at jeg vil slette hele området på en gang, så er det vel ligegyldigt hvordan jeg selecter området.
Avatar billede b_hansen Novice
28. januar 2002 - 12:50 #18
ok, så er jeg med... og så alligevel ikke!!! For jeg kan sagtens få det til at fungere med to linier. Men du skulle vel aldrig have lavet en beskyttelse af cellerne? Det kunne være forklaringen på, at du skal slette dem enkeltvis
Avatar billede Peter Praktikant
28. januar 2002 - 16:09 #19
cellerne er låste, men det er cellerne B3:H18 også, og de kan jo godt blive slettet ved at selecte det hele. Jeg kan ikke slette mere end 1 celle i L3:L18 selvom jeg gør det manuelt, jeg kan godt slette mere end 1 celle ved at highlighte dem, men det giver en fejl fra scriptet. Hvis du vil, kan jeg sende regnearket til dig, så kan det være du bedre kan se hvad jeg mener, men det er kun hvis du er interesseret, for det virker jo sådan set godt nok med denne løsning som dog ikke er den mest elegante. Hvis du vil kan du lige skrive din email-adresse.
Avatar billede b_hansen Novice
29. januar 2002 - 07:27 #20
Jeg tvivler lidt på, at jeg kan gøre det ret meget bedre, når du allerede har rodet med det.... så vi må nok hellere lade det ligge, eftersom du allerede har en løsning, der dækker dit behov.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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