[VBA] [Excel] OnChange Cell

Pagina: 1
Acties:
  • 182 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil graag een stukje VBA code aanroepen als ik de inhoud van een bepaalde cell verander.
Nou heb ik begrepen dat ik hiervoor de OnChange methode moet hebben. Maar daar over kan ik in de help van Excel / VBA niks vinden.

In Excel zelf heb ik hier niks over kunnen vinden en in VBA heb ik geen idee waar ik moet beginnen.
Zou iemand mij op weg kunnen helpen?

Als het mogelijk is wil ik ook de functie vanuit VBA aan een cell hangen aangezien in van te voren niet percies weet welke cell het moet zijn.

Al vast bedankt

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Je wilt dan ook vooral zoeken op Change () ipv. OnChange (): http://gathering.tweakers...30&select_forum=#hitstart ;)

Bijv. [Excel] Standaard waarde met latere toevoeging

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat topic wat je geeft daar akn ik wel iets mee.
Bedankt.

Het is me alleen nog niet duidelijk of het ook mogelijk is code uit te voeren al een bepaald veld veranderd terwijl je van te voren niet weet welk veld dat is.

Een stukje uitleg.
Ik heb een hoop grondstoffen die in bepaalde recepten zitten. Nou wil ik bijvoorbeeld weten wat de minimum hoeveelheid is dat die grondstof in alle recpten bij elkaar voor komt. Dit kan ik ook met een query uit de data base halen.
Maar zou heb ik nog meer regels. (een stuk of 10)
Ik heb twee sheets. In sheet 1 laat ik de data zien en sheet twee is een soort config sheet.
In die config sheet heb ik alle regels staan met daarachter een veldje Yes / No. Als die op Yes staat komt die regel wel in de data sheet en anders niet. Zo kan het dus zijn dat als ik een waarde in een rij verander dat die rij op nieuw berekent moet worden. Maar als er 2 regels op no staan is het rij 8 IPV 10.

Daarom zou ik dus liever een de change aan een cell koppelen inplaats van aan een sheet en vervolgens kijken welke cell het is. Dat is namelijk veel omslachtiger.

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Hoezo omslachtiger? Het checken welke cel is gewijzigd is toch amper werk? Als die cel een beetje variabel is kan je daar rekening mee houden door dat in je code te checken met wat simpele regels. Al kank je je op een gegeven moment afvragen of Excel wel het juiste tool is.

Maar dat is nu eenmaal hoe Excel werkt. Als je het aan 1 cel wilt hangen kan je natuurlijk kijken of je zonder VBA maar met formules kan werken.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 22:55
Verwijderd schreef op maandag 14 mei 2007 @ 10:08:
Maar als er 2 regels op no staan is het rij 8 IPV 10.

Daarom zou ik dus liever een de change aan een cell koppelen inplaats van aan een sheet en vervolgens kijken welke cell het is. Dat is namelijk veel omslachtiger.
Je zou met die ja/nee keuzes ook rijen kunnen verbergen in plaats van de cel waarin iets staat veranderen. En ook dat kan je via VBA doen. Je celverwijzingen blijven dan constant.

[ Voor 49% gewijzigd door onkl op 14-05-2007 10:21 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
F_J_K schreef op maandag 14 mei 2007 @ 10:16:
Hoezo omslachtiger? Het checken welke cel is gewijzigd is toch amper werk? Als die cel een beetje variabel is kan je daar rekening mee houden door dat in je code te checken met wat simpele regels. Al kank je je op een gegeven moment afvragen of Excel wel het juiste tool is.

Maar dat is nu eenmaal hoe Excel werkt. Als je het aan 1 cel wilt hangen kan je natuurlijk kijken of je zonder VBA maar met formules kan werken.
Ik vraag me ook nog steeds af of Excel wel de juiste tool is. Maar dat is de opdracht. Dus ik zal het met Excel moeten doen.

Ik heb wel een stukje dat het aantal keer Yes telt tot die regel dus daarvanaf kan ik wel het rij nummer afleiden.
onkl schreef op maandag 14 mei 2007 @ 10:21:
[...]

Je zou met die ja/nee keuzes ook rijen kunnen verbergen in plaats van de cel waarin iets staat veranderen. En ook dat kan je via VBA doen. Je celverwijzingen blijven dan constant.
dat zou ook een oplossing kunnen zijn. Ware het niet dat het "programma" ook nog makkelijk te onderhouden moet zijn en er dus altijd nog makkelijk een extra regel toe / tussen gevoegt moet kunnen worden. Dus ik wil zo min mogelijk hard code hebben.

Acties:
  • 0 Henk 'm!

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 22:55
Verwijderd schreef op maandag 14 mei 2007 @ 10:37:

[...]
dat zou ook een oplossing kunnen zijn. Ware het niet dat het "programma" ook nog makkelijk te onderhouden moet zijn en er dus altijd nog makkelijk een extra regel toe / tussen gevoegt moet kunnen worden. Dus ik wil zo min mogelijk hard code hebben.
Als de regels in je config allemaal (of iig. één blok) van die ja/nee regels zijn en de bijpassende regels in de datasheet ook onder elkaar staan, kan je het zo oplossen:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Worksheet_Change(ByVal Target As Range)
'deze macro in de code van de configsheet
If Not (Intersect(Target, Target.Parent.Range("B1:B10")) = Nothing) Then
    'Aannemende dat de ja/nee cellen in B1:B10 staan
    If Target.Value = "Ja" Then
        Worksheets("databladnaam").Rows(Target.Row + 10).Hidden = False
        'als de bijpassende data in rij 11-20 staat. pas anders de 10 aan naar je wensen.
    ElseIf Target.Value = "Nee" Then
        Worksheets("databladnaam").Rows(Target.Row + 10).Hidden = True
    Else
        MsgBox "ja of nee"
    End If
End If
End Sub

Dan heb je één brok te onderhouden code, wat onafhankelijk is van je aantal ja/nee cellen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil nou met checkboxen gaan werken zodat er geen fouten gemaakt kunnen worden in het verkeerd typen of iets dergelijks.

Alleen checkboxen willen nog niet mee werken aan de layout. Ik wil gewoon een checkbox in een cell hebben. Niet over mijn sheet heen.

Acties:
  • 0 Henk 'm!

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 22:55
Overweeg evt. validatie. Werkt alleraardigst tegen typefouten en is eenvoudiger zonder extra gepruts uit te breiden. Je kan checkboxes overigens zo instellen dat ze met cellen meebewegen. Het is niet echt "erin", maar het werkt. Zie de eigenschappen van de checkbox.

[ Voor 39% gewijzigd door onkl op 14-05-2007 12:02 ]

Pagina: 1