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

Lege cel messagebox

  • Onderwerp starter Onderwerp starter MMV
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

MMV

Gebruiker
Lid geworden
6 mei 2008
Berichten
111
Beste Forumcollega's,

Een vraag voor de echte VBA kenners:

Ik heb een projectoverzicht gemaakt. Nu heb ik twee knoppen gemaakt:
1. Genereren van het gekozen overzicht (middels een drop-down menu)
2. Resetten van het overzicht

1. Het genereren gebeurt op basis van een ingevulde cel. Als deze cel leeg is dan dient er een messagebox te verschijnen waarin wordt gezegd: Please fill in a project. En dan moet de macro stoppen.

Wanneer er echter wel een waarde staat ingevuld in de cel dan dient de macro een reeks acties uit te voeren. Ik krijg dit echter niet goed voor elkaar. Zie onderstaande code.

HTML:
Sub projectoverzicht_maken()
'als de cel leeg is dan zegt de macro:
If Range("E2:J2") = "" Then MsgBox ("First fill in a projectname")

Else
'als de cel niet leeg is dan dien je de onderstaande acties uit te voeren
DoEvents
  
Range("C5:N10,C12:N15,C17:N19,C21:N25,C28:N28,C31:N48").Select
Selection.Replace What:="""Test""", Replacement:=Range("E2:J2"), _
        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
        False, ReplaceFormat:=False


End If


End Sub
 
Beste Forumcollega's,

Een vraag voor de echte VBA kenners:

Ik heb een projectoverzicht gemaakt. Nu heb ik twee knoppen gemaakt:
1. Genereren van het gekozen overzicht (middels een drop-down menu)
2. Resetten van het overzicht

1. Het genereren gebeurt op basis van een ingevulde cel. Als deze cel leeg is dan dient er een messagebox te verschijnen waarin wordt gezegd: Please fill in a project. En dan moet de macro stoppen.

Wanneer er echter wel een waarde staat ingevuld in de cel dan dient de macro een reeks acties uit te voeren. Ik krijg dit echter niet goed voor elkaar. Zie onderstaande code.

HTML:
Sub projectoverzicht_maken()
'als de cel leeg is dan zegt de macro:
If Range("E2:J2") = "" Then MsgBox ("First fill in a projectname")

Else
'als de cel niet leeg is dan dien je de onderstaande acties uit te voeren
DoEvents
  
Range("C5:N10,C12:N15,C17:N19,C21:N25,C28:N28,C31:N48").Select
Selection.Replace What:="""Test""", Replacement:=Range("E2:J2"), _
        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
        False, ReplaceFormat:=False


End If


End Sub

Je spreekt over een cel maar verwijst naar een bereik.:eek:

Code:
Sub projectoverzicht_maken()
'als de cel leeg is dan zegt de macro:
If Range("E2") = "" Then MsgBox ("First fill in a projectname")

Else
'als de cel niet leeg is dan dien je de onderstaande acties uit te voeren
DoEvents
  
Range("C5:N10,C12:N15,C17:N19,C21:N25,C28:N28,C31:N48").Replace What:="""Test""", Replacement:=Range("E2"), _
        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
        False, ReplaceFormat:=False


End If


End Sub
Voldoet bovenstaande code?
Ik heb het gevoel dat het efficiënter kan.

Met vriendelijke groet,


Roncancio
 
Dat ik verwijs naar een bereik klopt: Ik heb namelijk enkele cellen samengevoegd. Om deze reden moet ik naar het bereik verwijzen Excel ziet dit namelijk zo!

Misschien is er wel een efficientere manier: echter ik krijg dit niet voor elkaar gefietst!
Door mijn 'gebrekkige' kennis probeer ik altijd een work-around te bedenken! Dit is zo'n workarround :)!

Neemt niet weg dat ik graag dit zou willen laten werken. Dus hoe krijg ik voor elkaar dat de macro stopt als mijn bereik leeg is. En hij de acties uitvoert op het moment dat er een waarde in mijn bereik ( Range("E2:J2") )staat.
 
