Avatar billede trajkovski Nybegynder
16. juli 2009 - 13:45 Der er 1 løsning

Script med cells.find returnerer forkerte værdier

Hej


Jeg er i gang med et vba script i Excel 2007.

Jeg skal kopiere nogle data fra et ark til et andet, hvor jeg benytter cpr-numre som nøgle. Jeg benytter mig af Cells.Find til at finde cpr-nummeret, og så var min idé at sige Sheets("Destinationsark").Range("Destinationscelle").Value = ActiveCell.Offset(noget, noget).Value. Men jeg får ikke samme værdi, som hvis jeg benytter LOPSLAG, hvilket jeg jo burde. Når jeg kigger i data-arket, finder LOPSLAG de rigtige data, mens mit script tilsyneladende opfinder nogle nye eller overfører noget forkert. Den første kørsel af scriptet er korrekt, men i de følgende er tallene forkerte.

Min LOPSLAG funktion ser således ud:
LOPSLAG(VENSTRE('Forhandlingsenhed U+H sorteret'!J2;6)&"-"&HØJRE('Forhandlingsenhed U+H sorteret'!J2;4);ØSLDV!A4:L599;3;SAND)+LOPSLAG(VENSTRE('Forhandlingsenhed U+H sorteret'!J2;6)&"-"&HØJRE('Forhandlingsenhed U+H sorteret'!J2;4);ØSLDV!A4:L599;4;SAND)+LOPSLAG(VENSTRE('Forhandlingsenhed U+H sorteret'!J2;6)&"-"&HØJRE('Forhandlingsenhed U+H sorteret'!J2;4);ØSLDV!A4:L599;5;SAND)+LOPSLAG(VENSTRE('Forhandlingsenhed U+H sorteret'!J2;6)&"-"&HØJRE('Forhandlingsenhed U+H sorteret'!J2;4);ØSLDV!A4:L599;6;SAND)+LOPSLAG(VENSTRE('Forhandlingsenhed U+H sorteret'!J2;6)&"-"&HØJRE('Forhandlingsenhed U+H sorteret'!J2;4);ØSLDV!A4:L599;7;SAND)+LOPSLAG(VENSTRE('Forhandlingsenhed U+H sorteret'!J2;6)&"-"&HØJRE('Forhandlingsenhed U+H sorteret'!J2;4);ØSLDV!A4:L599;8;SAND)+LOPSLAG(VENSTRE('Forhandlingsenhed U+H sorteret'!J2;6)&"-"&HØJRE('Forhandlingsenhed U+H sorteret'!J2;4);ØSLDV!A4:L599;9;SAND)+LOPSLAG(VENSTRE('Forhandlingsenhed U+H sorteret'!J2;6)&"-"&HØJRE('Forhandlingsenhed U+H sorteret'!J2;4);ØSLDV!A4:L599;10;SAND)+LOPSLAG(VENSTRE('Forhandlingsenhed U+H sorteret'!J2;6)&"-"&HØJRE('Forhandlingsenhed U+H sorteret'!J2;4);ØSLDV!A4:L599;11;SAND)+LOPSLAG(VENSTRE('Forhandlingsenhed U+H sorteret'!J2;6)&"-"&HØJRE('Forhandlingsenhed U+H sorteret'!J2;4);ØSLDV!A4:L599;12;SAND)

Jeg beklager at mit script ser så rodet ud men jeg har prøvet megt forskelligt.
Mit script ser således ud:
Sub oesldv_indsaet_data()
'
' oesldv_indsaet_data Makro
'

Dim find_cpr As range
Dim navn As String
Dim navne_der_gav_problemer As String
Dim cpr_numre_der_gav_problemer As String
Dim start_celle_loensam As Long
Dim start_celle_forhandling As Long
Dim cpr As String


On Error GoTo HandleAny:
   
navne_der_gav_problemer = Empty
   
start_celle_forhandling = 2
   
