2013-04-11 6 views
5

में एक बटन के रूप में एक एक्सेल उपयोगकर्ताफॉर्म प्रदर्शित करना मैं टास्कबार में एक्सेल बटन को छिपाना चाहता हूं और अपने उपयोगकर्ताफॉर्म के लिए एक अलग बटन प्रदर्शित करना चाहता हूं ताकि यह अपने आप किसी एप्लिकेशन की तरह महसूस हो। मुझे पता है कि इसमें बहुत कुछ शामिल किया गया है लेकिन मुझे एक विशिष्ट समस्या के साथ परेशानी हो रही है: जब मैं इसे चलाता हूं तो मेरा कोड ठीक काम करता है, लेकिन अगर मैं इसे सामान्य रूप से चलाने देता हूं। जब मैं अंतिम पंक्ति AppActivate को 2 एक अलग बटन टास्कबार में दिखाई देता है, और अंतिम पंक्ति में कदम,टास्कबार

Option Explicit 

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 Declare Function DrawMenuBar _ 
    Lib "user32" (_ 
     ByVal hWnd As Long) _ 
As Long 

Private Declare Function FindWindowA _ 
    Lib "user32" (_ 
     ByVal lpClassName As String, _ 
     ByVal lpWindowName As String) _ 
As Long 

Private Const GWL_EXSTYLE = (-20) 
Private Const GWL_STYLE As Long = (-16) 
Private Const WS_EX_APPWINDOW = &H40000 
Private Const WS_SYSMENU As Long = &H80000 
Private Const WS_MINIMIZEBOX As Long = &H20000 
Private Const WS_MAXIMIZEBOX As Long = &H10000 

Private Sub UserForm_Activate() 

Dim lFrmWndHdl As Long 
Dim lStyle As Long 

lFrmWndHdl = FindWindowA(vbNullString, Me.Caption) 
lStyle = GetWindowLong(lFrmWndHdl, GWL_STYLE) 
lStyle = lStyle Or WS_SYSMENU 
lStyle = lStyle Or WS_MINIMIZEBOX 
lStyle = lStyle Or WS_MAXIMIZEBOX 
SetWindowLong lFrmWndHdl, GWL_STYLE, (lStyle) 
lStyle = GetWindowLong(lFrmWndHdl, GWL_EXSTYLE) 
lStyle = lStyle Or WS_EX_APPWINDOW 
SetWindowLong lFrmWndHdl, GWL_EXSTYLE, lStyle 
DrawMenuBar lFrmWndHdl 
AppActivate ("Microsoft Excel") 
ThisWorkbook.Application.Visible = False 

End Sub 

कोड के माध्यम से कदम: यहाँ कोड है, जो मैं Userform1 के वर्ग मॉड्यूल में रखा है टास्कबार में एक्सेल कार्यपुस्तिका के लिए मूल बटन छुपाता है। तब मुझे केवल एक उपयोगकर्ताफॉर्म के साथ छोड़ दिया जाता है जिसे किसी सामान्य एप्लिकेशन की तरह टास्कबार में अधिकतम या छोटा किया जा सकता है। समस्या यह है कि अगर मैं कोड के माध्यम से उपयोगकर्ताफॉर्म लोड करता हूं तो उपयोगकर्ताफॉर्म के लिए अलग बटन टास्कबार में दिखाई नहीं देता है, इसलिए टास्कबार में कोई एक्सेल बटन नहीं दिखता है।

+0

अगर आप '' DoEvents' DrawMenuBar lFrmWndHdl' –

+0

के बाद और भी 'AppActivate (" माइक्रोसॉफ्ट एक्सेल ") के बाद क्या होता है' –

+0

मुझे लगता है कि कोशिश की है। यह मदद नहीं करता है। मैंने application.wait भी कोशिश की है। –

उत्तर

1

मेरे अपने प्रश्न का उत्तर देने के लिए: समस्या ऊपर दिए गए कोड में नहीं थी, लेकिन जिस तरह से उपयोगकर्ताफॉर्म लोड किया गया था। इसे मॉडल के रूप में लोड किया जाना चाहिए।

0

बस अपने मुख्य उपयोगकर्ता Form_Initialize उप में निम्न कोड डालें और यह डेस्कटॉप पर अपना फॉर्म खोलते समय एक्सेल एप्लिकेशन विंडो को कम करेगा।

Private Sub minimizeWindow() 
    With Application 
    .WindowState = xlMinimized 
    End With 
End sub 
+0

यह अभी भी टास्कबार में एक्सेल ऐप प्रदर्शित करेगा। मैं इसे छिपाना चाहता था। –

संबंधित मुद्दे