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

Commandbutton de-activeren bij celwaarde

Status
Niet open voor verdere reacties.

Paul-RT

Giga Honourable Senior Member †
Lid geworden
6 dec 2003
Berichten
10.886
Jahoor, wéér een vraag van mij. :confused: (Is vba ergens te leren / studeren?)

In een document heb ik voor een command button de volgende code:
Code:
Private Sub CommandButton1_Click()
    
  ThisWorkbook.SaveAs Filename:=Sheets("Apparaat").Range("K7").Value
  Workbooks.Open Filename:="F:\Microsoft Office 2003\Excel\Test exell HelpMij\\Keurings Rapport nieuw.xls"
  ThisWorkbook.Close savechanges:=True
    
End Sub
Die werkt Goed (dankzij jullie :D)

Elders in het document heb ik een speciale optie voor cel K7
Code:
With ActiveWorkbook.Sheets("Apparaat")
    While IsEmpty(.Range("K7"))
      .Range("K7").Value = InputBox("ID-nummer invoeren aub. (of een * )")
    Wend
                      
                      
  If (.Range("K7") = "*") Then Exit Sub
  
  End With

De wens is nu, om Commandbutton1 te verbergen OF de-activeren in de volgende 2 gevallen:
1: K7 is nog leeg (en wacht op de inputbox)
2: K7 bevat het * (sterretje).

Tevens moet K7 weer leeg worden en liefst het document in de ontwerpmodus zetten.

Wellicht is een en ander te combineren.
Dat de input en de andere macro's stoppen na invoer van het * en dat cel K7 dan leeg blijft.
Vanzelfsprekend is de commandbutton dan gede-activeerd.

Ik heb getracht te combineren met de volgende code (werkte helaas niet)
Let wel, dit is een stukje van een lang code.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim bShow As Boolean
     
    If Target(1, 1).Address = "$K$7" Then
        bShow = UCase(Target) <> ""
        With Me
            .CommandButton1.Visible = bShow
        End With
    End If
 
Laatst bewerkt:
Het is niet verkeerd te formuleren wat je beoogt.
De door jou gewenste zijn nl. tamelijk intrigerend ongebruikelijk en lijken voor jou iets op te lossen waarvoor zeer waarschijnlijk een voor de hand liggender werkwijze bestaat.
 
Ik zal proberen iets uit te leggen.
Het document is niet van mijzelf, maar van een andere user op helpmij.
Ik probeer het document te automatisseren, en gebruik de gevonden formules eerst voor hem, daarna voor mijzelf.
Ik kan geen voorbeeld document posten, dan alleen kleine stukjes code.

Als het document wordt geopend, wordt met een inputbox gevraagd om een code.
Deze code wordt later gebrukt door de commandbutton. Die slaat het document op, met als documentnaam de waarde die ik heb ingegeven bij de inputbox.

Zolang de inputbox leeg is, mag je niet op de commandbutton klikken.
Dit heeft namelijk atot gevolg, dat de macro met een foutmelding komt.

Als je ipv een code een * typt, stoppen de macro's.
Dit geeft je gelegenheid om aan de code te werken, of andere zaken te wijzigen.
als je op dit moment de commandbutton zou gebruiken krijg je weer een foutmelding, omdat er niet wordt opgeslagen met een * als naam.
Na opslaan zal het document sluiten en een nieuw leeg (niet ingevuld) doc openen.
vandaar dat er een stop-punt in zit.

Zou je het doc wegkruisen, wordt er (zonder commentaar) ook met dezelfde waarde uit de inputbox opgeslagen. Ook dat is niet gewenst.

Waarom met een * kunnen stoppen? Wel, het doc heeft beveiligde cellen en zit met een 1-letterig password op slot.
Dit heeft als doel dat je met de cursor alleen in die cellen kunt komen die je moet kunnen invullen.
De rest van de opmaak is niet relevant tijdens invullen.
De button "ontwerp modus" is niet bereikbaar op dit moment.
Houdt dus in, dat je nooit meer bij je code kunt komen.
Daarom zijn bovenstaande functies gewenst.
 
Als je wil voorkomen dat een gebruiker verkeerde dingen doet moet je een userform gebruiken. Dat biedt optimale controle op invoer en opslag. Onzichtbaarheid van werkbladen met gegevens en beveiliging per werkblad is dan veel eenvoudiger te regelen. Bovendien wordt het geheel nog een stuk gebruikersvriendelijker.
 
Wat is dat, en waar vinden we dat?
 
Daar wil ik zeker eens mee bezig gaan.
Maar allereerst zoek ik een oplossing voor bovenstaande.
 
Waarom kan je niet in de macro's een check zetten op cel K7? Als die leeg is of * bevat, Exit Sub, anders doe verder met de macro.

Wigi
 
Dat heb ik geprobeerd (zie startpost).
Maar dat krijg ik niet voor elkaar.

Mede omdat ik te weinig kennis van vba heb. bestaande code verbouwen lukt soms wel, maar nieuwe code verzinnen niet.
Zou het wel graag leren.

Ook weet ik niet, welke code voor de juiste werking wáár hoort.
In je tabblad, of in this workbook.:confused:
 
Dat is toch maar gewoon zoiets (vindt je met hopen op het forum):

Code:
Sub ifconstructie()

    If Len(Range("K7").Value) = 0 Or Range("K7").Value = "*" Then
    
        MsgBox True
        
    End If

End Sub

Wigi
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan