userform zonder close button

Status
Niet open voor verdere reacties.

binger

Gebruiker
Lid geworden
12 okt 2010
Berichten
23
Ik heb net mijn eerste applicatie geschreven in VBA en ofschoon ze het verwachte doet zit ik nog met 2 vervelende problemen waar ik niet uit kom. Beide hebben te maken met een userform dat ik creëerde met 2 buttons (herbegin en stoppen) en 2 listboxen.
1) aangezien bij het stoppen een aantal acties moeten ondernomen worden heb ik een stop button toegevoegd aan het formulier en wens ik dat het formulier niet kan gesloten worden via de standaard close button in de rechterbovenhoek. Hoe krijg ik deze weg ? ik merk dat je via de properties al dan niet een help button kan op het formulier zetten maar kan iemand me vertellen hoe ik die stop button weg krijg ? (of hoe ik er bij het op klikken eventueel code kan aan toevoegen)
2) het formulier wordt normaal zichtbaar en actief maar na het klicken van een button of een listbox wordt het formulier terug zichtbaar maar is niet meer actief. Als ik dan ergens op het formulier met de rechter muisknop klik wordt het terug actief en kan ik verder. Hoe kan ik dit voorkomen ? ik veronderstel dat ik het op de één of andere manier moet initialiseren na het uitvoeren van code maar hoe ?

Dank voor hulp !

Greets
 
binger,

1. Zet deze code (boven aan) achter het formulier.

Code:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) 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 Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private wHandle As Long

Private Sub UserForm_Initialize()
    SetWindowLong FindWindow("ThunderDFrame", Me.Caption), -16, 0
    DrawMenuBar FindWindow("ThunderDFrame", Me.Caption)
End Sub
Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
   'Code to drag the form
   If wHandle = 0 Then Exit Sub
   If Button = 1 Then
       ReleaseCapture
       SendMessage wHandle, &HA1, 2, 0
   End If
End Sub

2. kan ik hier vandaan niet zien.

Suc6
 
Laatst bewerkt:
binger,

1. Zet deze code (boven aan) achter het formulier.

Code:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) 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 Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private wHandle As Long

Private Sub UserForm_Initialize()
    SetWindowLong FindWindow("ThunderDFrame", Me.Caption), -16, 0
    DrawMenuBar FindWindow("ThunderDFrame", Me.Caption)
End Sub
Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
   'Code to drag the form
   If wHandle = 0 Then Exit Sub
   If Button = 1 Then
       ReleaseCapture
       SendMessage wHandle, &HA1, 2, 0
   End If
End Sub

2. kan ik hier vandaan niet zien.

Suc6
 

Beste,

Dank voor je code, ff bij gezet en ja hoor, prima het loopt als een trein !
Dank,

Nu mijn 2e probleem nog :evil:echt geen idee, moet volgens mij een stomme initialisatie of declarartie zijn

Dank !
 
binger,

Het beste is om je bestandje zonder gevoelige info even hier te plaatsen.
Zet in het bestandje dan wat je wil, eventueel met aanwijzingen.
 
Ondanks dat ExcelAmateur een juist antwoord geeft op jouw vraag (weghalen van de knop) kun je nu middels de toetsencombinatie Alt + F4 nogsteeds het formulier sluiten.

een andere mogelijkheid is dan deze:

Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
        Cancel = True
        MsgBox "niet sluiten op deze manier maar op ...."
    End If
End Sub

Voor wat betreft punt 2; heb je een voorbeeldje?
 
ik ben nieuw hier.... :( ik heb reeds een poging gedaan mijn bestandje te uploaden maar dit lukte me niet.... ik doe nog een poging....
 
Het bestandje mag niet groter zijn dan 100 mb, anders even inpakken.
Als het een 2007 bestandje is moet je het ook inpakken.
Een .xlsm geeft vaker een probleem bij het Uploaden.
 
Ondanks dat ExcelAmateur een juist antwoord geeft op jouw vraag (weghalen van de knop) kun je nu middels de toetsencombinatie Alt + F4 nogsteeds het formulier sluiten.

een andere mogelijkheid is dan deze:

Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
        Cancel = True
        MsgBox "niet sluiten op deze manier maar op ...."
    End If
End Sub

Voor wat betreft punt 2; heb je een voorbeeldje?
 

Beste,

Dank voor de tweede oplossing !
Ik probeer mijn bestandje (in RAR formaat) te uploaden maar dit lukt me niet...
het is +/-100K groot, is dit te groot ?
 
IK slaag er niet in het bestand te uploaden....:( maar het probleem is gemakkelijk aan te geven.
Ik open mijn formulier via userform.show en dit verloopt prima.
Bij het openen van het formulier is er slechts 1 listbox enable en bij het dubbelklikken wordt er code uitgevoerd, dit loopt prima. Op het einde van de code maak ik een aantal listboxen en buttons, via het enable comando true of false en dan stop ik in de routine.
Het gevolg is dat het formulier (met de juiste lstbox en buttons, enable of niet...) "bevroren" op het scherm staat en dit tot ik ergens op het formulier met de rechter muisknop klik, hierdoor activeert het scherm en verloopt alles terug naar wens.
Dus veronderstel ik dat ik voor het verlaten van de routine op de één of andere manier het comando terug moet over geven (lees activeren) aan het formulier.... maar hoe ?

Thanks voor input !
 
Zonder voorbeeldje blijft het gissen,

Plaats de code eens die je hebt bij "Dubbelklikken"
 
Dit is de code bij dubbel klik, aangzien de totale sub vrij lang is heb ik enkel het begin en einde waar ik de instelling doe voor het formulier weergegeven.
Code:
Private Sub LstBoxM_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    '
    Flag = ""
    Response = ""
    RowM = LstBoxM.ListIndex
    ListM = LstBoxM.ListCount
    'code…….
    '
    'Activeren en deactiveren van Buttons, LstBoxen en Labels
    '
    Range("A1").Select
    koppelform.LabelMan.Enabled = False
    koppelform.LstBoxM.Enabled = False
    koppelform.LstBoxM.ForeColor = (&H80000000)
    koppelform.labelPop.Enabled = True
    koppelform.LstBoxP.Enabled = True
    koppelform.LstBoxP.ForeColor = (&H80000012)
    koppelform.HerbeginButton.Enabled = True
    koppelform.stopButton.Enabled = False
    koppelform.LstBoxP.TabStop = True
    koppelform.LstBoxP.SetFocus
    '
    'Vanaf hier : naar DblClick_LstBoxP om Pop te selecteren, weer te geven op het scherm en LstBoxP aan te passen
    '
Einde:
End Sub
 
Laatst bewerkt door een moderator:
Behoudens eventueel die select kan ik hier niks mee,

Is er een 2e formulier? Waarom wordt het formulier weer terug zichtbaar?

tip 1:
Voeg eens een onderbrekingspunt in in jouw code en stap er eens met F8 doorheen, wellicht kom je wat tegen
tip 2:
Probeer nogmaals of je een bestandje kunt uploaden waarin in ieder geval hetzelfde probleem zich voordoet
 
Eric,

Nee, er is maar 1 formulier.
Het blijft zichtbaar op het scherm tijdens het uitvoeren van de code. (ik zie dan wel op de sheet achter het formulier alles heen en weer gaan wat eigenlijk storend is...kan je dit ook verbergen ?)
Na het uitvoeren van de code staat idd vakje A1 geselecteerd met op de voorgrond het formulier maar bevroren....het is dus een kwestie om voor de sub te beëindigen de controle terug te geven aan het formulier, maar hoe ?

Dank
 
(ik zie dan wel op de sheet achter het formulier alles heen en weer gaan wat eigenlijk storend is...kan je dit ook verbergen ?)

Alles heen en weer gaan is waarschijnlijk al niet eens nodig, (maar zonder voorbeeld...)
begin eens met application.screenupdating = false bovenaan de code
en application.screenupdating = true onderaan te zetten, scheelt ongetwijfeld wat geflikker en vaak ook wat snelheid.
 
Eric,

Dank voor je voorstel, maar dit doet het niet.
Het loopt idd een stuk sneller maar tijdens het uitvoeren van de code ga ik tussenresultaten voorlopig wegschrijven in de sheet en hier loopt het dan in het honderd.
Ik heb ook al een poging gedaan met in het begin van de sub double click, userform.hide en als laatste commando terug userform.show maar ook dit doet het niet...
 
Ik heb het gevonden !
Gewoon via userform.hide en userform.show, het probleem dat ik hiermee had was dat er ook code stond bij het activeren van het formulier maar dit heb ik voorkomen door een vlag te plaatsten....
Dank voor jullie hulp !
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan