Avatar billede jean01ad Praktikant
22. juli 2010 - 09:44 Der er 5 kommentarer

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.
Avatar billede supertekst Ekspert
22. juli 2010 - 09:52 #1
Hej jean01ad

Vender tilbage senere...
Avatar billede supertekst Ekspert
30. juli 2010 - 16:03 #2
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
Avatar billede supertekst Ekspert
02. august 2010 - 09:17 #3
Der var nu lagt et svar..
Avatar billede supertekst Ekspert
05. august 2010 - 14:27 #4
men du kan få et friskt - ..
Avatar billede supertekst Ekspert
28. september 2010 - 14:43 #5
Lukketid?
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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