[Excel VBA] events starten

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

Acties:
  • 0 Henk 'm!

Anoniem: 133448

Topicstarter
Ik wil een macro starten door verandering van één cel in plaats van de gebruikelijk eventhandler die VBA geeft.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

ik wil dus één specifieke cel aanwijzen die de macro start en niet alle cellen in bovengenoemd voorbeeld.

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Dat is toch geen probleem? Vergelijk het Target met de cel die je wilt en je bent er. Niet die cel -> stop, wel die cel -> roep de bedoelde functie aan.

In mijn ervaring is performance zo ook geen probleem.
edit:

Oeh, welkom op GoT :)

[ Voor 8% gewijzigd door F_J_K op 05-01-2005 09:11 ]

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


Acties:
  • 0 Henk 'm!

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Wat je moet doen is een nieuwe module gaan aanmaken binnen de Excel Visual Basic Editor en daar deze code in plaatsen:

Visual Basic:
1
2
3
Option Explicit

Public WithEvents Sht       As Worksheet


Vervolgens kan je dan van deze withevents een volgende functie creeëren:

Visual Basic:
1
2
3
Private Sub Sht_SelectionChange(ByVal Target As Range)
    'Hier je code voor wanneer er een wijziging binnen het sheet optreed
End Sub

Acties:
  • 0 Henk 'm!

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 12:53
Dit werkt altijd heel goed:
Visual Basic:
1
2
3
4
5
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" then
    Doe je ding
End If
End Sub


BTW, als je nog meer VBA code hebt kan je ook ergens in een module
Visual Basic:
1
2
3
4
5
Public verandercel as Range

Sub 'een bestaand blok code
Set verandercel = Activeworkbook.Sheets(1).Cells(1,1)
End Sub


Je worksheetcode wordt dan
Visual Basic:
1
2
3
4
5
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target= verandercel then
    Doe je ding
End If
End Sub
, dat zoekt net even sneller, hoewel op een normale PC in normale situaties allebei de methodes OK zijn.

Acties:
  • 0 Henk 'm!

Anoniem: 133448

Topicstarter
Ik heb de versie van onkl geprobeerd maar deze werkt niet. Kan het zijn dat ik met een te oude versie van excel werk? (excel 2000)

Acties:
  • 0 Henk 'm!

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 12:53
?
Nee.
Just checking:
Je gaat naar je Visual Basic Editor (Alt-F11), zoekt in de project explorer je bestand op, dubbelklikt op de naam van het tabblad waar we het over hebben.
Dan plak je deze code in het witte veld rechts:
Visual Basic:
1
2
3
4
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Msgbox Target.Address
Debug.Print Target.Address
End Sub

Ga terug naar je Excelblad.
Als je nu op een cel klikt moet er een messagebox verschijnen met het adres van de cel.
Zo nee: Check je macro beveiliging eens.
Zo ja: Als dit werkt, zou mijn voorgaande post (eerste oplossing, voor de BTW) ook moeten werken.

Acties:
  • 0 Henk 'm!

Anoniem: 133448

Topicstarter
Het wat hierboven staat werkt wel allemaal alleen als ik de if structuur Target.adress = "$a$1" then ..... doe, doet hij het niet.

Acties:
  • 0 Henk 'm!

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Anoniem: 133448 schreef op woensdag 05 januari 2005 @ 16:00:
Het wat hierboven staat werkt wel allemaal alleen als ik de if structuur Target.adress = "$a$1" then ..... doe, doet hij het niet.
En als je het nou op de andere manier doet wat onkl zegt
onkl schreef op woensdag 05 januari 2005 @ 09:39:
BTW, als je nog meer VBA code hebt kan je ook ergens in een module
Visual Basic:
1
2
3
4
5
Public verandercel as Range

Sub 'een bestaand blok code
Set verandercel = Activeworkbook.Sheets(1).Cells(1,1)
End Sub


Je worksheetcode wordt dan
Visual Basic:
1
2
3
4
5
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target= verandercel then
    Doe je ding
End If
End Sub
, dat zoekt net even sneller, hoewel op een normale PC in normale situaties allebei de methodes OK zijn.

Acties:
  • 0 Henk 'm!

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 12:53
Moet TS wel nog meer code hebben staan.

Ik denk/hoop dat de fout hierin zit: Verander "$a$1" eens in "$A$1", Excel is nogal pickie op het verschil, .Address geeft een string terug met het adres. Vervolgens vergelijkt 'ie die strings, casesensitive.

Misschien werkt dit anders:
Visual Basic:
1
2
3
4
5
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Target.Address = ActiveWorkbook.Sheets(1).Cells(1, 1).Address Then 
   MsgBox "hebbes"
End If 
End Sub

Succes ermee.

[ Voor 6% gewijzigd door onkl op 06-01-2005 18:46 ]


Acties:
  • 0 Henk 'm!

Anoniem: 133448

Topicstarter
Bedankt, deze werkt wel :)

De andere overigens ook bedankt natuurlijk!
Pagina: 1