Avatar billede henriksp Nybegynder
18. juni 2004 - 11:20 Der er 11 kommentarer og
1 løsning

Macro - Ved fejl gaa til et andet sted automatisk (stop ikke)

Jeg har fundet frem til denne Macro (MacroinAllWorkbooks, som jeg tror er brugbar for mange), der aabner alle workbooks i en mappe ("C:\Test") og udfoerer en macro (Macro1) i arket "ark1".
Mit problem er, at hvis der ikke er et "ark1" saa stopper macroen med en fejlmeddelese.
Jeg har provet at satte en linie ind med If is Error eller On Error, med jeg har ikke kunnet faa det til at virke. Jeg ved ikke helt hvordan jeg skal faa det til at virke. I stedet for for fejlmeddelselsen, vil jeg gerne have at macroen gaar videre til naeste ark. (Evt efter foerst at have proevet at gaa til "Ark2")

Hermed macroen, jeg vil gerne have vist hvor On error eller hvad det er for en kommando, der skal bruges skal saettes ind.

Sub MacroinAllWorkbooks()
Dim fn As String, sht As Variant
    Application.ScreenUpdating = False
    TargetFolder = "C:\Test"
    If Right(TargetFolder, 1) <> Application.PathSeparator Then
        TargetFolder = TargetFolder & Application.PathSeparator
    End If
    If FileFilter = "" Then FileFilter = "*.xls"
    fn = Dir(TargetFolder & FileFilter) ' the first file name in the folder
    While Len(fn) > 0
        If fn <> ThisWorkbook.Name Then
            Application.StatusBar = "Udfoerer Macro " & fn & "..."
            Workbooks.Open TargetFolder & fn
         
            Sheets("Ark1").Select
         
Application.Run "'Personal.xls'!Macro1"

ActiveWorkbook.Close False
End If
fn = Dir ' the next file name in the folder
    Wend
    Application.StatusBar = False
End Sub
Avatar billede henriksp Nybegynder
18. juni 2004 - 11:46 #1
Jeg har proevet med:
on error goto errorhandler

Min Kode

errorhandler:

Men det virker ikke
Avatar billede kabbak Professor
18. juni 2004 - 11:53 #2
brug 
Sheets(1).Select
i stedet for

Sheets("Ark1").Select
Avatar billede henriksp Nybegynder
18. juni 2004 - 12:15 #3
-> Kabbak, det betyder at jeg tager det foreste ark i hver workbook, og det er jeg ikke interesseret i, jeg er interesseret i at tage netop det ark med navnet "ark1" eller maaske et ark med navnet "Regnskab".
Hvis arket ikke eksisterer, saa gaa til naeste workbook. Saa det skal altsaa vaere en rutine der checker om arket eksisterer, hvis ikke gaa til ......
ELLER
Hvis fejl gaa til.

Jeg har kun forsoegt mig frem med hvis fejl (On error) og har ikke kunnet faa det til at virke, men det skal tilfoejes, at jeg ikke mestrer denne kommando saerlig godt.
Avatar billede kabbak Professor
18. juni 2004 - 12:26 #4
For Each ws In Worksheets
If Sheets(ws.Name)="Ark1"Then
    Sheets("Ark1").Select
  Application.Run "'Personal.xls'!Macro1"
End If
Avatar billede kabbak Professor
18. juni 2004 - 12:27 #5
For Each ws In Worksheets
If Sheets(ws.Name)="Ark1" Then
    Sheets("Ark1").Select
  Application.Run "'Personal.xls'!Macro1"
End If
next


manglede lige next
Avatar billede henriksp Nybegynder
18. juni 2004 - 13:15 #6
Macroen stopper ved
If Sheets(ws.Name) = "Ark1" Then
Avatar billede bak Forsker
18. juni 2004 - 13:16 #7
eller ved at bruge en check-funktion

Private Function SheetExists(sname) As Boolean
    Dim x As Object
    On Error Resume Next
    Set x = ActiveWorkbook.Sheets(sname)
    If Err = 0 Then SheetExists = True Else SheetExists = False
End Function


Sub MacroinAllWorkbooks()
Dim fn As String, sht As Variant
    Application.ScreenUpdating = False
    TargetFolder = "C:\Test"
    If Right(TargetFolder, 1) <> Application.PathSeparator Then
        TargetFolder = TargetFolder & Application.PathSeparator
    End If
    If FileFilter = "" Then FileFilter = "*.xls"
    fn = Dir(TargetFolder & FileFilter) ' the first file name in the folder
    While Len(fn) > 0
        If fn <> ThisWorkbook.Name Then
            Application.StatusBar = "Udfoerer Macro " & fn & "..."
            Workbooks.Open TargetFolder & fn
         
            If SheetExists("Ark1") = True Then Sheets("Ark1").Select Else GoTo JumpThis
           
            Application.Run "'Personal.xls'!Macro1"
JumpThis:
            ActiveWorkbook.Close False
        End If
    fn = Dir ' the next file name in the folder
    Wend
    Application.StatusBar = False
End Sub
Avatar billede henriksp Nybegynder
18. juni 2004 - 13:25 #8
-> Bak Det virker naar jeg bruger din Check-function. Faktisk er det loesningen, jeg bedst kan lide, den kan udbygges til at udfoere forskellige macroer for forskellige ark i en Workbook.
Mange tak (0gsaa til Kabbak)
P.S! Jeg kan stadigvaek ikke forstaa hvorfor min On Error kommando ikke virker.
Avatar billede bak Forsker
18. juni 2004 - 13:42 #9
Det burde den faktisk også.
hvordan havde du sat den ind ?
Avatar billede bak Forsker
18. juni 2004 - 13:43 #10
og lige et svar
Avatar billede henriksp Nybegynder
18. juni 2004 - 15:46 #11
Det var vistnok sat saadan ind:

Sub MacroinAllWorkbooks()
Dim fn As String, sht As Variant
    Application.ScreenUpdating = False
    TargetFolder = "C:\Test"
    If Right(TargetFolder, 1) <> Application.PathSeparator Then
        TargetFolder = TargetFolder & Application.PathSeparator
    End If
    If FileFilter = "" Then FileFilter = "*.xls"
    fn = Dir(TargetFolder & FileFilter) ' the first file name in the folder
    While Len(fn) > 0
        If fn <> ThisWorkbook.Name Then
            Application.StatusBar = "Udfoerer Macro " & fn & "..."
            Workbooks.Open TargetFolder & fn
          on error goto handleerror
            Sheets("Ark1").Select
         
Application.Run "'Personal.xls'!Macro1"
handlerror:
ActiveWorkbook.Close False
End If
fn = Dir ' the next file name in the folder
    Wend
    Application.StatusBar = False
End Sub
Avatar billede henriksp Nybegynder
18. juni 2004 - 15:48 #12
handleerror selvfoelgelig stavet korrekt nederst
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