Just nu i M3-nätverket
Gå till innehåll

On Error problem


short

Rekommendera Poster

Om någon försöker lägga till en flik med ett namn som redan finns i arbetsboken eller använder tecken som inte tillåts i fliknamnet markerar systemet fel. För att fånga upp detta skrev jag:

On Error GoTo Felutgång

 

Under Felutgång hade jag en MsgBox-funktion där man kunde välja om man ville försöka igen eller ej. Men se det gillade inte datorn för om man gjorde om samma fel en andra gången felmarkerade den trots att fliken med det felaktiga namnet tagits bort i programmet.

 

På något sätt verkade felet finnas kvar. Jag försökte med att skriva

Err = 0 men det hjälpte inte. Till slut blev jag tvungen att från Felutgången ta Exit Sub. Jag höll på i timmar med att försöka överlista datorn men det blev 1-0 till datorn. Finns det hopp om returmatch?

 

Vad gör jag för fel?

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Bästa är att alltid undvika fel och att alltid se till att undvika kod som kräver Goto-satser.

 

Här får du en snutt kod som löser det hela lite snyggare får jag hoppas.

Sub AddSheet()

   Dim strName As String
   Dim shTest As Worksheet
   Dim msg As String
   Set shTest = Nothing
    On Error Resume Next

       While shTest Is Nothing

           If strName <> "" Then
               msg = "Namnet du gav var ogiltigt, försök igen eller tryck avbryt"
           Else
               msg = "Ge namn eller tryck avbryt"
           End If
           strName = InputBox(msg, "Nytt namn", "Blad")
           If strName = "" Then Exit Sub

           Set shTest = Worksheets(strName)
           If shTest Is Nothing Then
               Set shTest = Worksheets.Add
               shTest.Name = strName
           Else
               Set shTest = Nothing
           End If
       Wend

End Sub

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

 

[inlägget ändrat 2009-03-08 18:12:13 av Monshi]

Länk till kommentar
Dela på andra webbplatser

Mja det visade sig att koden fungerar om man försöker döpa den nya fliken till ett namn som redan finns men om man använder otillåtna tecken t ex ? : * / \ [ ] så fugerar den inte. Den lägger då till ett blad som kallas "Blad X" där X är nästa bladnummer. Går det att få koden att fungera så att den sorterar bort namnförslaget om det finns ett otillåtet tecken någonstans i Bladnamnet?

 

Länk till kommentar
Dela på andra webbplatser

Done

Sub AddSheet()

   Dim strName As String
   Dim shTest As Worksheet
   Dim msg As String
   Set shTest = Nothing
    On Error Resume Next

       While shTest Is Nothing

           If strName <> "" Then
               msg = "Namnet du gav var ogiltigt, försök igen eller tryck avbryt"
           Else
               msg = "Ge namn eller tryck avbryt"
           End If
           strName = InputBox(msg, "Nytt namn", "Blad" & Worksheets.Count + 1)
           If strName = "" Then Exit Sub

           Set shTest = Worksheets(strName)
           If shTest Is Nothing Then
               Set shTest = Worksheets.Add
               shTest.Name = strName
               If shTest.Name <> strName Then
                   Application.DisplayAlerts = False
                   shTest.Delete
                   Application.DisplayAlerts = True
                   Set shTest = Nothing
               End If
           Else
               Set shTest = Nothing
           End If
       Wend

End Sub

 

Länk till kommentar
Dela på andra webbplatser

Det fungerar men jag förstår inte kodraden

shTest.Name = strName

innebär inte raden att de båda leden blir lika? I nästa rad testar man om de är olika. Hur kan svaret bli ja om det i raden före har satts till samma värde? Uppenbarligen betyder inte shTest.Name = strName att man sätter de båda leden lika men vad är förklaringen?

 

Länk till kommentar
Dela på andra webbplatser

Två svar...

 

1: On Errror Resume Next ger att vid fel fortsätter programmet som om inget har hänt

2: raden shTest.Name = strName kan generera ett fel om namnet du sätter är felaktigt. Vid fel ändras inte egenskapen varvid liknelsen shTest.Name <> strName kommer att stämma.

Precis som att Set shTest = Worksheets(strName) kommer att ge att shTest är tom om blad vid givet namn inte existerar. Utan On Error raden skulle ett fel genereras där.

 

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...