Exceliä edelleen. Tarkotuksena on tuhota välilehtiä Kaavio1-Kaavio8. Nyt on kaks ongelmaa ilmenny: Ohjelma kysyy kesken ajon, että haluanko varmasti tuhota nuo välilehdet. Voisko ton kyselyn saada pois päältä? Toinen ongelma ilmenee, jos valmiiksi puuttuu jo kaksi tai useampia välilehtiä. Eli On Error GoTo funktioni sietää vain yhden virheen.
KaavionNumero = 1 Do On Error GoTo 10: Sheets("Kaavio" & KaavionNumero).Select ActiveWindow.SelectedSheets.Delete 10: KaavionNumero = KaavionNumero + 1 Loop Until KaavionNumero = 9
Kiitoksia avusta!
Painoit luultavasti lähetä-nappia uudestaan siitä syystä ettei sivu latautunut sinulla vielä, vai mitähän varten tuo tuli kaksi kertaa?
En tiedä miks noin kävi, mut varmaan jotain sähläsin...
No tota "On Error GoTo":a ei pidä käyttää noin, ja se ei toimi koska sinulta puuttuu "Resume Next".
KaavionNumero = 1 Do On Error GoTo virhe Sheets("Kaavio" & KaavionNumero).Select ActiveWindow.SelectedSheets.Delete KaavionNumero = KaavionNumero + 1 Loop Until KaavionNumero = 9 virhe: Resume Next
Tuo ei kyllä välttämättä toimi noin ihan suoraan, joten joudut ehkä järkeilemään vähän itse.
Toisesta ongelmasta en osaa sanoa, kun en tunne Exceliä juurikaan.
hunajavohveli kirjoitti:
No tota "On Error GoTo":a ei pidä käyttää noin, ja se ei toimi koska sinulta puuttuu "Resume Next".
KaavionNumero = 1 Do On Error GoTo virhe Sheets("Kaavio" & KaavionNumero).Select ActiveWindow.SelectedSheets.Delete KaavionNumero = KaavionNumero + 1 Loop Until KaavionNumero = 9 virhe: Resume Next
Päh mitään gotoa, suoraan vaan On Error Resume Next :)
Next ei kelpaa. Sillon lähtee lentoon sivut, joiden pitäs pysyä paikallaan, jos ne vain sattuu aktiivisia olemaan. Eli Next Next?
Täh? Resume Next tekee vaan sen että se jatkaa koodin suoritusta seuraavalta riviltä virherivin jälkeen.
KaavionNumero = 1 Do On Error Resume Next Sheets("Kaavio" & KaavionNumero).Delete KaavionNumero = KaavionNumero + 1 Loop Until KaavionNumero = 9
Toinen ongelma ratkes tällä, kiitos siitä teille! Mutta miten sen sais lopettamaan ainaisen kyselemisen tuhottavan sivun kohdalla?
sooda kirjoitti:
Päh mitään gotoa, suoraan vaan On Error Resume Next :)
No noin on tietysti parempi, jos sen kerran saa Excelissäkin suoraan ilman GoTo-härpäkkeitä.
Jos käytät Resume Next'iä on syytä trapata Errorit ennen funktiosta poistumista tyyliin:
Private Sub MyFunction() On Error Resume Next ' Koodia If Err.Number <> 0 Then ' Käsittele virhetilanteet ' Lokita tai jotain Else Exit Sub End If End Sub
Public Sub DeleteWorksheet() [l]Application.DisplayAlerts = False[/l] ActiveWindow.SelectedSheets.Delete [l]Application.DisplayAlerts = True[/l] End Sub
Edellä oleva koodiesimerkki estää Exceliä kyselemästä varmistusta käyttäjältä, kun tehdään poistoja.
Tuo Application.DisplayAlerts = True/False toimii kaikissa muissa MS Officen sovelluksissa paitsi Accessissa, jossa pitää käyttää DoCmd.SetWarnings = True/False. Taas näitä MS:n tuotteiden "ominaisuuksia"...
Edit: Muista palauttaa tuo DisplayAlerts viimeistään koodin lopussa, tai saattaa olla hankala käyttää esim. Exceliä, kun ei se ilmoita mitään mitä se tekee...;)
Suurkiitos!
Aihe on jo aika vanha, joten et voi enää vastata siihen.