Cellen samenvoegen is om problemen vragen. :(

ongeteste code

Code:
Sub projectoverzicht_maken()

    'als de cel leeg is dan zegt de macro:
    If Len(Range("E2").Value) = 0 Then
    
        MsgBox "First fill in a project name", vbCritical, "Project name"
    
    Else
    
        'als de cel niet leeg is dan dien je de onderstaande acties uit te voeren
        Range("CellenVervangen").Replace _
            What:="""Test""", _
            Replacement:=Range("E2").Value, _
            LookAt:=xlPart, _
            SearchOrder:=xlByRows, _
            MatchCase:=False
    
    End If

End Sub

waarbij CellenVervangen een benoemd bereik is op het blad met daarin de cellen C5:N10,C12:N15,C17:N19,C21:N25,C28:N28,C31:N48.

Dat maakt het onderhoud van de code iets makkelijker, en vooral, de code blijft werken als bvb. een nieuwe kolom A ingevoegd wordt (bereik schuift mee op.)

Wigi
 
Wigi, bedankt voor je snelle reactie!

Ik heb de code uitgeprobeerd en deze nog wat toepasbaarder gemaakt voor mijn situatie!

Voor het genereren van het projectoverzicht:

HTML:
Sub Projectenoverzicht_maken()
ActiveSheet.Unprotect

    'als de cel leeg is dan zegt de macro:
    If Len(Range("E2").Value) = 0 Then
    
        MsgBox "First fill in a project name", vbCritical, "Project name"
    
    Else
    
        'als de cel niet leeg is dan dien je de onderstaande acties uit te voeren
        Range("C5:N10,C12:N15,C17:N19,C21:N25,C28:N28,C31:N48").Replace _
            What:="""Test""", _
            Replacement:=Range("E2").Value, _
            LookAt:=xlPart, _
            SearchOrder:=xlByRows, _
            MatchCase:=False
    
    Range("E2").Select
    Selection.Locked = True
    Selection.FormulaHidden = False
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    
    
    End If

End Sub

Voor het resetten van het projectoverzicht:

HTML:
Sub projectoverzicht_resetten()

ActiveSheet.Unprotect


Range("C5:N10,C12:N15,C17:N19,C21:N25,C28:N28,C31:N48").Select
Selection.Replace What:=Range("E2"), Replacement:="""Test""", _
        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
        False, ReplaceFormat:=False

Range("E2").Select
Selection.ClearContents
Selection.Locked = False
    Selection.FormulaHidden = False
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True



End Sub
 
En haal die Select's er nog uit. Dat probeerde ik (zonder het expliciet te schrijven) al op te merken in mijn vorige code.

Dit

Code:
Range("E2").Select
Selection.ClearContents

kan beter als:

Code:
Range("E2").ClearContents

De rest is analoog van redenering.

Wigi
 
Zou het ook niet handiger zijn als de knop om een overzicht te maken pas zichtbaar is als er een projektnaam is ingevuld ?
 
Zou het ook niet handiger zijn als de knop om een overzicht te maken pas zichtbaar is als er een projektnaam is ingevuld ?

Niet helemaal. Als er knoppen verdwijnen dan is mijn ervaring dat men zich af gaat vragen wat er aan de hand is. Met het gevolg dat men de helpdesk gaat bellen etc, etc.
Je zou wel de knop disabled kunnen maken maar dan wel met aanvullende informatie waarom men nog niet kan klikken.

Met vriendelijke groet,


Roncancio
 
Het laten verdwijnen van knoppen zou eventueel ook kunnen. Ik ben namelijk voor nu de enige die hiermee overzichten gaat genereren. Het is echter wel de bedoeling dat dit door iemand anders overgenomen wordt en zelf breder wordt uitgedragen binnen de organisatie.

Conclusie: de knop laten staan is logischer.

Ik heb waar mogelijk de select eruit weten te vissen! Nogmaals dank!
 
Wat ik me echter afvraag: waarom is deze vraag nog niet eerder gesteld?

Het lijkt mij zeer wenselijk om overzichten per project te kunnen zien!

Heeft iemand hier een mening over?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan