Excel’de Makrolar

excel_icon1Bugün Excel’de makro yazmam gerekti. Daha önce VB ile çalıştığım için basit olacağını düşündüm ve hızla başladım. Açıkçası, standart VB kodlaması yaptım. Tek fark, Excel kontrollerine erişmedeki değişikliklerdi. Biraz onlardan bahsetmek istiyorum.

Makrolarımızı yazarken; istersek her sayfanın kendine ait olan kod bloğuna yazabiliyoruz, istersek de modüller oluşturarak global fonksiyonlar hazırlayabiliyoruz.

macro1

Sheets(“SAYFA ADI”).Cells(SATIR NUMARASI, SUTUN NUMARASI).Value ile, hem istediğimiz sayfanın içindeki istediğimiz hücrenin değerini alabiliyoruz hem de hücreye yeni değer atayabiliyoruz.

Bu bilgiyi VB6 bilgimizle birleştirerek excel dosyalarını parmağımızın ucunda oynatabiliriz. Benim yaptığım uygulamada basit bir veritabanı sistemi vardı. Şöyle ki:
”Sinemalar” başlıklı sayfada sinema isimleri ve ID’leri bulunuyordu. “Seanslar” başlıklı sayfada ise filmler, gösterimde oldukları sinemalar vesaire bilgiler bulunuyordu. Seanslar sayfasında, sinema başlıklı sütuna fare ile tıklandığında veya klavye ile ilerlendiğinde, içinde bütün sinemalar bulunan bir açılır liste görünüyordu. Bu listeden bir seçim yapıldığında ise, hücreye o sinemaya ait ID yazılıyordu. Tekrar bu ID’ye tıklandığında ise açılır liste tekrar, eldeki ID bilgisine karşılık gelen sinema seçili halde olacak şekilde gösteriliyordu. Kodlar kısaca şöyle:

Sinemalar sayfasına yeni sinema eklendiğinde (veya sayfada herhangi bir değişiklik yapıldığında):

Public Sub SeansSayfasinaSinemaDoldur()
Dim i

On Error Resume Next

Sheets(“seans“).ComboBox2.Clear

For i = 2 To 10000
If Sheets(“sinema”).Cells(i, 1).Value <> “” Then
Sheets(“seans”).ComboBox2.AddItem Sheets(“tbl_sinema”).Cells(i, 3).Value
Sheets(“seans”).ComboBox2.List(i – 2, 1) = Sheets(“tbl_sinema”).Cells(i, 1).Value
Else
Exit For
End If
Next i

Sheets(“tbl_seans”).ComboBox2.Visible = False
End Sub

Burada, for döngüsü ile, bütün sinemalar listeye dolduruluyor. Sinema sayfasındaki dolu satır sayısını almayı beceremediğim için yüksek bir sayıya kadar döngü başlatıyorum ve boş satır yakaladığım zaman döngüden çıkıyorum.

Listeye AddItem fonksiyonu ile eleman eklediğimiz zaman, listede görünen ismi belirlemiş oluyoruz. VB, bize liste oluşturduğu zaman, listenin her elemanı için de 10 boyutlu bir dizi veriyor. Ben buradaki kodda, dizinin 2. elemanına da sinemanın ID’sini yazdım.

Seanslar sayfasında bir sinema seçileceği zaman:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Integer
Sheets(“tbl_seans”).ComboBox2.Visible = False
If Target.Count = 1 And Target.Row > 1 Then
If Target.Column = 3 Then ‘sinema
SeansSayfasinaSinemaDoldur
i = 0
Do While i < ComboBox2.ListCount
If ComboBox2.List(i, 2) <> CStr(Cells(ActiveCell.Row, ActiveCell.Column – 1).Value) Then
ComboBox2.RemoveItem (i)
i = i – 1
End If
i = i + 1
Loop
For i = 0 To ComboBox2.ListCount – 1
If ComboBox2.List(i, 1) = CStr(Cells(ActiveCell.Row, ActiveCell.Column).Value) Then
ComboBox2.ListIndex = i
Exit For
End If
Next i
If ComboBox2.ListIndex <> i Then
ComboBox2.ListIndex = -1
End If
Sheets(“tbl_seans”).ComboBox2.Left = Target.Item(1).Left
Sheets(“tbl_seans”).ComboBox2.Top = Target.Item(1).Top
Sheets(“tbl_seans”).ComboBox2.Visible = True
End If
End If
End Sub

Sayfanın seçili hücresinin değiştiği anda çalışacak yukarıdaki fonksiyon tanımlanıyor.

Biraz karışık anlattığımın farkındayım, bu taslağı hazırlamamın üzerinden uzun bir süre geçti, dolayısıyla yazının içeriği karıştı.

Excel, makro ve VBScript sorularınız için e-mail göndermekten veya burada sormaktan çekinmeyin.

İyi çalışmalar

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>