Sheets("Forhandlingsenhed U+H sorteret").Select
range("J" & start_celle_forhandling).Select

start_celle_loensam = 12

'MsgBox "Lige inden løkke..."

'-------------------------------
'Løkke start
'-------------------------------
Do
'MsgBox "Lige inden cpr sættes til ActiveCell..."
    cpr = left(ActiveCell.Value, 6) & "-" & Right(ActiveCell.Value, 4)
    navn = ActiveCell.offset(0, -8) & " " & ActiveCell.offset(0, -9)
     
'    On Error GoTo ErrHandler:
'    Set find_cpr = Sheets("ØSLDV").Cells.Find(What:=cpr, After:=ActiveCell, LookIn:=xlValues, _
'        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
'        MatchCase:=False, SearchFormat:=False)
       
   
'    On Error GoTo HandleAny:
   
    'Kopier data over
'    If Not find_cpr Is Nothing Then
'
   
'MsgBox "Nu vælges ØSLDV-arket..."
   
    'Sheets("ØSLDV").Activate
    Sheets("ØLSDV kopieringsark").Activate
    range("A1").Activate
   
'MsgBox "Lige inden søgning... " & cpr & " " & navn
   
    'Sheets("ØSLDV").
   
    On Error GoTo ErrHandler:
   
'    If cpr = Then
'
'    Cells.Find(What:=cpr, After:=ActiveCell, LookIn:=xlValues, _
'        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
'        MatchCase:=False, SearchFormat:=False).Activate
'
'    Exit Sub
'
'    Else
    Cells.Find(What:=cpr, After:=ActiveCell, LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
   
    'End If
   
    On Error GoTo HandleAny:
   
'MsgBox "Lige efter søgning..."


  'MsgBox "Resultatet: " & ActiveCell.offset(0, 2).Value + ActiveCell.offset(0, 10).Value
       
        'Løndel 2644 og 3816 omregnet til 97-niveau
'        Set loendel1 = (ActiveCell.offset(0, 2).Value + ActiveCell.offset(0, 10).Value)
'        loendel1.Copy(Destination:=Sheets("Lønsammensætning").Range("G" & start_celle_loensam))
'
'        loendel1.Copy _
'    Destination:=Sheets("Lønsammensætning").range("G" & start_celle_loensam)
       
'-------------------------------------
'Kopierer data i stedet  fra ØLSDV kopieringsark
'-------------------------------------

        'Løndel 2644 og 3816 omregnet til 97-niveau
        range(ActiveCell.offset(0, 2).Address).Value.Copy Destination:=Sheets("Lønsammensætning").range("G" & start_celle_loensam)
        'Sheets("Lønsammensætning").range("G" & start_celle_loensam).Value = (ActiveCell.offset(0, 2).Value + ActiveCell.offset(0, 10).Value) '/ Sheets("Faktor").range("A2").Value
        'Løndel 3817 omregnet til 97-niveau
        range(ActiveCell.offset(0, 3).Address).Value.Copy Destination:=Sheets("Lønsammensætning").range("H" & start_celle_loensam)
        'Sheets("Lønsammensætning").range("H" & start_celle_loensam).Value = (ActiveCell.offset(0, 11).Value) '/ Sheets("Faktor").range("A2").Value
        'Løndel 3807 - 3815 omregnet til 97-niveau
        range(ActiveCell.offset(0, 4).Address).Value.Copy Destination:=Sheets("Lønsammensætning").range("I" & start_celle_loensam)
        'Sheets("Lønsammensætning").range("I" & start_celle_loensam).Value = (ActiveCell.offset(0, 3).Value + ActiveCell.offset(0, 4).Value + ActiveCell.offset(0, 5).Value + ActiveCell.offset(0, 6).Value + ActiveCell.offset(0, 7).Value + ActiveCell.offset(0, 8).Value + ActiveCell.offset(0, 9).Value) '/ Sheets("Faktor").range("A2").Value



       
'        If Not (ActiveCell.offset(0, 2).Value + ActiveCell.offset(0, 10).Value) = Sheets("Lønsammensætning").range("O" & start_celle_loensam) Then
'            MsgBox "De to beløb er ikke ens. LOPSLAG giver " & Sheets("Lønsammensætning").range("O" & start_celle_loensam) & " mens scriptet giver " & (ActiveCell.offset(0, 2).Value + ActiveCell.offset(0, 10).Value)
'            GoTo FortsaetHerfra:
'        End If
'
'        Sheets("Lønsammensætning").range("G" & start_celle_loensam).Value = (ActiveCell.offset(0, 2).Value + ActiveCell.offset(0, 10).Value) '/ Sheets("Faktor").range("A2").Value
'
'        'Løndel 3817 omregnet til 97-niveau
'        Sheets("Lønsammensætning").range("H" & start_celle_loensam).Value = (ActiveCell.offset(0, 11).Value) '/ Sheets("Faktor").range("A2").Value
'        'Løndel 3807 - 3815 omregnet til 97-niveau
'        Sheets("Lønsammensætning").range("I" & start_celle_loensam).Value = (ActiveCell.offset(0, 3).Value + ActiveCell.offset(0, 4).Value + ActiveCell.offset(0, 5).Value + ActiveCell.offset(0, 6).Value + ActiveCell.offset(0, 7).Value + ActiveCell.offset(0, 8).Value + ActiveCell.offset(0, 9).Value) '/ Sheets("Faktor").range("A2").Value

'    End If


FortsaetHerfra:

    start_celle_loensam = start_celle_loensam + 1
    start_celle_forhandling = start_celle_forhandling + 1

    Sheets("Forhandlingsenhed U+H sorteret").Activate
    range("J" & start_celle_forhandling).Activate

    ActiveCell.offset(1, 0).Select


Loop Until IsEmpty(ActiveCell) 'start_celle_loensam = 30

'-------------------------------
'Løkke slut
'-------------------------------

'Hvis der ikke var nogle personer der ikke blev fundet returneres der til Lønsammensætningsarket
'Hvis der var nogle problemer bliver Fejlarket vist med de personer der ikke blev fundet

If navne_der_gav_problemer = Empty Then
    Sheets("Lønsammensætning").Select
Else
  MsgBox "Følgende personer var ikke på listen fra 'ØSLDV' (se dem på arket 'Fejl'): " & vbCrLf & vbCrLf & navne_der_gav_problemer
   
    Sheets("Fejl").range("A4").Value = "Følgende personer var ikke på listen fra 'ØSLDV':"
    Sheets("Fejl").range("A5").Value = navne_der_gav_problemer
    Sheets("Fejl").range("A6").Value = "Følgende cpr-numre var ikke på listen fra 'ØSLDV':"
    Sheets("Fejl").range("A7").Value = cpr_numre_der_gav_problemer
   
    Sheets("Lønsammensætning").Select

End If




Exit Sub
ErrHandler:
navne_der_gav_problemer = navn & "," & vbCrLf & navne_der_gav_problemer
cpr_numre_der_gav_problemer = cpr & "," & vbCrLf & cpr_numre_der_gav_problemer
'MsgBox "Går til Label FortsaetHerfra:..."
    Resume FortsaetHerfra:
HandleAny:
    MsgBox "Følgende fejl opstod: " & Err.Description & " (fejlnummer " & Err.Number & ")"

End Sub


Jeg har nu også prøvet at oprette et nyt ark, så der kun var én celle at kopiere, men lige lidt har det hjulpet.

Jeg kan simpelthen ikke forstå, hvorfor LOPSLAG og mit script ikke får samme resultat - kan I hjælpe?
Avatar billede trajkovski Nybegynder
20. juli 2009 - 12:09 #1
Lukker.
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
Kurser inden for grundlæggende programmering

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