Genel Bakış
Show (UserForm.Show), bir kullanıcı formunu belleğe yükleyip ekranda görüntüleyen yöntemdir. Form henüz yüklenmemişse Excel onu otomatik olarak yükler. İsteğe bağlı bağımsız değişkeniyle formun modal mı yoksa modless mı açılacağını belirler.
Parametre:
Formun kipi, Visual Basic Düzenleyicisi'nde (VBE) form seçiliyken Özellikler penceresindeki ShowModal özelliğiyle de belirlenebilir. Show çağrısında verilen Modal değeri bu ayarı geçersiz kılar.
Bir modal form ekrandayken başka bir formu modless açmaya çalışırsanız 401 numaralı hata alırsınız. Formu konumlandırmak için StartUpPosition özelliğini kullanın.
Formu kapatmanın iki yolu vardır:
Yüklü form sayısını VBA.UserForms.Count ile denetleyebilirsiniz.
PersonelFormunuAc makrosunda E1 hücresine yazan satır, form kapanana kadar çalışmaz. FormuModlessAc makrosunda ise form ekrandayken bile hemen çalışır ve sayfada çalışmaya devam edebilirsiniz. İki makro arasındaki fark, Show satırının beklemesiyle ilgilidir.
Makro çalıştıktan sonra C2 hücresinde vbModal için 1, C3 hücresinde vbModeless için 0 değeri görünür. Dolayısıyla Show vbModeless ile Show 0 aynı anlama gelir.
Makro B2 hücresine yüklü form sayısını (0) yazar, B3 hücresine ise buna uygun açıklamayı koyar: Yüklü form yok; Show formu yükleyip gösterir. Formlar kapatılmadan bellekte kalmışsa bu sayı sıfırdan büyük olur.
Söz dizimi
Yöntem bir UserForm nesnesi üzerinde çağrılır. Form adı üzerinden ya da form içinden Me ile kullanılabilir:
VBA
3 satır
UserForm1.Show
UserForm1.Show vbModeless
UserForm1.Show Modal:=False
- Modal: isteğe bağlıdır. Formun kipini belirler; varsayılanı vbModal değeridir.
- vbModal (1): Modal gösterim. Form kapanana kadar kullanıcı Excel'in başka yerine tıklayamaz ve Show satırından sonraki kod çalışmaz.
- vbModeless (0): Modless gösterim. Form açıkken sayfada çalışmaya devam edilebilir ve kod beklemeden sonraki satırla sürer.
Modal ve modless gösterim
Modal kipte Show satırı, form Hide ile gizlenene ya da Unload ile kaldırılana kadar bekler. Bu nedenle kullanıcıdan veri alıp hemen işlemek için en uygun kiptir. Modless kipte form ekranda kalır, çağıran yordam ise sonuna kadar çalışır. Araç çubuğu benzeri, sürekli açık kalan formlarda tercih edilir.Formun kipi, Visual Basic Düzenleyicisi'nde (VBE) form seçiliyken Özellikler penceresindeki ShowModal özelliğiyle de belirlenebilir. Show çağrısında verilen Modal değeri bu ayarı geçersiz kılar.
Bir modal form ekrandayken başka bir formu modless açmaya çalışırsanız 401 numaralı hata alırsınız. Formu konumlandırmak için StartUpPosition özelliğini kullanın.
Yükleme, olay sırası ve kapatma
Show çağrıldığında form yüklü değilse önce Initialize olayı, ardından form görüntülenirken Activate olayı çalışır. Form zaten yüklüyse ve gizliyse yalnızca yeniden görüntülenir; denetimlerdeki değerler korunur.Formu kapatmanın iki yolu vardır:
- Hide: Formu gizler ama bellekte tutar. Denetimlerin değerleri saklanır.
- Unload: Formu bellekten kaldırır. Bir sonraki Show çağrısında form sıfırdan yüklenir.
VBA
3 satır
Dim f As UserForm1
Set f = New UserForm1
f.Show
1. Formu modal ve modless açma
Visual Basic Düzenleyicisi'nde (Alt+F11) Ekle > UserForm (Insert > UserForm) ile UserForm1 adlı bir form ekleyin. Ardından Ekle > Modül (Insert > Module) ile standart modül açıp aşağıdaki kodu yapıştırın. Form açıldığı için bu örnek otomatik çalıştırılmaz; makroları Geliştirici sekmesindeki Makrolar penceresinden deneyin.
VBA
15 satır
Option Explicit
' Modal gösterim: form kapanana kadar sonraki satıra geçilmez
Sub PersonelFormunuAc()
UserForm1.Show
' Form Hide veya Unload ile kapandıktan sonra buradan devam eder
ActiveSheet.Range("E1").Value = "Form kapandı"
End Sub
' Modless gösterim: kod beklemeden devam eder
Sub FormuModlessAc()
UserForm1.Show vbModeless
' Bu satır form ekrandayken hemen çalışır
ActiveSheet.Range("E1").Value = "Form açıldı, kod devam ediyor"
End Sub
Show
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Personel | Departman | Şehir |
| 2 | Ayşe Demir | Muhasebe | Ankara |
| 3 | Mehmet Kaya | Satış | İzmir |
| 4 | Elif Yıldız | İnsan Kaynakları | Bursa |
Personel ListesiExcelDepo v1.0.0
2. Modal ve modless sabitlerinin değerleri
Standart bir modüle aşağıdaki kodu yapıştırın. Makro, Show yönteminin Modal bağımsız değişkeninde kullanılan iki sabitin sayısal değerini C sütununa yazar. Bu örnek form gerektirmez.
VBA
7 satır
Option Explicit
Sub SabitleriYaz()
' Show yönteminin Modal parametresindeki sabitler
Range("C2").Value = vbModal
Range("C3").Value = vbModeless
End Sub
Show
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Sabit | Anlamı | Değer |
| 2 | vbModal | Form kapanana kadar bekler | 1 |
| 3 | vbModeless | Kod beklemeden sürer | 0 |
Sabit DeğerlerExcelDepo v1.0.0
3. Show öncesi yüklü form denetimi
Standart bir modüle aşağıdaki kodu yapıştırın. Makro, VBA.UserForms.Count ile bellekte yüklü form sayısını B2 hücresine yazar ve duruma göre B3 hücresine bir açıklama koyar. Bu denetim, Show çağrısından önce açık form olup olmadığını anlamak için kullanılabilir.
VBA
15 satır
Option Explicit
Sub FormDurumunuYaz()
Dim sayi As Long
' Bellekte yüklü kullanıcı formu sayısı
sayi = VBA.UserForms.Count
Range("B2").Value = sayi
If sayi = 0 Then
Range("B3").Value = "Yüklü form yok; Show formu yükleyip gösterir"
Else
Range("B3").Value = "Yüklü form var; Show gizli formu yeniden gösterir"
End If
End Sub
Show
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Kontrol | Sonuç |
| 2 | Yüklü form sayısı | 0 |
| 3 | Durum | Yüklü form yok; Show formu yükleyip gösterir |
Form DurumuExcelDepo v1.0.0
Kullanırken dikkat edin
- Modal formda kod bekler: Modal açılışta Show satırından sonraki kod, form kapanana kadar çalışmaz. Form sonuçlarını okuyan kodu Show satırından sonra yazın; ancak form Unload ile kaldırıldıysa denetim değerlerine artık ulaşamazsınız. Değerleri okumak için formu Hide ile gizleyin ya da değerleri önce bir genel değişkene aktarın.
- Modless formda sınırlar: Modal bir form ekrandayken Show vbModeless çağırırsanız hata alırsınız. Modless formda çağıran yordam hemen biter; formun sonucunu form içindeki olay yordamlarında işleyin.
- Form adı ve varsayılan örnek: UserForm1.Show formun varsayılan örneğini kullanır; form Hide ile gizlendiyse eski değerler görünür. Her seferinde temiz bir form istiyorsanız Unload kullanın ya da New ile yeni bir örnek oluşturun.
- Çalıştırma ortamı: Form içeren makroları denerken formu ve modülü aynı çalışma kitabında tutun. Kitabı makro içerebilen biçimde (.xlsm) kaydedin; aksi halde form ve kod kaybolur.
- İlgili konular: Load deyimi, Unload deyimi, Hide yöntemi, UserForm nesnesi, Initialize olayı, Activate olayı, ShowModal özelliği, StartUpPosition özelliği, Me anahtar sözcüğü, MsgBox işlevi, InputBox işlevi, Application.Dialogs koleksiyonunun Show yöntemi.