Cacher fermer [X] bouton sur excel vba userform pour ma barre de progression
J'ai créé un userform pour afficher une barre de progression lorsque la macro est encore l'importation de feuilles de
Le problème est que l'utilisateur peut appuyer sur le rouge [X] bouton qui permettra de fermer et d'interrompre le traitement terminé.
Est-il un moyen de cacher cette bouton rouge de doom de sorte que les utilisateurs potentiels n'ont pas de confusion boutons de clic alors qu'il s'exécute.
edit:
J'ai essayé cette
'Find the userform's Window
Private Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
'Get the current window style
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
'Set the new window style
Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Const GWL_STYLE = -16
Const WS_SYSMENU = &H80000
et j'ai utilisé ce sur userform_initialize
Dim hWnd As Long, lStyle As Long
'Which type of userform
If Val(Application.Version) >= 9 Then
hWnd = FindWindow("ThunderDFrame", Me.Caption)
Else
hWnd = FindWindow("ThunderXFrame", Me.Caption)
End If
'Get the current window style and turn off the Close button
lStyle = GetWindowLong(hWnd, GWL_STYLE)
SetWindowLong hWnd, GWL_STYLE, (lStyle And Not WS_SYSMENU)
J'obtiens ce message d'erreur
ce code a été prise à partir de ici. Je ne sais pas ce que je fais mal et j'ai déjà supprimé les commentaires. C'est le code le plus simple que j'ai trouvé, donc je voudrais l'intégrer à mon userform. Toute aide est appréciée.
mis à jour avec quelques infos
Pourriez-vous clarifier et de changer le mot "désactiver" à "masquer et désactiver" si c'est ce que vous avez l'intention de faire? La désactivation de la fonctionnalité est relativement simple. Cacher, il semble ne pas l'être.
Avez-vous essayé le code ci-dessous?
Pour résoudre le problème vous montrer dans la capture d'écran: déplacez tous les déclaration d'API pour le haut du module!
OriginalL'auteur forums | 2013-03-01
Vous devez vous connecter pour publier un commentaire.
Ci-dessous est une routine que vous pouvez l'appeler comme ceci:
ou dans votre formulaire:
Voici le code que vous aurez besoin de:
Call DrawMenuBar(HWnd)
et sa déclaration. Aussi les déclarations sont foiré et ne fonctionnera pas avec Office 64, voir jkp-ads.com/articles/apideclarations.asp.de quoi avez-vous besoin de la DrawMenuBar? Et qui la déclaration est foiré? (Je n'ai pas de 64 bits d'Excel sous la main pour tester...) merci!
Si vous appelez subRemoveCloseButton() lorsque le formulaire est déjà rendu (c'est à dire non pas de l'intérieur Userform_Initialize()), puis le Menu ne change pas. Dans ce cas, vous devez appeler DrawMenuBar() alors rendre à nouveau. Comme pour le 64 bits de soutien, tout au Long de valeurs représentant les pointeurs doivent être remplacés par des LongPtr. Par exemple FindWindow() retourne un LongPtr, pas une Longue. De même pour le hwnd de paramètres.
ATTENTION: cet appel de
FindWindow(vbNullString, frm.Caption)
il peut arriver, que si votre formulaire est le même légende que tout autre programme de la fenêtre, que son bouton [x] est supprimé à la place de l'objet UserForm du bouton [x]. J'ai posté une amélioration de la fonction ci-dessous la liaisonFindWindow
à des UserForms et y compris x64 sûr des appels d'API.OriginalL'auteur Peter Albert
Vous pouvez travailler à partir des extraits suivants:
Sélectionnez le
cmdClose
boutonSur la barre de Menu, choisissez
View | Code
Lorsque le curseur clignote, entrez le code suivant:
Sur la barre de Menu, choisissez
View | Object
, pour revenir à l'objet UserForm.Pour permettre aux utilisateurs de fermer le formulaire en appuyant sur la touche Esc:
Sélectionnez le bouton cmdClose
Dans la fenêtre Propriétés, modifiez la
Cancel
propriétéTrue
Pour empêcher les utilisateurs de fermer le formulaire en cliquant sur le bouton X
Lorsque le
UserForm
est ouvert, il y a unX
en haut à droite. En plus de l'aide du bouton Fermer le Formulaire, les gens seront en mesure de fermer le formulaire en utilisant le X. Si vous voulez éviter cela, suivez ces étapes.Cliquez-droit sur une partie vide de l'objet UserForm
Choisissez
View | Code
De la Procédure de la liste déroulante en haut à droite, choisissez QueryClose
Où le curseur clignote, collez le code mis en surbrillance à partir de l'exemple suivant
Sur la barre de Menu, choisissez
View | Object
, pour revenir à l'objet UserForm.Maintenant, si quelqu'un clique sur le
X
dans l'UserForm, ils vont voir votre message.de http://www.contextures.com/xlUserForm01.html
OriginalL'auteur JustinJDavies
J'ai trouvé la contribution de Justin Davies plutôt utile: Si vous remplacez la ligne
avec
l'objet est masqué à l'écart de l'utilisateur, mais toujours actif jusqu'à ce qu'il est déchargé.
OriginalL'auteur Peter Balzer
C'est une amélioration de la réponse ci-dessus de @Pierre Albert
FindWindow
appel a été amélioré afin de trouver Excel UserForms. La fonction dans l'original de la réplique de recherches chaque classe de fenêtre (par exemple, l'Explorateur de windows et d'autres programmes de windows). Par conséquent, il peut arriver que le bouton [x] d'autres programmes ou de l'explorateur de windows ont été supprimés lorsque leur nom est le même nom que l'objet UserForm.OriginalL'auteur Pᴇʜ
Demander à l'utilisateur si ils veulent fermer la forme et perdre des modifications (par exemple).
Basé sur les idées de Justin & Peter.
Edit: en Fait je sais que c'est un peu hors sujet, que l'OP voulait supprimer l'option X - mais tout de même je trouve cette pratique pour les formulaires interactifs.
OriginalL'auteur Richard Briggs
Je sais que c'est une vieille question, mais pour le type de formulaire utilisateur de l'OP cité, vous n'avez pas à supprimer, masquer ou de désactiver le bouton de fermeture. Il y a un moyen beaucoup plus simple 😉
Pour n'importe quel utilisateur de la forme qui n'ont pas tous les éléments dont l'utilisateur interagit avec (boutons, etc) et qui prendra fin en lui-même, quand il a terminé son but, il suffit de désactiver la forme est très bien.
Pour désactiver le formulaire utilisateur:
Dans le formulaire utilisateur propriétés, à l'encontre de Permis de définir la valeur False. L'utilisateur formulaire s'affichera jusqu'à ce que le code lui dit de se cacher. L'utilisateur ne sera pas en mesure de faire quelque chose de la forme (ne peut pas fermer, ne peut pas se déplacer, etc).
Notez également que si vous voulez que l'utilisateur soit capable de faire autre chose dans la fenêtre principale, tandis que le formulaire utilisateur est toujours à l'affiche décide si vous définissez ShowModal.
OriginalL'auteur brit0n
Un moyen utile de désactiver le bouton pour effectuer les opérations suivantes:
Bien que ce n'est pas se débarrasser de la touche, mais il n'en cliquant sur ce rien accomplir.
OriginalL'auteur Gravity Grave
Vérifier le lien suivant. Il a travaillé pour moi. Il supprime la barre de titre de l'objet UserForm.
https://social.msdn.microsoft.com/Forums/office/en-US/17452849-598c-410b-8675-b1e585d0e7e7/userform-without-titlebar-and-borders?forum=exceldev
OriginalL'auteur Rahul Varadkar