Oprettet tor. d. 22. juli 2010 kl. 09:44:14

jean01ad
jean01ad (8.030 point. Point ude: 290)

Søg og indsæt - fortsat

Hej supertekst.

Tak for dit svar i tidligere spg.

Jeg har dog et par yderligere ting som driller, og håber derfor at du vil ofre lidt mere tid på at hjælpe.

Indledningsvis, så har jeg ændret lidt i den formel du lavede, således. at "Beløb" = Det fulde beløb. Dvs. det er ikke bare ændringen (jeg har sat en note i VBA koden, så du kan se hvad jeg mener). Årsagen er, at jeg egentlig regnede med, at det var tilstrækkeligt at se det overordende resultat.

Mit problem er nu, at jeg har behov for også at se hvor ændringen har været. Således kunne jeg godt tænke mig, at kolonne O ligges under "beløb" i personale (Det gør den ved den ændring jeg har lavet i koden), men yderligere, at kolonne N bliver lagt i kolonne V "Ændring" i personale

Jeg har dog I den forbindelse yderligere et problem, nemlig at konto 210100 løn består af tre elementer, nemlig grundløn, resultatløn og tillæg - men de ligger alle på samme overordnede konto. Jeg ville jo egentlig gerne se hvordan fordelingen mellem de tre konti er, men jeg kan ikke ødelægge strukturen i rækkerne under "personale". Er det muligt, at der ud for konto 210100 i personale arket, bliver specificeret, eks. i kolonne X:Z, hvordan lønne er bygget op. 

Ekspmelvis: ALM har en løn org. løn på 1125. 1000 er grundløn, 100 er resultatløn og 25 er tillæg. Nu får hun 1000 kr. mere i grundløn 100 mere i reultatløn og 10 kr yderligere i tillæg. Kan macroen så ligge de ændrede beløb ud i hhv. x, y, Z kolonnen ud for 210100? Jeg har prøvet at illustrere i filen.

Din hjælpe betyder rigtig meget, så tak for det.

Skrevet tor. d. 22. juli 2010 kl. 09:52:08| #1

supertekst
supertekst (119.439 point)
supertekst-it.dk
Hej jean01ad

Vender tilbage senere...

Skrevet fre. d. 30. juli 2010 kl. 16:03:29| #2

supertekst
supertekst (119.439 point)
supertekst-it.dk
Const lønKontoNr = 210100

Const ændringsOmråde = "N16:N65"
Const detailFarve = 19

Dim arkPersonale As Worksheet

Dim kontonr As Long, initialer As String, beløb As Long, ændring As Long
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$M$12:$O$12" Then
        svar = MsgBox("Opdater ændringer?", vbYesNo)
        If svar = 6 Then
            Set arkPersonale = ActiveWorkbook.Sheets("Personale")

            findEvtÆndringer
        End If
    End If
End Sub
Private Sub findEvtÆndringer()
Dim celle, adr As String, pRæk As Long
   
    Application.ScreenUpdating = False
   
    For Each celle In Range(ændringsOmråde).Cells
        If celle.Interior.ColorIndex = detailFarve And _
            IsNumeric(celle.Value) = True And celle.Value <> "" Then
            adr = celle.Address
            kontonr = Range(adr).Offset(0, 2)
            initialer = Range("B3")

Rem Jeg har ændret her, så beløb hedder: beløb = Range (adr).Offset (0,1)
            beløb = Range(adr).Offset(0, 1)
            ændring = Range(adr)
           
            pRæk = findRække(initialer, kontonr)
           
            If pRæk > 0 Then
                opdaterPersonaleÆndring pRæk, beløb, ændring
Rem er det lønkonto
                If kontonr = lønKontoNr Then
                    opdaterLønkonto pRæk, Range("O16"), Range("O17"), Range("O18")
                End If
            Else
                MsgBox ("Række i Personale ej fundet vedr.: " & initialer & "/" & CStr(kontonr))
            End If
        End If
    Next celle
   
    pRæk = findFørsteRække(initialer)
    opdaterPersonaleIngenÆndringer initialer, pRæk
   
    arkPersonale.Activate
    arkPersonale.Columns.AutoFit
    Application.ScreenUpdating = True
