Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Välilehtien tuhoaminen

Sivun loppuun

Moukka [16.07.2004 15:01:30]

#

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!

hunajavohveli [16.07.2004 15:12:16]

#

Painoit luultavasti lähetä-nappia uudestaan siitä syystä ettei sivu latautunut sinulla vielä, vai mitähän varten tuo tuli kaksi kertaa?

Moukka [16.07.2004 15:16:59]

#

En tiedä miks noin kävi, mut varmaan jotain sähläsin...

hunajavohveli [16.07.2004 15:28:40]

#

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.

sooda [16.07.2004 15:43:07]

#

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 :)

Moukka [16.07.2004 15:46:52]

#

Next ei kelpaa. Sillon lähtee lentoon sivut, joiden pitäs pysyä paikallaan, jos ne vain sattuu aktiivisia olemaan. Eli Next Next?

sooda [16.07.2004 15:56:34]

#

Täh? Resume Next tekee vaan sen että se jatkaa koodin suoritusta seuraavalta riviltä virherivin jälkeen.

Moukka [16.07.2004 16:00:52]

#

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?

hunajavohveli [16.07.2004 16:37:25]

#

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ä.

Antti [17.07.2004 14:34:17]

#

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

BadSource [19.07.2004 07:51:51]

#

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...;)

Moukka [19.07.2004 08:38:02]

#

Suurkiitos!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta