NS Kurs Rezervasyon Formu UserForm tasarımının ilkelerini ve ilgili VBA kodlamasını gösteren basit bir formdur.
Metin kutuları, birleşik giriş kutuları, bir çerçevede gruplandırılmış seçenek düğmeleri, onay kutuları ve komut düğmeleri dahil olmak üzere bir dizi kontrol kullanır.
Kullanıcı Tamam düğmesini tıkladığında, girdileri çalışma sayfasındaki bir sonraki uygun satıra girilir.
Excel formunun açıklaması:
İki basit metin kutusu vardır (İsim: ve Telefon:) kullanıcının serbest metin yazabileceği ve iki birleşik giriş kutusu (departman ve Kurs) kullanıcının listeden bir öğe seçmesine izin verir.
Üç seçenek düğmesi vardır (Tanıtım, Orta düzey ve ileri) bir çerçevede gruplandırılmış (Seviye) böylece kullanıcı seçeneklerden yalnızca birini seçebilir.
İki onay kutusu vardır (Öğle Yemeği Gerekli ve Vejetaryen) bir çerçeve içinde gruplanmadıkları için gerektiğinde her ikisi de seçilebilir. Ancak rezervasyonu yapan kişi öğle yemeği yemek istemiyorsa vejetaryen olup olmadığını bilmemize gerek yoktur. Böylece Vejetaryen onay kutusu gerekli olana kadar grileşir.
Üç komut düğmesi vardır (Tamam, İptal ve Formu Temizle) her biri tıklandığında önceden tanımlanmış bir işlevi yerine getirir.
Kontrol Özellikleri Ayarları:
Kontrol | Tip | Mülk | Ayar |
Kullanıcı Formu | Kullanıcı Formu | İsim | frmKursRezervasyonu |
Altyazı | Kurs Rezervasyon Formu | ||
İsim | Metin kutusu | İsim | txtAdı |
Telefon | Metin kutusu | İsim | txtTelefon |
departman | Açılan kutu | İsim | cboDepartment |
Kurs | Açılan kutu | İsim | cboCourse |
Seviye | Çerçeve | İsim | fraLevel |
Altyazı | Seviye | ||
Tanıtım | Seçenek tuşu | İsim | optGiriş |
Orta düzey | Seçenek tuşu | İsim | optIntermediate |
ileri | Seçenek tuşu | İsim | optGelişmiş |
Öğle Yemeği Gerekli | Onay Kutusu | İsim | chkÖğle yemeği |
Vejetaryen | Onay Kutusu | İsim | chkVejetaryen |
Etkinleştirilmiş | YANLIŞ | ||
Tamam | Komut Düğmesi | İsim | cmdTamam |
Altyazı | Tamam | ||
Varsayılan | NS | ||
İptal | Komut Düğmesi | İsim | cmdİptal |
Altyazı | İptal | ||
İptal | NS | ||
Formu Temizle | Komut Düğmesi | İsim | cmdTemizleForm |
Excel'de Form Oluşturma
Formu kendiniz oluşturmak istiyorsanız, yukarıdaki resimde gösterilen düzeni kopyalamanız yeterlidir. Aşağıdaki adımları takip et:
1. Formun ait olmasını istediğiniz çalışma kitabını açın (makrolar gibi KullanıcıFormları çalışma kitabına eklenmelidir) ve Visual Basic Düzenleyicisine geçin.
2. Visual Basic Düzenleyicisi'nde Kullanıcı Formu Ekle düğmesine (veya Ekle > Kullanıcı Formu).
3. Araç kutusu kendi kendine görünmüyorsa (önce formun gizlenmediğinden emin olmak için formu tıklayın) araç kutusu düğmesine (veya Görünüm > Araç Kutusu).
4. Forma bir kontrol yerleştirmek için araç kutusundaki uygun düğmeyi ve ardından formu tıklayın. Kontroller kenarlarından sürüklenerek hareket ettirilebilir veya çevrelerindeki düğmeler sürüklenerek yeniden boyutlandırılabilir.
5. Bir kontrolün özelliklerini düzenlemek için, seçilen kontrolün seçili olduğundan emin olun ve ardından kontrol panelinde uygun değişiklikleri yapın. Özellikler pencere. Özellikler penceresini göremiyorsanız şuraya gidin: Görünüm > Özellikler Penceresi.
6. Formdan bir denetimi kaldırmak için onu seçin ve Silmek klavyenizdeki tuşa basın.
Bir UserForm, formu çalıştıran kod ve çeşitli kontrolleri oluşturulana kadar aslında hiçbir şey yapmaz. Bir sonraki adım, formun kendisini çalıştıran kodu yazmaktır.
Kodu Ekleme: 1 Formu Başlatma
Formu Başlatma:
Çoğu form açıldıklarında bir tür ayar gerektirir. Bu, varsayılan değerleri ayarlamak, alanın boş olduğundan emin olmak veya birleşik giriş kutuları listelerini oluşturmak olabilir. Bu süreç denir Formu Başlatma ve UserForm_Initialize adlı bir makro tarafından halledilir ("initialis(z)e" kelimesinin farklı yazımıyla kafanız karışırsa, bunun nedeni İngilizce konuşmam ve VBA'nın Amerikan konuşmasıdır - ama endişelenmeyin, VBA sizin için heceleyin!). Kurs Rezervasyon Formunu başlatmak için kodu nasıl oluşturacağınız aşağıda açıklanmıştır:
1. Formun kod penceresini görüntülemek için Görünüm > Kod veya tıklayın F7.
2. Kod penceresi ilk açıldığında boş bir UserForm_Click() prosedür. Seçmek için kod penceresinin üst kısmındaki açılır listeleri kullanın. Kullanıcı Formu ve başlat. Bu, ihtiyacınız olan prosedürü yaratacaktır. Artık UserForm_Click() prosedürünü silebilirsiniz.
3. Prosedüre aşağıdaki kodu girin:
Private Sub UserForm_Initialize() txtName.Value = "" txtPhone.Value = "" cboDepartment ile .AddItem "Satış" .AddItem "Pazarlama" .AddItem "Yönetim" .AddItem "Tasarım" .AddItem "Reklam" .Add" AddItem "Transportation" cboDepartment.Value ile Bitir = "" cboCourse ile .AddItem "Access" .AddItem "Excel" .AddItem "PowerPoint" .AddItem "Word" .AddItem "FrontPage" ile Bitir cboCourse.Value = "" optIntroduction = "" optIntroduction chkLunch = Yanlış chkVegetarian = Yanlış txtName.SetFocus End Sub
Başlatma Kodu Nasıl Çalışır:
UserForm_Initialize() prosedürünün amacı, kullanıcı formunu VBA'da kullanıma hazırlamak, çeşitli kontroller için varsayılan değerleri ayarlamak ve birleşik giriş kutularının göstereceği listeleri oluşturmaktır.
Bu satırlar, iki metin kutusunun içeriğini boş olarak ayarlar:
txtName.Value = "" txtPhone.Value = ""
Ardından, açılan kutular için talimatlar gelir. Önce listenin tüm içeriği belirtilir, ardından açılan kutunun başlangıç değeri boş olarak ayarlanır.
cboDepartment ile .AddItem "Sales" .AddItem "Pazarlama" (gerektiği kadar… ) Şununla Bitirin
cboDepartment.Value = ""
Gerekirse, seçenek grubundan bir başlangıç seçimi yapılabilir, bu durumda:
optIntroduction = Doğru
Her iki onay kutusu da False (yani onay yok) olarak ayarlanmıştır. Onay kutusunun önceden işaretli görünmesini istiyorsanız True olarak ayarlayın:
chkLunch = Yanlış
chkVejetaryen = Yanlış
Son olarak, odak ilk metin kutusuna alınır. Bu, kullanıcıların imleci metin kutusuna yerleştirir, böylece yazmaya başlamadan önce kutuyu tıklatmalarına gerek kalmaz:
txtName.SetFocus
Kodu Ekleme: 2 Düğmeleri Çalıştırma
Formda üç komut düğmesi vardır ve her birinin kendi prosedürüyle çalıştırılması gerekir. Basit olanlardan başlayarak…
İptal Butonunun Kodlanması:
Daha önce, özellikleri ayarlamak için Özellikler Penceresini kullandık. İptal İptal düğmesinin özelliği NS. Bir komut düğmesinin İptal özelliğini True olarak ayarladığınızda, bu, kullanıcı düğmeye bastığında o düğmeyi "tıklatma" etkisine sahiptir. ESC klavyelerindeki tuşa basın. Ancak bu tek başına forma bir şey olmasına neden olmaz. Bu durumda formu kapatacak olan butonun click olayı için kod oluşturmanız gerekir. İşte nasıl:
1. Visual Basic Düzenleyicisi'nde düzenleme için açık olan UserForm ile İptal düğmesine çift tıklayın. Formun kod penceresi şu şekilde açılır: cmdİptal_Click() düzenleme için hazır prosedür.
2. Bir formu kapatma kodu çok basittir. Prosedüre bir kod satırı ekleyin, böylece şöyle görünecek:
Private Sub cmdCancel_Click() Unload Me End Sub
Formu Temizle Butonunun Kodlanması:
Kullanıcının fikrini değiştirmek ve her şeyi sıfırlamak istemesi durumunda formu temizlemek ve aynı anda birden fazla rezervasyon yapmalarını kolaylaştırmak için bir düğme ekledim. Tek yapması gereken, Başlatma prosedürünü yeniden çalıştırmaktır. Bir makroya, başka bir makroyu (veya gerekirse bir dizi makroyu) şu komut kullanılarak çalıştırması söylenebilir: Telefon etmek anahtar kelime:
1. Formu Temizle düğmesine çift tıklayın. Formun kod penceresi şu şekilde açılır: cmdClearForm_Click() düzenleme için hazır prosedür.
2. Prosedüre aşağıdaki gibi görünmesi için bir kod satırı ekleyin:
Özel Alt cmdClearForm_Click() UserForm_Initialize End Sub'ı Çağır
OK Butonunun Kodlanması:
Bu, kullanıcının seçimlerini ve metin girişini çalışma sayfasına aktarma işini yapması gereken kod parçasıdır. İptal düğmesinin İptal özelliğini True olarak ayarladığımızda, Tamam düğmesinin özelliklerini de ayarlamış oluyoruz. Varsayılan mülk NS. Bu, kullanıcı düğmeye bastığında Tamam düğmesine tıklamayı içerir. Girmek (veya Dönüş) tuşlarını kullanarak (kullanmadıkları takdirde) Sekme başka bir düğmeye sekme tuşu). Düğmenin çalışmasını sağlamak için kod:
1. Tamam düğmesine çift tıklayın. Formun kod penceresi şu şekilde açılır: cmdOK_Click() düzenleme için hazır prosedür.
2. Aşağıdaki kodu eklemek için prosedürü düzenleyin:
Private Sub cmdOK_Click() ActiveWorkbook.Sheets("Ders Rezervasyonları").Activate Range("A1").Do If IsEmpty(ActiveCell) = FalseThen ActiveCell.Offset(1, 0) seçeneğini seçin. = True ActiveCell.Value = txtName.Value ActiveCell.Offset(0, 1) = txtPhone.Value ActiveCell.Offset(0, 2) = cboDepartment.Value ActiveCell.Offset(0, 3) = cboCourse.Value If optIntroduction = True Then ActiveCell.Offset(0, 4).Value = "Giriş" ElseIf optIntermediate = True Then ActiveCell.Offset(0, 4).Value = "Intermed" Diğer ActiveCell.Offset(0, 4).Value = "Adv" End If Eğer chkLunch = True ise ActiveCell.Offset(0, 5).Value = "Evet" Başka ActiveCell.Offset(0, 5).Value = "Hayır" ise Bitir chkVegetarian = True ise ActiveCell.Offset(0, 6). Değer = "Evet" Else If chkLunch = False O zaman ActiveCell.Offset(0, 6).Value = "" Başka ActiveCell.Offset(0, 6).Value = "Hayır" Eğer End If Range("A1"). End Sub'ı seçin
CmdOK_Click kodu nasıl çalışır:
İlk iki satır, doğru çalışma kitabının etkin olduğundan emin olur ve seçimi A1 hücresine taşır:
ActiveWorkbook.Sheets("Course Bookings").Activate Range("A1").Select Sonraki birkaç satır, seçimi boş bir hücre bulana kadar çalışma sayfasında aşağı taşır: Do If IsEmpty(ActiveCell) = False Then ActiveCell.Offset(1 , 0).IsEmpty(ActiveCell) = True olana Kadar Döngüyü Bitir'i seçin
Sonraki dört satır, aktif hücreyi (A sütununda olan) referans olarak kullanarak ve hareket ederek formun içeriğini çalışma sayfasına yazmaya başlar. satır boyunca bir seferde bir hücre:
ActiveCell.Value = txtName.Value ActiveCell.Offset(0, 1) = txtPhone.Value ActiveCell.Offset(0, 2) = cboDepartment.Value ActiveCell.Offset(0, 3) = cboCourse.Value
Şimdi seçenek butonlarına geliyoruz. Bunlar, kullanıcının yalnızca birini seçebilmesi için form üzerinde bir çerçeveye yerleştirilmiştir. Excel'e her seçenek için ne yapacağını bildirmek için bir EĞER ifadesi kullanılır:
Eğer optIntroduction = True ise ActiveCell.Offset(0, 4).Value = "Intro" ElseIf optIntermediate = True Then ActiveCell.Offset(0, 4).Value = "Intermed" Diğer ActiveCell.Offset(0, 4).Value = "Adv" Bitiyorsa
VBA EĞER deyimlerini yönetmek, Excel'in EĞER işlevinden çok daha kolaydır. İstediğiniz kadar seçeneğe sahip olabilirsiniz, sadece ek bir tane ekleyin ElseIf her biri için. Sadece iki seçenek olsaydı, ElseIf, sadece Eğer ve Başka yeterli olur (unutmayın - hepsinin bir Bitir).
Her onay kutusu için başka bir EĞER ifadesi vardır. Öğle Yemeği Gerekli onay kutusu için, kutudaki bir işaret, kişinin öğle yemeği istediğini "Evet" anlamına gelir ve işaret olmaması, "Hayır" istemediği anlamına gelir.
chkLunch = True ise ActiveCell.Offset(0, 5).Value = "Evet" Else ActiveCell.Offset(0, 5).Value = "Hayır" End If
Vejetaryen onay kutusu için benzer bir EĞER ifadesi kullanabiliriz, ancak kişinin öğle yemeğine ihtiyacı yoksa vejetaryen olup olmamasının bir önemi yoktur. Her halükarda, sadece öğle yemeğine ihtiyaçları olmadığı için vejeteryan olmadıklarını varsaymak yanlış olur. EĞER ifadesi bu nedenle ikinci bir iç içe if ifadesi içerir:
Eğer chkVegetarian = True ise ActiveCell.Offset(0, 6).Value = "Evet" Else chkLunch = False ise ActiveCell.Offset(0, 6).Value = "" Else ActiveCell.Offset(0, 6).Value = "Hayır" Bitiyorsa Bitiyorsa
Kutudaki bir işaret, kişinin vejeteryan olduğu "Evet" anlamına gelir. Kutuda işaret yoksa, iç içe EĞER ifadesi Lunch Required onay kutusuna bakar. Öğle Yemeği Gerekli onay kutusunda bir onay işareti varsa, Vejetaryen onay kutusundaki işaretin olmaması, kişinin vejetaryen olmadığı anlamına gelir ve bu nedenle hücreye "Hayır" girer. Ancak, Lunch Required (Öğle Yemeği Gerekli) onay kutusunun içinde bir onay işareti yoksa, kişinin vejeteryan olup olmadığını bilemeyiz (zaten önemli değil) bu nedenle hücre boş bırakılır ("").
Son olarak seçim, bir sonraki giriş için hazır olarak çalışma sayfasının başına geri alınır:
Aralık("A1").Seçin
Kodu Ekleme 3: Formu Değiştirme
Son olarak, bir formdaki kontrollerin kullanımdayken nasıl değiştirilebileceğine dair bir örnek. Kontrol özellikleri ayarlandığında, Etkinleştirilmiş Vejetaryen onay kutusunun özelliği olarak ayarlandı YANLIŞ. Bir kontrol etkinleştirilmediğinde, kullanıcı zaten var olan bir değeri tutabilmesine rağmen içine bir değer giremez ve VBA değeri ekleyebilir, kaldırabilir veya değiştirebilir.
Öğle yemeği ısmarlamıyorsa, kişinin vejeteryan olup olmadığını (olsalar bile!) bilmemize gerek yoktur. Bu nedenle, Öğle Yemeği Gerekli onay kutusuna bir onay işareti konmadıkça Vejetaryen onay kutusu devre dışı kalır. Daha sonra kullanıcı isterse Vejetaryen onay kutusunu işaretlemekte özgürdür. İşaretlerlerse, "Evet" yanıtını verdiklerini anlarız ve yapmazlarsa "Hayır" yanıtını verdiklerini biliriz.
geçiş yapabiliriz Etkinleştirilmiş mülk YANLIŞ ile NS Öğle Yemeği Gerekli onay kutusunun değeri değiştiğinde otomatik olarak çalışan bir prosedüre sahip olarak. Neyse ki, daha fazla kontrol Değiştirmek prosedür ve burada kullandığımız chkLunch_Change(). Bunu, Öğle Yemeği Gerekli onay kutusu işaretlendiğinde Vejetaryen onay kutusunu etkinleştirmek ve Öğle Yemeği Gerekli onay kutusu işaretlenmediğinde devre dışı bırakmak için kullanacağız.
Yapmamız gereken bir şey daha var. Birinin Öğle Yemeği Gerekli onay kutusunu ve ayrıca Vejetaryen onay kutusunu işaretlediğini varsayalım. Sonra fikirlerini değiştirdiler ve Öğle Yemeği Gerekli onay kutusundaki işareti kaldırdılar. Vejetaryen onay kutusu devre dışı bırakılır, ancak daha önce konulan onay işareti kalır.
Fazladan bir kod satırı, kutu devre dışı bırakıldığında onay işaretinin kaldırılmasını sağlayabilir. İşte her şey:
Private Sub chkLunch_Change() Eğer chkLunch = True ise chkVegetarian.Enabled = True Else chkVegetarian.Enabled = False chkVegetarian = False End If End Sub
Formu Açma
Form artık kullanıma hazırdır, bu nedenle basit bir makro ile açılması gerekir. Bu, özel bir araç çubuğu düğmesine, çalışma sayfasında çizilen bir komut düğmesine veya herhangi bir grafiğe eklenebilir (grafiğe sağ tıklayın ve Makro Ata). Gerekirse, çalışma kitabı için yeni bir modül oluşturun ve şu prosedürü ekleyin:
Sub OpenCourseBookingForm() frmCourseBooking.Show End Sub
Bloglarımızı beğendiyseniz, Facebook'ta arkadaşlarınızla paylaşın. Ayrıca bizi Twitter ve Facebook'ta da takip edebilirsiniz.
Sizden haber almayı çok isteriz, işimizi nasıl iyileştirebileceğimizi, tamamlayabileceğimizi veya yenileyebileceğimizi ve sizin için daha iyi hale getirebileceğimizi bize bildirin. Bize e-posta sitesinde yazın