• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Dosyanın başlık kısmındaki butonları kapatmak

  • Konbuyu başlatan Konbuyu başlatan girdap
  • Başlangıç tarihi Başlangıç tarihi
Katılım
23 Temmuz 2007
Mesajlar
178
Excel Vers. ve Dili
2003 Türkçe
Merhaba,

UserForm üzerindeki Maksimize Minimize kapla ve kapat gibi işlevleri yerine getiren ve başlıkta sağ köşede bulunan butonları iptal etme ya da işlevini engelleme gibi çalışmalar var.

Dosyanın sağ üst köşesinde de aynılarından var. Bunları aynı mantıkla engelleme ya da kaldırma yapılabilmekte midir?

İyi çalışmalar.

Saygılarımla
 
Bunun için çalışma kitabına araçlar-koruma-çalışma kitabını koru-yapı+pencereler den koruma koymanız yeterlidir.
 
Bu konu çözümsüz ise; "çözümü yoktur", şeklinde bana bildirebilirseniz, ben en azından boşuna araştırmaya devam etmemiş olacağım. Bu konuda cevap yazabilirseniz memnun olurum.
iyi çalışmalar
 
Bir önceki mesajımı okuyabilirsiniz.
 
Teşekkür ederim
kolay gelsin.
 
Sayın Leventm
merhaba
Bu arada denedim ama bir değişiklik olmadı neden acaba?
 
Aşağdaki kodu deneyiniz.
Kod:
Sub Düğme1_Tıklat()
CommandBars("Worksheet Menu Bar").Enabled = CommandBars("Worksheet Menu Bar").Enabled = False
End Sub
 
MS Excel'in kendisine ait söz konusu düğmeler de aşağıdaki kodla pasifize edilebilir ama, sonradan nasıl düzeltilir şimdilik bilmiyorum .... :mrgreen:

Ama merak etmeyin, Alt+F4 yapıp dosyayı kapattıktan sonra tekrar açarsanız düzelir ....

Kod:
Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long
Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'
Sub Test()
    Dim MyHandle
    Dim hWnd As Long
    hWnd = FindWindowA(vbNullString, Application.Caption)
    MyHandle = GetSystemMenu(hWnd, 0)
    For i = 6 To 0 Step -1
        Call RemoveMenu(MyHandle, i, &H400)
    Next
End Sub
 
Aşağıdaki kodlarla hem MS Excel'in kendisine ait sağ üst menüleri kullanılmaz hale getirilir hem de gerektiğinde bu menüleri tekrar kullanılabilir hale getirebilirsiniz ....

Kodun kaynağına aşağıdaki linkten ulaşabilirsiniz ....

http://www.mrexcel.com/forum/showthread.php?t=145950

Kod:
Declare Function GetSystemMenu Lib "user32" _
   (ByVal hwnd As Long, ByVal bRevert As Long) As Long
   
Declare Function RemoveMenu Lib "user32" _
    (ByVal hMenu As Long, ByVal nPosition As Long, _
    ByVal wFlags As Long) As Long

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

Const MF_BYPOSITION = &H400
Const strXLClass As String = "XLMAIN"

Dim hWndXL As Long
'
Sub Remove_X_Button2()
    hWndXL = FindWindowA(strXLClass, vbNullString)
    For i = 6 To 0 Step -1
        RemoveMenu GetSystemMenu(hWndXL, 0), i, MF_BYPOSITION
    Next
End Sub
'
Sub Reset_X_Button2()
    GetSystemMenu hWndXL, True
End Sub
 
Declare Function GetSystemMenu Lib "user32" _
(ByVal hwnd As Long, ByVal bRevert As Long) As Long

Declare Function RemoveMenu Lib "user32" _
(ByVal hMenu As Long, ByVal nPosition As Long, _
ByVal wFlags As Long) As Long

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

Const MF_BYPOSITION = &H400
Const strXLClass As String = "XLMAIN"


Sayın Haluk

Merhaba,

Yukardaki alanları kabul etmiyor. Çünkü benze kodlamalar UserFormların üst başlık butonlarının düzenlenmesi için kullanılmıştı. Çakıştığı için bunları ThisWorkbook'a ne de Form üzerine bunları aktaramıyorum.

Bir çözüm var mı bu yönde?
 
Eğer UserForm modulünde bu satırların aynıları varsa, UserForm modulünden silin. Yukarıdaki kodları da boş yeni bir module kopyalayıp oradan çalıştırın.
 
Aslında aynıları tipe tip değil ama User32 ler tabiki. Bunları silersem,UserFormun bu konuda %100 gerekli işlevlerini yitirmiş olmam mı? Sonuçta UserFormun Minimize Maksimize ve Kapatma düğmelerinin yönetimi gerekiyor burası için. Ben mi anlayamadım sizi ama..?
 
Bunlar var.

Private Declare Function FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib "user32" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "user32" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
 
Sayın Haluk,

Sistem konusunda ki bilgilerinizden gururla yararlanıyorum, teşekkürler... Ancak yukarıda verdiğiniz kodlar Excel 2007 de çalışmıyormu? Dediğiniz gibi kodları bir modüle yazıp, program içinde çağırdım ve program çıkışında da;

GetSystemMenu hWndXL, True

ile resetledim ama userform dan normal excel sayfasına çıkış yapılıp geri Userform a dönülen programımda excel sayfasında menüler engellenmedi..

Saygılarımla,
 
...... Userform a dönülen programımda excel sayfasında menüler engellenmedi..

Aslında söz konusu olan Excel'in sistem menüleridir. Yani, ekranın sağ üst köşesinde yer alan - [] X işaretlerinin yer aldığı küçük düğmelerdir.

Diğer bir deyişle; Excel'in en üstünde mavi renkli başlık çubuğunda sağ tıkladığınızda veya sol üst köşedeki Excel'in simgesi üzerinde sol tıkladığınızda çıkan menülerdir, sistem menüleri.

Bende 2007 versiyonu olmadığı için, kodların uyumu hakkında bir yorum yapamayacağım.

Saygı bizden...

.
 
sn haluk hocam aşiağıdaki kodlarınızı bende denedim
excel başlığındaki X butonunu kullanılır/kullanılmaz yapıyor. kaldırmıyor sorun bendemi acaba excel 2003 kullnıyorum

Kod:
Declare Function GetSystemMenu Lib "user32" _
   (ByVal hwnd As Long, ByVal bRevert As Long) As Long
   
Declare Function RemoveMenu Lib "user32" _
    (ByVal hMenu As Long, ByVal nPosition As Long, _
    ByVal wFlags As Long) As Long

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

Const MF_BYPOSITION = &H400
Const strXLClass As String = "XLMAIN"

Dim hWndXL As Long
'
Sub Remove_X_Button2()
'Excel Kapat Düğmesini Pasif konuma getirir.
    hWndXL = FindWindowA(strXLClass, vbNullString)
    For i = 6 To 0 Step -1
        RemoveMenu GetSystemMenu(hWndXL, 0), i, MF_BYPOSITION
    Next
End Sub
'
Sub Reset_X_Button2()
''Excel Kapat Düğmesini Aktif konuma getirir.
    GetSystemMenu hWndXL, True
End Sub
 
sn haluk hocam aşiağıdaki kodlarınızı bende denedim
excel başlığındaki X butonunu kullanılır/kullanılmaz yapıyor. kaldırmıyor sorun bendemi acaba excel 2003 kullnıyorum

Sorun sizde değil, RemoveMenu API'nin özelliği bu şekilde.
 
cevabınız için teşekkür ederim.
 
Geri
Üst