Toon posts:

[VBA] withevents in dynamic form not working

Pagina: 1
Acties:

Onderwerpen


  • Saiya_Jin_Vegeta
  • Registratie: juni 2001
  • Laatst online: 01-08-2020
Na lang zoeken heb ik gevonden dat ik toch gebruik moet maken van withevents om in dynamische forms/frames acties te definieren.
Op dit moment heb ik de volgende 2 stukken code:

Module 1
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Public BaseFrame As Frame
Sub add_button()


' Create Frame for Metric Chooser
Set BaseFrame = ActiveSheet.OLEObjects.Add(ClassType:="Forms.Frame.1", Link:=False, _
        DisplayAsIcon:=False, Left:=10, Top:=10, _
        Width:=490, Height:=230).Object

With BaseFrame
    .Object.Caption = "Metric Requirement - Chooser"
    .Name = "BaseFrame"
    .Enabled = True
End With

BaseFrame.Select
Selection.Verb Verb:=xlVerbPrimary
End Sub


In de worksheet heb ik de volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Dim WithEvents clear_button As CommandButton


Private Sub clear_button_Click()
MsgBox "test"
End Sub


Sub add_button()

Module2.add_button
create_button_create
End Sub

Sub create_button_create()

Set clear_button = BaseFrame.Controls.Add("Forms.CommandButton.1", "clear_button", True)
With clear_button
    .Left = 100
    .Top = 10
    .Width = 75
    .Height = 30
    .Name = "clear_button"
    .Caption = "Clear"
End With

End Sub


Als ik de code manueel in 2 stappen uitvoer:
  1. Module1.Add_button
  2. create_button_create
Dan werkt de button wel.

Als ik de code automatisch uitvoer met de optie:
add_button -> uit de worksheet
Dan werkt de button niet.

Waar dit probleem ligt weet ik niet. Ik heb wel het idee dat ik iets fout doe. Wat er fout gaat weet ik niet.

  • Saiya_Jin_Vegeta
  • Registratie: juni 2001
  • Laatst online: 01-08-2020
Is er niemand die me hiermee kan helpen?
Een withevent op het frame lukt wle, maar op het moment dat ik in 1 ruk de code uitvoer dan doet de code achter de button het niet meer.

  • Lustucru
  • Registratie: januari 2004
  • Niet online

Lustucru

26 03 2016

tricky. Je hebt te maken met drie objecten: de shape op je worksheet, het msforms.object wat daarin bevat is en dan nog een VBA variabele die verwijst naar het msformsobject. De excel eventhandlers gaan daar niet even voorspelbaar mee om. Er zijn meer voorbeelden van quircky gedrag van geneste controls.

De enige workaround die ik me kan voorstellen is om de button geen dochtercontrol te maken van het frame object maar het direct op de worksheet te plaatsen.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Saiya_Jin_Vegeta
  • Registratie: juni 2001
  • Laatst online: 01-08-2020
Gelukkig doe ik dus niks verkeerd en is dit dus een probleem van VBA.
Dan ga ik nu inderdaad de weg in die je voorsteld, alle controls hoogstens op sheet niveau in plaats van object niveau.

Voor het uiterlijk maakt dit niks uit en voor de werking ook niet.

  • Saiya_Jin_Vegeta
  • Registratie: juni 2001
  • Laatst online: 01-08-2020
Ik ben aan het zoeken geweest, maar kan niet vinden wat ik zoek.
De volgende setup krijg ik niet aan de praat:
Reguliere module:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Public eXL As New eventsXL
  
Function Create_ComboBox()
Dim OLEObj As OLEObject
Dim myCell As Range

With eXL
    Set .WB = ActiveWorkbook
    Set .WS = .WB.ActiveSheet
    .WS.Activate
    
        .WS.Range("E2").NumberFormat = ";;;" 'hide the value in the cell
        Set OLEObj = .WS.Range("E2").Parent.OLEObjects.Add _
                    (ClassType:="Forms.ComboBox.1", Link:=False, _
                    DisplayAsIcon:=False, _
                    Top:=.WS.Range("E2").Top, _
                    Left:=.WS.Range("E2").Left, _
                    Width:=.WS.Range("E2").Width, _
                    Height:=.WS.Range("E2").Height)
    
    Set .ComboBox1 = OLEObj.Object
    With .ComboBox1
        .AddItem "A"
        .AddItem "B"
        .AddItem "C"
        .AddItem "D"
    End With

End With
End Function


Classe module (eventsXL)
code:
1
2
3
4
5
6
7
8
9
10
11
12
Public WithEvents XL As Excel.Application
Public WithEvents WB As Excel.Workbook
Public WithEvents WS As Excel.Worksheet
Public WithEvents ComboBox1 As MSForms.ComboBox
  
Private Sub myOLEObj_Change()
MsgBox "Hello"
End Sub

Private Sub ComboBox1_Change()
MsgBox "Hello"
End Sub


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee