Avatar billede mrkr Juniormester
27. september 2008 - 10:36 Der er 13 kommentarer og
1 løsning

fejlfanger i makro

jeg har en kode som henter data fra en fil til en anden.
Den henter data fra navngivne områder.
Jeg har lavet en ON ERROR RESUME NEXT, så jeg er sikker på at den altid køres igennem uanset om områderne findes eller ej.

Kan man lave en slags fejlfanger der fortæller om der har været fejl og evt. hvilke. enten ved en msg box samt evt indsætter fejlene i et område i ark2 fra a10 og ned, så man altid kan se hvilke fejl der har været.

Min kode er længere men jeg har kortet den ned for overskuelighedens skyld.

Jeg beklager igen den fettede poiontgivning, men det er hvad derer tilbage på kontoen :-)


Sub importOplysniger()

Dim fn As Variant
    ChDrive "c"
    ChDir "c:\dokumenter"
    fn = Application.GetOpenFilename("Alle filer,*.*", 1, "Vælg fil", , False)
    If TypeName(fn) = "Boolean" Then Exit Sub
    Debug.Print "Selected file: " & fn
    If MsgBox("Du har valgt at importere data fra filen:" & vbLf & vbLf & fn & vbLf & vbLf & "Er du sikker på at du vil fortsætte?", vbOKCancel, "Advarsel!" = vbOKCancel + vbDefaultButton1) Then Exit Sub

    On Error Resume Next
Dim wb As Workbook
    Set wb = Workbooks.Open(fn, True, True)
    With ThisWorkbook.Worksheets("ark1")
        ' Regnskabsår sidste år
        .Range("startdag").Formula = wb.Worksheets("ark1").Range("sidste_år_startdag").Formula
        .Range("startmd").Formula = wb.Worksheets("ak1").Range("sidste_år_startmd").Formula
        .Range("startår").Formula = wb.Worksheets("ak1").Range("sidste_år_startår").Formula
        .Range("slutdag").Formula = wb.Worksheets("ark1").Range("sidste_år_slutdag").Formula
        .Range("slutmd").Formula = wb.Worksheets("ark1").Range("sidste_år_slutmd").Formula
        .Range("slutår").Formula = wb.Worksheets("ark1").Range("sidste_år_slutår").Formula
    End With
End Sub
Avatar billede excelent Ekspert
27. september 2008 - 17:35 #1
On Error GoTo fejl

'DIN KODE

Exit Sub

fejl:
rk = Sheets("Ark2").Cells(1000, "A").End(xlUp).Row + 1
If rk < 10 Then rk = 10
Sheets("Ark2").Cells(rk, "A") = Now
Sheets("Ark2").Cells(rk, "B") = Err
Sheets("Ark2").Cells(rk, "C") = fn

On Error GoTo 0
Resume Next
Avatar billede excelent Ekspert
27. september 2008 - 17:36 #2
Husk lige at slette din :  On Error Resume Next
Avatar billede mrkr Juniormester
28. september 2008 - 09:53 #3
den skriver fejlen fra den fil jeg forsøger at importere fra, men det jeg havde i tankerne er at den skal afsløre hvis der er problemer med de enkelte områder, som jeg importerer:
startdag
startmd
startår o.s.v.

Jeg vil gerne se præcis hvilke områder der evt. driller.
Avatar billede mrkr Juniormester
28. september 2008 - 09:59 #4
kan man evt lave en kode der løber igennem for fejl inden importen.

hvor man tester om alle de navngivne områder overhovedet findes både i den aktuelle fil og i den udpegede fil.

Det vil vel typisk være der at en evt fejl vil opstå.
Avatar billede excelent Ekspert
28. september 2008 - 10:33 #5
For t = 1 To ThisWorkbook.Names.Count
x = x & Names(t).Name & vbLf
Next

If MsgBox(x & vbLf & "Navneliste ok ? ", vbYesNo) = vbNo Then Exit Sub
Avatar billede mrkr Juniormester
28. september 2008 - 10:52 #6
ja, den tester godt nok for navne, men da min importfil er meget lang og der er en del navngivne områder ud over de områder der skal importeres, virker det ikke helt for mig.

Det kan være at man er nødt til at lave en positiv-liste over de områdr der skal testes

startdag
startmd
startår o.s.v.

både en til aktuel workbook og en til den udpegede workbook.
Avatar billede excelent Ekspert
28. september 2008 - 11:58 #7
Sub Makro1()

x = "startdag startmd startår slutdag slutmd slutår"

For t = 1 To ThisWorkbook.Names.Count
If InStr(1, x, Names(t).Name) Then x = Application.WorksheetFunction.Substitute(x, Names(t).Name, "")
Next

MsgBox "Navne der mangler :" & x

End Sub
Avatar billede mrkr Juniormester
28. september 2008 - 13:02 #8
ja, det var lige sådan noget jeg ledte efter.
Der er kun en lille detajle tilbage.

Den laver et mellemreum for alle de felter der er ok.
Hvis der er et felt med fejl og derefter 7 felter der ok, for derefter er et felt der er fejl i, så kommer der 7 mellemrum i msgboxen.

Kan man få dem til at stå med et komma imellem og uden de ekstra mellemrum?
Jeg har forsøgt at indsætte kommaer i koden, men så kommer der til at stå , , , ,
Avatar billede mrkr Juniormester
28. september 2008 - 13:04 #9
jeg skal lige høre om man bare skal rette en lille smule i koden når jeg skal teste på den fil jeg har peget på og kaldt wb

For t = 1 To wb.Names.Count
istedet for
For t = 1 To ThisWorkbook.Names.Count
Avatar billede mrkr Juniormester
28. september 2008 - 13:08 #10
og min sandten om der ikke var et andet spørgsmål jeg roder med her:

Da min liste med områder der skal testes for er lang vil jeg meget gerne "knække" linjen inde i koden men " _" virker ikke. Kan det lade sig gøre?

F.eks.
x = "startdag startmd startår slutdag _
slutmd slutår"

istedet for
x = "startdag startmd startår slutdag slutmd slutår"
Avatar billede excelent Ekspert
28. september 2008 - 13:17 #11
Sub Makro1()

x = "startdag,startmd,startår,slutdag,slutmd,slutår"

For t = 1 To ThisWorkbook.Names.Count
If InStr(1, x, Names(t).Name) Then x = Application.WorksheetFunction.Substitute(x, Names(t).Name & ",", "")
Next

MsgBox "Navne der mangler :" & x

End Sub
----------------
ja
----------------
En almidelig kodelinier kan deles med underscore _, men ikke en streng i "" men så kan du gøre sådan :

x1="startdag startmd startår slutdag slutmd slutår"
x2="sidste_år_startdag sidste_år_startmd sidste_år_startår sidste_år_slutdag sidste_år_slutmd sidste_år_slutår"

x=x1 & x2
Avatar billede mrkr Juniormester
28. september 2008 - 13:41 #12
perfekt!

Mange tak for indsatsen.
beklager den fedtede pointgivning, men det var hvad der var tilbage :-)

Har du et svar, så har jeg points!
Avatar billede excelent Ekspert
28. september 2008 - 13:50 #13
det er ok tag dem selv.. så har du lidt startkapital :-)
Avatar billede mrkr Juniormester
28. september 2008 - 14:30 #14
Jeg takker endnu engang
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