End Sub
Private Function findRække(initialer, kontonr)
Dim ræk As Long, række As String
   
    With arkPersonale
        For ræk = 2 To 65126
            række = ræk
            If .Range("A" & række) <> "" Then
                If .Range("B" & række) = initialer And .Range("D" & række) = kontonr Then
                    findRække = ræk
                    Exit Function
                End If
            Else
                Exit For
            End If
        Next ræk
    End With
   
    findRække = 0
End Function
Private Sub opdaterLønkonto(ræk, grundLøn, resultatLøn, tilLæg)
Dim række As String
    række = ræk
    With arkPersonale
        .Range("X" & række) = grundLøn
        .Range("Y" & række) = resultatLøn
        .Range("Z" & række) = tilLæg
    End With
End Sub
Private Sub opdaterPersonaleÆndring(ræk, beløb, ændring)
Dim celle, adr As String, række As String
    række = ræk
    With arkPersonale
        For Each celle In .Range("A" & række & ":" & "E" & række).Cells
            adr = celle.Address
            .Range(adr).Offset(0, 13) = .Range(adr).Value
        Next
       
        For Each celle In .Range("G" & række & ":" & "H" & række).Cells
            adr = celle.Address
            .Range(adr).Offset(0, 13) = .Range(adr).Value
        Next

Rem test beløb
        If beløb <> 0 Then
            .Range("S" & række) = .Range("S" & række) + beløb
            .Range("V" & række) = .Range("V" & række) + ændring
        End If
    End With
End Sub
Private Function findFørsteRække(initialer)
Dim ræk As Long, række As String
   
    With arkPersonale
        For ræk = 2 To 65126
            række = ræk
            If .Range("A" & række) <> "" Then
                If .Range("B" & række) = initialer Then
                    findFørsteRække = ræk
                    Exit Function
                End If
            Else
                Exit For
            End If
        Next ræk
    End With
   
    findFørsteRække = 0
End Function
Private Sub opdaterPersonaleIngenÆndringer(initialer, ræk1)
Dim celle, adr As String, række As String
   
    For ræk = ræk1 To 65126
        række = ræk
        With arkPersonale
            If .Range("B" & række) = initialer Then
Rem udfyld kun ikke allerede udfyldte rækker
                If .Range("N" & række) = "" Then
                    For Each celle In .Range("A" & række & ":" & "H" & række).Cells
                        adr = celle.Address
                        .Range(adr).Offset(0, 13) = .Range(adr).Value
                    Next
                End If
            Else
                Exit For
            End If
        End With
    Next ræk
End Sub

Skrevet man. d. 02. august 2010 kl. 09:17:35| #3

supertekst
supertekst (119.439 point)
supertekst-it.dk
Der var nu lagt et svar..

Skrevet tor. d. 05. august 2010 kl. 14:27:19| #4

supertekst
supertekst (119.439 point)
supertekst-it.dk
men du kan få et friskt - ..

Skrevet tir. d. 28. september 2010 kl. 14:43:46| #5


Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Svar til: X i en celle giver et andet resultat i anden...

Oprettet den 11. februar 2012 kl. 14.15
ashurra giver 100 point for svar | Giv et svar »

Hjælp til formel rente/antal dage

Oprettet den 11. februar 2012 kl. 12.14
petert giver 30 point for svar | Giv et svar »

Problemløser, "HVIS" formel, eller andet til optimering?

Oprettet den 11. februar 2012 kl. 02.36
Olav123 giver 150 point for svar | Giv et svar »

Seneste guides

Installer win 7
Den gode bruger


   




Tips & Tricks fra PC World

Teaser billede

Her er fem sjove danske websider du skal kende

Trænger dine lattermuskler til en omgang fitness på dansk? Vi viser vej til fem websider fyldt med humor og vanvittig satire.


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Nu kan du snart hente Windows 8

Den nye offentlige betaversion af Windows 8 er klar i denne måned.


Nyheder fra Computerworld

Teaser billede

Måske snart slut med Androids helt store problem

Android-platformen har længe været plaget af et særligt problem. Men måske er problemet nu ved at være elimineret.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger