Script med cells.find returnerer forkerte værdier
HejJeg 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?