Tablo seçme ve tabloya değer aktarma


Tablo Ekleme, Silme ve Tabloya Veri Aktarma İşlemleri

Merhaba, daha sizlerler belgemize yeni bir tablo ekleme ve bu tabloya veri yükleme işlemini ele almıştık bu defa da belgemizde yer alan herhangi bir tabloyu seçerek ona veri aktarma işlemini ele alacağız. İsterseniz hemen başlayalım.

  1. Öncelikle yeni bir belge açıyor ve makro güvenlik düzeyini düşük olarak ayarlıyoruz. Nasıl yapılacağını hatırlamak için bu bağlantıyı kullanabilirsiniz.
  2. Sonrasında aşağıda verilen ekran tasarımını yapıyor ve burada belirtilen nesnelerin name ve Caption özelliklerini ayarlıyorsunuz. Bu defaki çalışmamızda belgemizdeki tabloları listelemek için bir adet ComboBox yani açılan kutu ve diğer işlemler için de 4 adet CommandButton nesnesi eklemeniz gerekiyor.

  1. Belgemize farklı satır sütun sayısına sahip bir kaç tablo ekleyin. Ben satır X sütun şeklinde ifade edecek olursak, 2x4, 3x3, 4x4 ve 5x7 boyutlarında belgeye 4 adet tablo ekledim. Elbette siz bu konuda özgürsünüz istediğiniz boyutlarda ve istediğiniz sayıda tablo ekleyebilirsiniz.
  2. Sonrasında Alt + F11 ile ekrana gelen VBA kod düzenleyicisi ekranında aşağıda verilen kodları yazıyor belgemizi kaydediyoruz. Belgemizi kapatıp yeniden açıyor ve yaptıklarımızı test ediyoruz. Fakat ben doğrudan test etmek istiyorum diyen arkadaşlar kaynak dosyayı indirebilirler.

Kodlarla ilgili bir kaç küçük açıklama yapmakta fayda görüyorum. Öncelikle Word, belgenize eklediğiniz ya da ekleyeceğiniz her tabloyu 1 den başlayarak indeksler. Siz de tablolara erişirken bu indeks numarasından yararlanırsınız. Belgedeki tüm tablolar tables() nesne grubunun bir üyesidir. Örneğin belgeye ilk eklenen tablo ThisDocument.Tables(1) iken son eklenen tablo ThisDocument.Tables(ThisDocument.Tables.Count) olacaktır. Burada ThisDocument.Tables.Count belgenizdeki tablo sayısını verir. Benzer biçimde:
  Belgeye ilk eklenen tablodaki satır sayısı  = ThisDocument.Tables(1).Rows.Count
  Belgeye ilk eklenen tablodaki sütunsayısı  = ThisDocument.Tables(1).Columns.Count
  Belgeye ilk eklenen tablodaki 5. satır 3. sutundaki hücre verisi= ThisDocument.Tables(1).Cell(5, 3).Range.Text şeklinde özetlenebilir.

Kaynak Kodlar :


'tanimlanmayan degiskenlerin kullanimasina izin verme
Option Explicit
Dim tablo As Table
Private Sub btnCikis_Click()
'1. Acik belgeyi kaydetmeden cik
    Application.Quit wdDoNotSaveChanges
'2. Acik belgeyi kaydet ve  cik
'    Application.Quit wdSaveChanges
End Sub
Private Sub btnListele_Click()
Dim sayac As Integer
    With ThisDocument
        'acilan kutu temizleniyor
        ComboBox1.Clear
        .Paragraphs(1).Range.InsertAfter "Bu belgede toplam" & Str(.Tables.Count) & " adet tablo var." & vbCrLf
        For sayac = 1 To .Tables.Count
           .Paragraphs(1).Range.InsertAfter Str(sayac) & _
           ".tablonun satır sayısı = " & .Tables(sayac).Rows.Count & _
            ", sütun sayısı = " & .Tables(sayac).Columns.Count & vbCrLf
            'acilan kutuya tablo adlari ekleniyor
            ComboBox1.AddItem "Tablo-" & Trim(Str(sayac))
        Next
        'eğer açılan kutuda eleman varsa ilk eleman seçiliyor.
        If ComboBox1.ListCount > 0 Then ComboBox1.ListIndex = 0
    End With
End Sub

Private Sub btnTemizle_Click()
Set tablo = ThisDocument.Tables(ComboBox1.ListIndex + 1)
If ComboBox1.ListCount > 0 Then
    ThisDocument.Range(tablo.Cell(1, 1).Range.Start, 
_tablo.Cell(tablo.Rows.Count, tablo.Columns.Count).Range.End).Select
    Selection.Delete
End If
End Sub

Private Sub btnVeriYukle_Click()
Dim satir, sutun As Integer
'Bilgisayarın ürettiği saat sinyali yenileniyor.
Randomize
With ThisDocument
    If ComboBox1.ListCount > 0 Then
        For satir = 1 To Tables(ComboBox1.ListIndex + 1).Rows.Count
            For sutun = 1 To Tables(ComboBox1.ListIndex + 1).Columns.Count
                .Tables(ComboBox1.ListIndex + 1).Cell(satir, sutun).Range.Select
                Selection.Delete
                .Tables(ComboBox1.ListIndex + 1).Cell(satir, sutun).Range.InsertAfter Round(Rnd * 100 + 1)
            Next
        Next
    Else
        .Content.Font.ColorIndex = wdRed
        .Content.InsertAfter "Belgede veri yüklenecek tablo bulunamadı."
        ThisDocument.Paragraphs(ThisDocument.Paragraphs.Count).Range.Select
    End If
End With
End Sub


Yardımcı olması dileğiyle