Avatar billede dla Praktikant
08. september 2003 - 09:45 Der er 12 kommentarer og
1 løsning

Error meddelelse

Jeg har tidligere fået hjælp (af bak) til at lave opslag gennem alle ark på en gang, og det virker fortrinligt, bortset fra hvis man skriver et nummer som ikke findes, så kommer den med en forkert fejlmeddelelse, som jeg godt kunne tænke mig at få lavet om til noget mere forståeligt.

Funktionen ser sådan ud:

Function Vlookup_AllSheets(opslag, matrix As Range, kol)

Dim ws As Worksheet
Dim StartArk As String
Dim x As Long
Dim var As Variant
StartArk = ActiveSheet.Name
For Each ws In ActiveWorkbook.Worksheets

    If ws.Name <> StartArk Then
        var = ws.Range(matrix.Address)
        For x = 1 To UBound(var, 1)
          If var(x, 1) = opslag Then
                Vlookup_AllSheets = var(x, kol)
              Exit Function
            End If
        Next
    End If
Next
End Function


Jeg forestillede mig at sætte dette ind:

On Error GoTo fejl
fejl:
    MsgBox ("Nummeret findes ikke")


men ligemeget hvor jeg placerer det, kører den i uendelig løkke. Hvad mangler jeg?
Avatar billede jkrons Professor
08. september 2003 - 10:05 #1
Placer On Error goto fejl i toppen af makroen.

Plaver fejlhåndteringen i bunden.

Lige inden Fejl: sætter du en Exit Sub
Avatar billede aheiss Praktikant
08. september 2003 - 10:10 #2
Dette her virker hos mig. Kan ikke få jkrons til at virke.
_______________________
Function Vlookup_AllSheets(opslag, matrix As Range, kol)
Dim ws As Worksheet
Dim StartArk As String
Dim x As Long
Dim var As Variant
StartArk = ActiveSheet.Name
For Each ws In ActiveWorkbook.Worksheets
    If ws.Name <> StartArk Then
        var = ws.Range(matrix.Address)
        For x = 1 To UBound(var, 1)
          If var(x, 1) = opslag Then
            Vlookup_AllSheets = var(x, kol)
              GoTo slut:
            End If
        Next
    End If
Next
slut:
If Vlookup_AllSheets = "" Then
    MsgBox ("findes ikke")
    Vlookup_AllSheets = "Findes ikke"  'eller
Else
    Vlookup_AllSheets = Vlookup_AllSheets
End If
End Function
Avatar billede dla Praktikant
08. september 2003 - 10:29 #3
Det virker altså heller ikke, den løsning kører også i uendelig løkke.
Avatar billede bak Forsker
08. september 2003 - 10:45 #4
Prøv den her.


Function Vlookup_AllSheets(opslag, matrix As Range, kol)
Dim ws As Worksheet
Dim StartArk As String
Dim x As Long
Dim var As Variant
'find navnet på det aktive ark
StartArk = Application.Caller.Parent.Name
'for hvert ark i projektmappen hvor formlen er
For Each ws In Application.Caller.Parent.Parent.Worksheets
'hvis arket er forskelligt fra det aktive ark så..
    If ws.Name <> StartArk Then
'hent dataområdet ind i et array
        var = ws.Range(matrix.Address)
'for hvert element i array check første kolonne om elementet er lig det søgte
        For x = 1 To UBound(var, 1)
'hvis det søgte er fundet er resultat = værdien i antal kol til højre
            If var(x, 1) = opslag Then
                Vlookup_AllSheets = var(x, kol)
'hvis fundet så gå ud af løkken
                Exit Function
            End If
        Next
    End If
Next
MsgBox "Not found"
Vlookup_AllSheets = CVErr(xlErrNA)
Set var = Nothing
End Function
Avatar billede bak Forsker
08. september 2003 - 10:52 #5
Grunden til at der ikke er en "On error goto" er at det man søger jo ikke nødvendigvis findes på 1. ark.
Hvis makroen derimod får lov at køre i bund, så findes det søgte ikke, da den vil springe helt ud af funktion (exit function) hvis den finder noget.
Avatar billede dla Praktikant
08. september 2003 - 11:06 #6
Altså bak, din løsning kører også i uendelig løkke! Jeg kopierede den direkte over, så det kan ikke være fordi jeg har glemt noget. Har du tid lige at kigge på den igen?
Avatar billede bak Forsker
08. september 2003 - 11:12 #7
Den funker fint her, så hvad putter du i funktionen (parametre) ?
Hvor mange ark har du ?
Avatar billede bak Forsker
08. september 2003 - 11:15 #8
send evt. dit ark
Tommybak@netscape.net
Avatar billede dla Praktikant
08. september 2003 - 11:35 #9
Det er enormt pænt af dig at du gider bruge tid på det. Det er på arket Tilbud man skal skrive et artikelnummer, som så henter tekst og pris. Du skal ikke tage dig af at det måske ser lidt rodet ud, det er jo ikke færdigt. Jeg sender det.
Avatar billede bak Forsker
08. september 2003 - 12:39 #10
Circulær referencefejl opstod fordi funktionen også slår op i de bagerste ark hvor du refererer til det ark funktionen ligger.

Jeg har ændret funktionen således at den kun slår op i de ark den begynder med "Group", (som jeg går ud fra var meningen fra starten)


Function Vlookup_AllSheets(opslag, matrix As Range, kol)

Const wsType As String = "Group*"
Dim ws As Worksheet
Dim StartArk As String
Dim x As Long
Dim var As Variant

'find navnet på det aktive ark
StartArk = Application.Caller.Parent.Name
'for hvert ark i projektmappen hvor formlen er
For Each ws In Application.Caller.Parent.Parent.Worksheets
'hvis arket er forskelligt fra det aktive ark så..
    If ws.Name Like wsType Then
'hent dataområdet ind i et array
        var = ws.Range(matrix.Address)
'for hvert element i array check første kolonne om elementet er lig det søgte
        For x = 1 To UBound(var, 1)
'hvis det søgte er fundet er resultat = værdien i antal kol til højre
            If var(x, 1) = opslag Then
                Vlookup_AllSheets = var(x, kol)
'hvis fundet så gå ud af løkken
                Exit Function
            End If
        Next
    End If
Next
Vlookup_AllSheets = CVErr(xlErrNA)
Set var = Nothing
End Function
Avatar billede dla Praktikant
08. september 2003 - 12:47 #11
Fint! Men hvis jeg sætter MsgBox'en på, skal den trykkes væk 5 gange før den forsvinder (fordi der er 5 steder der skal sættes værdi ind), hvordan får jeg den til at forsvinde første gang jeg trykker ok?
Avatar billede bak Forsker
08. september 2003 - 13:04 #12
Det er ikke så nemt, så hvad med at ændre
Vlookup_AllSheets = CVErr(xlErrNA)

til
Vlookup_AllSheets = "Not Found"
Avatar billede dla Praktikant
08. september 2003 - 13:10 #13
Fint, det kan jeg godt acceptere, tusind tak for hjælpen!
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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

IT-JOB