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

refedit probelem

Status
Niet open voor verdere reacties.

sylvester-ponte

Verenigingslid
Lid geworden
19 apr 2007
Berichten
6.550
als ik in een form met een active refedit afsluit met het rode kruisje rechts boven,
dan wordt geen van deze drie geactiveerd.
Code:
Private Sub RefEdit1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Stop
End Sub

Private Sub UserForm_Deactivate()
Stop
End Sub

Private Sub UserForm_Terminate()
Stop
End Sub
hoe moet ik dat voor elkaar krijgen?
als ik een button toevoeg om de form te sluiten lukt het wel.
misschien weet iemand een manier om de form zonder rood kruisje te maken,
dan kan hij alleen met een button afgesloten worden.
 

Bijlagen

  • refedit probleem.xlsm
    19,8 KB · Weergaven: 46
Laatst bewerkt:
Met het kruisje rechts bovenin een Userform wordt het event QueryClose geactiveerd.
Om niks te doen als er op dat kruisje wordt geklikt neem je dit op in de code van het Userform:
Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then Cancel = True
End Sub

Voor een volledige uitleg kan je hier kijken:
https://msdn.microsoft.com/en-us/library/office/gg278635.aspx
 
Laatst bewerkt:
edmoor, hij doet het niet. ik heb hem net getest:

ook de UserForm_QueryClose wordt niet getriggerd.
 

Bijlagen

  • refedit probleem 2.xlsm
    19,9 KB · Weergaven: 36
Zet dit in je Userformcode dan is je kruisje weg:
Code:
Option Explicit

Private Declare Function FindWindow _
    Lib "user32" _
    Alias "FindWindowA" _
      ( _
        ByVal lpClassName As String, _
        ByVal lpWindowName As String _
      ) As Long
      
Private Declare Function GetWindowLong _
    Lib "user32" _
    Alias "GetWindowLongA" _
      ( _
        ByVal hWnd As Long, _
        ByVal nIndex As Long _
      ) As Long
      
Private Declare Function SetWindowLong _
    Lib "user32" _
    Alias "SetWindowLongA" _
      ( _
        ByVal hWnd As Long, _
        ByVal nIndex As Long, _
        ByVal dwNewLong As Long _
      ) As Long
      
Private Const WS_SYSMENU = &H80000
Private Const GWL_STYLE = (-16)

Private Sub UserForm_Initialize()
  Dim hWnd    As Long
  Dim lStyle  As Long
  
  Select Case Int(Val(Application.Version))
    Case 8
      hWnd = FindWindow("ThunderXFrame", Me.Caption)
    Case Is >= 9
      hWnd = FindWindow("ThunderDFrame", Me.Caption)
  End Select
  lStyle = GetWindowLong(hWnd, GWL_STYLE)
  SetWindowLong hWnd, GWL_STYLE, lStyle And Not WS_SYSMENU
End Sub
 
Bij het drukken op het rode kruisje worden (bij mij)
de volgende events en in deze volgorde getriggerd:
  • UserForm_QueryClose
  • RefEdit1_Exit
  • UserForm_Terminate
 
Leuk gevoinden: verwijder de refeditcontrol en al je gebeurtenissen doen het weer.

Iedereen in deze draad heeft dus gelijk.


Blijft de vraag staan waarom je die refedit control nodig hebt in een userform.
De refedit is toch typisch een UI control.
 
Laatst bewerkt:
Deels,
Ik heb stop vervangen door debug.print "x" om te kijken of de events getriggerd worden.
STOP daarentegen wordt niet geaktiveerd (net als de code middels F8 doorlopen bij afsluiten Userfor)
 
snb, ik wil de refedit gebruiken om de gebruiker, nadat de form is geïmporteerd,
gebieden aan te laten geven waar bepaalden handelingen op moeten plaats vinden.
 
@sylv

Met een goed doordacht ontwerp heb je die gebieden al tevoren vastgelegd.
De gebruiker hoeft alleen maar een keuze te maken uit een van de door jou vastgelegde gebieden. Daarvoor volstaat een combobox, optionbutton etc.
 
Laatst bewerkt:
snb, als ik van te voren weet hoe iemands bestand er precies uit ziet heb ik die refedit niet nodig.
maar eigenlijk zeg je: gebruik refedit vooral niet.

terwijl het zo handig is om de gebruiker meer vrijheid te geven en meer flexibel te zijn.
 
Hoe flexibeler hoe meer vergissingen, hoe minder standaardisatie, hoe minder uitwisseling/consolidatie, hoe minder samenwerking.
 
De refedit kent een aantal problemen (bugs) die mij ertoe hebben gebracht deze nooit meer te gebruiken. Een goed alternatief is een knop met erachter gebruik van Application.Inputbox met 8 als laatste argument.
@snb: soms is je applicatie dusdanig dat je niet alles kunt voorzien. Ik heb een aantal invoegtoepassingen die generiek zijn en op ieder willekeurig bestand moeten werken. Dan is het onmogelijk die bestanden "je wil op te leggen" betreffende de structuur.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan