[VBA] Actie bij aanduiden item in dropdownlost

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Ik heb een dropdownlist...

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Option Explicit

Sub SelectPackage()
    'By YellowOnline
    
    'Declarations
    Dim ddlSelectPackage As Object
    Dim intLastRow As Integer
    
    'Creating the object
    ActiveSheet.DropDowns.Add(82.5, 0, 266.25, 15.75, False).Select
    Set ddlSelectPackage = ActiveSheet.DropDowns(1)
    intLastRow = Worksheets(2).UsedRange.SpecialCells(11).Row
    ddlSelectPackage.Name = "ddlSelectPackage"
    ddlSelectPackage.Placement = xlFreeFloating
    ddlSelectPackage.ListFillRange = "'Packages Data'!$A$2:$A$" & intLastRow
    ddlSelectPackage.DropDownLines = 44 'Pretty much goes down to row 30
    ddlSelectPackage.Display3DShading = True
End Sub


... waar ik acties wil doen als een item aangeklikt wordt.

Visual Basic .NET:
1
2
3
4
5
6
7
8
Sub ddlSelectPackage_Change()
    'By YellowOnline
    Debug.Print "Clicked"
    On Error Resume Next 'Because on first run there will be no chart to delete
    ActiveSheet.ChartObjects.Delete
    AddGraph
    On Error GoTo 0
End Sub


Dat laatste werkt dus niet: er komt geen "Clicked" in mijn debug output en ik snap niet waarom. Bij het debuggen lijkt het dat het object ddlSelectPackage niet bestaat. Op de volgende regel die ik in de ddlSelectPackage_Change() stak kreeg ik een error object required.

Visual Basic .NET:
1
Debug.Print ddlSelectPackage.Name


Wat mij betreft bestaat ddlSelectPackage wel, maar misschien is dit een scope probleem? Ik ben nieuw in VB(A) en loop wat verloren.

[ Voor 18% gewijzigd door YellowOnline op 19-07-2012 16:28 ]


Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Als ik dat probeer te gebruiken krijg ik
You tried to use an invalid statement or construct (for example, the Implements statement, WithEvents keyword, or an event sink) in a non-class module.
Place statements that generate this error in an object module.
Ik concentreer me nu terug op het pad van de scope, aangezien ik er zeker van ben dat het object niet meer bestaat voor de _Change(), ook niet als ik er Public ddlSelectPackage As Object van maak.

Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Nu online

Reptile209

- gers -

Volgens mij is het lastiger om run-time een eventhandler (zoals foo_change) toe te voegen dan je nu probeert. Kijk eens naar dit draadje, met name de een-na-laatste post. Daar staat een voorbeeld voor hoe je het voor een button zou kunnen doen.

Meer/andere tips: [google=excel vba runtime assign change event] :)

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Die foutmelding lijkt me op zich duidelijk toch? :p Ik vermoed dat je WithEvents in een Module ofzo hebt gezet, maar het moet in een Class staan of in ThisWorkBook (lelijk) of in een (user)form.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
pedorus schreef op donderdag 19 juli 2012 @ 21:31:
Die foutmelding lijkt me op zich duidelijk toch? :p Ik vermoed dat je WithEvents in een Module ofzo hebt gezet, maar het moet in een Class staan of in ThisWorkBook (lelijk) of in een (user)form.
Ik zie geen mogelijkheid om de VBA via Powershell in iets anders dan een module te injecteren. Ik kijk nu naar de post van Reptile209.

Edit:

De oplossing bleek simpel: onderstaande toevoegen aan SelectPackage (ReplaceGraph is de nieuwe naam van
ddlSelectPackage_Change)

Visual Basic .NET:
1
Selection.OnAction = "ReplaceGraph"


Ik zag dat wat ik wou mogelijk was via de GUI en heb dan een macro gerecord. Voilà, het leven kan simpel zijn. :F

[ Voor 28% gewijzigd door YellowOnline op 20-07-2012 11:03 ]

Pagina: 1