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

Error handling, loop og cells.find (vba)

Hej


Jeg 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
Avatar billede trajkovski Nybegynder
14. juli 2009 - 09:50 #1
Løst.

Manglede bare en Exit Sub før ErrHandler.
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