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

On Error problem

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?

 

 

 

 

Dela detta inlägg


Länk till inlägg
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]

Dela detta inlägg


Länk till inlägg
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?

 

Dela detta inlägg


Länk till inlägg
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

 

Dela detta inlägg


Länk till inlägg
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?

 

Dela detta inlägg


Länk till inlägg
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.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...