Error handling, loop og cells.find (vba)
HejJeg har lavet et script, som kopierer nogle persondata for derefter at fjerne rækken, hvis personen optræder på en anden liste.
Jeg kan leve med, hvis den bare går videre i løkken, hvis den ikke finder navnet i den kopierede liste, men jeg vil helst have den til at fortælle mig, hvilket navn der ikke var på listen og så gå videre.
Den kopierer listen fint og rydder op i de navne, der findes på en anden liste, men så begynder den at snurre i et uendeligt loop og fryser så, hvorpå jeg bliver nødt til at lukke Excel ned.
Jeg ved, der er navne, der ikke optræder på den kopierede liste, så jeg vil meget gerne have funktionaliteten med.
Jeg håber, I kan hjælpe.
Kode:
Sub personligt_udnaevnt_generer()
'
' personligt_udnaevnt_generer Makro
'
Dim lastRow As Long
Dim midlertidigt_ansat_navn As String
Dim start_celle As Integer
Dim navne_der_gav_problemer As String
Dim used_range As Long
'Vælg det ark der skal kopieres fra
Sheets("Personalegruppe PKAT").Activate
'finds last used row by selecting last row and simulating ctrl-up arrow
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
'Vælg det område der skal kopieres og kopier det
range("A1:IV" & lastRow).Select
Selection.Copy
'Vælg det ark der skal kopieres til
Sheets("Personligt udnævnte").Activate
range("A2").Select
ActiveSheet.Paste
'Vælg kolonnerne A-IV og AutoFit dem og sæt kolonne A til en speciel bredde
range("A:IV").Select
Selection.Columns.AutoFit
Columns("A:A").ColumnWidth = 23.71
'Vælg den celle i kolonne A der indeholder det første navn (angiv 2 hvis cellen er A2 eksempelvis)
'Cellen er startcellen i arket for de midlertidigt ansatte
start_celle = 2
'Tæl antal rækker med data. Trækker start_celle fra så den kun looper det antal der er under start_celle.
'Trækker 1 fra pga. første række er overskrifter
used_range = Sheets("Midlertidigt ansatte(funktions)").UsedRange.Rows.Count - (start_celle - 1)
'Søg efter det første navn i de midlertidigt ansatte og hvis navnet findes så slet rækken
Do While start_celle < used_range
On Error GoTo ErrHandler:
midlertidigt_ansat_navn = Cells.Find(What:=Sheets("Midlertidigt ansatte(funktions)").range("A" & start_celle), After:=ActiveCell, LookIn:= _
xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext _
, MatchCase:=False, SearchFormat:=False).Activate
If midlertidigt_ansat_navn = True Then
Rows(ActiveCell.Row).Delete
End If
FortsaetHerfra:
start_celle = start_celle + 1
Loop
ErrHandler:
navne_der_gav_problemer = navne_der_gav_problemer & ", " & Sheets("Midlertidigt ansatte(funktions)").range("A" & start_celle)
Resume FortsaetHerfra:
MsgBox navne_der_gav_problemer
End Sub