• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Exit Sub als gezocht bereik niet bestaat

Status
Niet open voor verdere reacties.

Figaro75

Gebruiker
Lid geworden
12 dec 2011
Berichten
91
Ik heb in excel 2007 een jaaroverzicht gemaakt waarin verschillende jaren zijn opgenomen.
Elk jaar bestaat uit een opsomming van offertes.
Om het een en ander inzichtelijk te houden heb ik in VBA een routine geschreven waarbij je via een msgbox en een in te typen jaartal de betreffende offertes in dat jaar te verbergen/tonen.
Dit heb ik gedaan zodat je niet per jaar een eigen knop hoeft te maken.
De bereiken maak ik handmatig als ik een nieuw jaar toevoeg, elk bereik noem ik OVG_jjjj.

Nu heb ik in de code ook opgenomen dat bij geen invoer de Sub automatisch stopt.

Maar hoe kan ik de sub stoppen als het ingetypte bereik niet bestaat?
Bv als iemand een typefout maakt of een jaar kiest dat niet in het overzicht staat.

Als iemand trouwens een betere manier heeft hoor ik dat natuurlijk ook graag :p

De huidige code:
Code:
Sub Jaar_Verbergen()
Dim zoek As String

With Sheets("Projecten")
    If ActiveSheet.Name <> .Name Then MsgBox "Deze macro werkt niet in dit blad !! ": Exit Sub

    zoek = InputBox(" Welk Jaaroverzicht wil je verbergen ? ")
    If zoek = "" Then Exit Sub
    
    Range("OVG_" & zoek).EntireRow.Hidden = True
    
End With
End Sub

Sub Jaar_Tonen()
Dim zoek As String

With Sheets("Projecten")
    If ActiveSheet.Name <> .Name Then MsgBox "Deze macro werkt niet in dit blad !! ": Exit Sub

    zoek = InputBox(" Welk Jaaroverzicht wil je weergeven ? ")
    If zoek = "" Then Exit Sub
    
    Range("OVG_" & zoek).EntireRow.Hidden = False
    
End With
End Sub
 
Ik heb dergelijk probleem aldus opgelost (het gaat hier over de winst die ik per jaar kan opvragen):

Code:
jaaropnieuw:
    jaartal = InputBox("Welk jaar - bv 2010", "Jaarwinst")
    
 If jaartal < 1978 Then MsgBox " In dat jaar was er nog geen lotto": GoTo jaaropnieuw
 If jaartal > Year(Date) Then MsgBox "Jaartal bestaat niet": GoTo jaaropnieuw

Hopelijk helpt u dit verder.
Mvg.
 
mmmmm........dan zou ik dus eerst moeten zoeken welke jaren er in het overzicht zitten (deze staan namelijk wel in bv kolom B)
Het overzicht geeft namelijk de lopende projecten weer en het kan dus voorkomen dat een project uit bv 2009 nog steeds loopt maar dat alle projecten in 2010 afgesloten zijn.
Jaaroverzicht 2010 is dan dus uit het overzicht verdwenen (verplaatst naar een ander tabblad).

Ik dacht dan aan zoiets maar dat werkt dus niet :confused::
Code:
If zoek <> Range("B11:B999").Value Then MsgBox " Dit jaaroverzicht bestaat (nog) niet ":  Exit Sub

Als ik trouwens GoTo Jaar_Verbergen doe krijg ik ook een foutmelding dat hij dat niet snapt.
Hoe kan ik weer terug naar de eerste MsgBox?
 
Of zou ik bv eerst het moeten zoeken op de string in een range en dat als die gevonden wordt er verder wordt gegaan?

Hoe kan ik dan het resultaat vergelijken met de string?
Zoiets?
Code:
For Each cl In [B15:B999]
If cl.Value = zoek Then Range("OVG_" & zoek).EntireRow.Hidden = True

Next

Else MsgBox " Dit jaaroverzicht bestaat (nog) niet ":  Exit Sub
 
Ik zou hem gewoon zo doen:
Code:
Sub Jaar_Verbergen()
Dim zoek As String
    If ActiveSheet.Name <> "Projecten" Then MsgBox "Deze macro werkt niet in dit blad !! ": Exit Sub
    zoek = InputBox(" Welk Jaaroverzicht wil je verbergen ? ")
    If zoek = "" Then Exit Sub
    On Error GoTo einde
    Range("OVG_" & zoek).EntireRow.Hidden = True
    Exit Sub
einde:
    MsgBox "Verkeerde invoer"
End Sub
 
Het is me niet zo duidelijk hoe je gegevens gestructureerd zijn. Maar als ze in tabel vorm staan maak er dan een tabel van met Invoegen > Tabel. Dan krijg je er gratis hele mooi filter bij en heb je geen vba meer nodig.
 
Beste Frans,

Ik gebruik geen tabellen (wel geprobeerd) maar dat leverde weer andere problemen op dus daar ben ik weer vanaf gestapt.
Filters zijn niet nodig, ik wil gewoon all rijen met projecten binnen een jaarbereik verbergen/tonen maar een drietal rijen met subtotalen per jaar blijven weergeven.

Overzicht begint in bv rij 15 met in B15 het jaartal
B16 t/m ........ alle offertes die dat jaar geschreven zijn
En daaronder een drietal regels met o.a. het subtotaal.
Dan een lege regel
En dan weer eenzelfde jaaroverzicht.

Het aantal rijen per jaar verschilt.
Dus ik bepaal bij een nieuw jaar het bereik en voeg naar gelang het aantal offertes steeds een standaard (benoemd) regel in met formules, opmaak, voorwaardelijke opmaak etc.

Hiervoor werkte ik met de groepfunctie maar door de manier waarop ik nu regels toevoeg (via een knop) wordt de groep bij de eerste keer een nieuwe regel toevoegen gesplitst in twee groepen???? :shocked:
Dus de overzichtknopjes van excel werkt dan dus niet optimaal en bedacht ik via VBA een manier om een heel jaar te verbergen.
Om het flexibel te maken laat ik dus via een msgbox de gebruiker het te verbergen/tonen jaaroverzicht intypen waarna ik via VBA de ingestelde range selecteer (OVG_ en het jaartal) en deze dus verberg/toon.

Dit werkt prima tot het moment dat je een typefout maakt of een jaar kiest wat niet (meer) bestaat.
 
Daniel,

Ik had je reactie niet gezien........nu wel :)
En dit werkt perfect.

Ik heb nog veel te leren maar verwonder toch steeds maar weer wat excel en VBA allemaal kan.
Probleem is dat ik met voorbeeldjes e.d. probeer om tot een werkbare oplossing te komen terwijl ik eigenlijk te weinig kennis heb van VBA.
Maar dankzij dit forum kom ik een heel eind.

Iedereen bedankt voor zijn/haar input en met name natuurlijk Daniel voor de perfect werkende oplossing
 
Graag gedaan, ik ben zelf ook pas sinds juli vorig jaar (dankzij dit forum) bewust van vba.. dus je leert het snel genoeg. Zet wel je vraag op opgelost (indien dit het geval is)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan