Özellik ikonu

ExecuteExcel4Macro

İndirme izni yok

Genel Bakış

ExecuteExcel4Macro (Application yöntemi), eski Excel 4.0 (XLM) makro dilindeki bir işlevi ya da formülü metin olarak alıp çalıştıran ve sonucunu döndüren yöntemdir. VBA'nın doğrudan sunmadığı GET.CELL, GET.WORKBOOK gibi bilgi işlevlerine ulaşmak için kullanılır. Ayrıca R1C1 biçimindeki başvurularla hücre değeri okumak için de işe yarar.

Söz dizimi​

Yöntem Application nesnesine aittir. Standart modülde doğrudan ExecuteExcel4Macro yazmanız da yeterlidir.

VBA
sonuc = Application.ExecuteExcel4Macro(String)

  • String: Zorunludur. Çalıştırılacak Excel 4.0 makro işlevi ya da formülü metin olarak verilir. Başına eşittir işareti konmaz. Başvurular A1 değil R1C1 biçiminde yazılır. Metin en fazla 255 karakter olabilir. Varsayılan değeri yoktur.

Yöntem bir Variant döndürür. Dönen değer sayı, metin, mantıksal değer, hata değeri ya da dizi (array) olabilir.

Başvuru yazımı ve dönüş değeri​

Metin içindeki hücre başvuruları R1C1 biçimindedir. Örneğin R2C3, ikinci satır ile üçüncü sütunun kesiştiği hücreyi gösterir. Sayfa adı tek tırnak içine alınır ve ünlem işaretiyle başvurudan ayrılır. Sayfa adında boşluk ya da Türkçe karakter olabileceği için tırnak kullanmak güvenlidir.

  • Etkin çalışma kitabı: Çalışma kitabı adı verilmeyen başvurular, o anda etkin olan çalışma kitabına göre çözülür. Bu yüzden kodda önce ilgili sayfayı Activate ile etkinleştirmek iyi bir alışkanlıktır.
  • Kapalı dosya: Kapalı bir çalışma kitabındaki hücre değeri, klasör yolu, köşeli parantez içindeki dosya adı ve sayfa adından oluşan tam başvuruyla okunabilir. Böylece dosyayı açmadan tek hücre değeri alınır.
  • Dizi dönüşü: GET.WORKBOOK(1) gibi işlevler birden çok değer döndürür. Bu durumda sonuç bir diziye atanır ve LBound ile UBound ile gezilir.
  • Hata: Geçersiz bir işlev ya da bağımsız değişken verilirse yöntem ya hata değeri döndürür ya da çalışma zamanı hatası oluşturur. Sonucu IsError ile denetleyin.

Sık kullanılan XLM işlevleri​

  • GET.CELL(tür, başvuru): Hücre hakkında bilgi verir. Tür sayısına göre sonuç değişir: 5 hücrenin içeriğini, 6 formül metnini, 7 sayı biçim kodunu, 17 satır yüksekliğini verir. Tür 20 ise yazı tipi boyutunu değil, mantıksal bir değer döndürür (Örnek 2'de YANLIŞ). Yazı tipi adı ve boyutu gibi bilgileri tür sayılarıyla aramak yerine Font nesnesinden okumak daha güvenlidir.
  • GET.WORKBOOK(1): Çalışma kitabındaki tüm sayfaların adlarını, çalışma kitabı adıyla birlikte dizi olarak döndürür. Gizli sayfalar da listede yer alır.
  • Genel işlevler: SUM, MAX, COUNT gibi sıradan çalışma sayfası işlevleri de aynı yöntemle R1C1 başvurularıyla çalıştırılabilir.

Yalnızca VBA ile yapılabilen işleri bu yöntemle yapmayın. Örneğin hücre rengi ya da yazı tipi boyutu Interior ve Font nesneleriyle doğrudan okunabilir. Bu yöntem, VBA nesne modelinde karşılığı olmayan ya da pratik olmayan durumlar için ayrılmalıdır.

1. R1C1 başvurusuyla toplam ve en yüksek değer​

Aşağıdaki makroyu standart modüle yapıştırın. Makro, adet sütunundaki beş değerin toplamını ve en yüksek değerini R1C1 başvurusu kullanarak hesaplar ve C2 ile D2 hücrelerine yazar.
VBA 11 satır
Option Explicit

Sub ToplamVeEnYuksek()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Satışlar")
    ws.Activate

    ' Sayfa adı tek tırnak içinde, aralık R1C1 biçiminde yazılır
    ws.Range("C2").Value = ExecuteExcel4Macro("SUM('" & ws.Name & "'!R2C2:R6C2)")
    ws.Range("D2").Value = ExecuteExcel4Macro("MAX('" & ws.Name & "'!R2C2:R6C2)")
End Sub
ExecuteExcel4Macro
Formülünü incelemek için bir hücre seçin.
ABCD
1ÜrünAdetToplam AdetEn Yüksek
2Kalem120815310
3Defter85
4Silgi240
5Cetvel60
6Ataç310
SatışlarExcelDepo v1.0.0
Makro, B2:B6 aralığını R2C2:R6C2 olarak yazıp Excel 4.0 işlevlerine gönderir. Toplam adet C2 hücresinde 815, en yüksek adet ise D2 hücresinde 310 olarak görünür.

2. GET.CELL ile sayı biçimi ve yazı tipi boyutu​

Fiyat sütunu B2:B6 aralığında binlik ayraçlı ve iki ondalıklı biçimdedir. Makroyu standart modüle yapıştırın. Makro, her fiyat hücresinin sayı biçim kodunu (GET.CELL 7) okuyup C sütununa yazar. Ayrıca GET.CELL 20 ile yazı tipi boyutunu okumayı dener ve sonucu D sütununa yazar. Ancak tür 20 yazı tipi boyutu vermez, D sütununda mantıksal bir değer görünür.
VBA 19 satır
Option Explicit

Sub BicimBilgisiOku()
    Dim ws As Worksheet
    Dim r As Long
    Dim adres As String

    Set ws = ThisWorkbook.Worksheets("Fiyat Listesi")
    ws.Activate

    For r = 2 To 6
        ' Her satırdaki fiyat hücresinin R1C1 adresi
        adres = "'" & ws.Name & "'!R" & r & "C2"

        ' 7: sayı biçimi, 20: yazı tipi boyutu
        ws.Cells(r, 3).Value = ExecuteExcel4Macro("GET.CELL(7," & adres & ")")
        ws.Cells(r, 4).Value = ExecuteExcel4Macro("GET.CELL(20," & adres & ")")
    Next r
End Sub
ExecuteExcel4Macro
Formülünü incelemek için bir hücre seçin.
ABCD
1ÜrünFiyatBiçim KoduYazı Boyutu
2Laptop24.500,00#,##0.00YANLIŞ
3Monitör6.350,50#,##0.00YANLIŞ
4Klavye890,00#,##0.00YANLIŞ
5Fare450,75#,##0.00YANLIŞ
6Yazıcı3.999,00#,##0.00YANLIŞ
Fiyat ListesiExcelDepo v1.0.0
İlk fiyat hücresinin biçim kodu C2 hücresine #,##0.00 olarak yazılır. D2 hücresindeki YANLIŞ değeri bir yazı tipi boyutu değil, mantıksal bir değerdir; bu nedenle GET.CELL türü 20 yazı tipi boyutunu okumak için kullanılamaz. Yazı tipi boyutunu Range.Font.Size ile, biçim kodunu Range.NumberFormat ile okuyabilirsiniz. Örnek, GET.CELL işlevinin çalışma biçimini göstermek içindir.

3. Sayfa adlarını GET.WORKBOOK ile listeleme​

Makroyu standart modüle yapıştırın. Makro, çalışma kitabındaki tüm sayfa adlarını (gizli olanlar dahil) GET.WORKBOOK(1) ile alır. Çalışma kitabı adını ayıklayıp yalnızca sayfa adını B sütununa, sıra numarasını A sütununa yazar. Toplam sayfa sayısı C2 hücresine gider.
VBA 29 satır
Option Explicit

Sub SayfaAdlariniListele()
    Dim ws As Worksheet
    Dim arr As Variant
    Dim i As Long
    Dim k As Long
    Dim ad As String

    Set ws = ThisWorkbook.Worksheets("Sayfa Listesi")
    ws.Activate

    ' Tüm sayfa adları dizi olarak gelir
    arr = ExecuteExcel4Macro("GET.WORKBOOK(1)")

    ' Tek sayfa varsa dizi yerine metin dönebilir
    If Not IsArray(arr) Then arr = Array(arr)

    k = 0
    For i = LBound(arr) To UBound(arr)
        k = k + 1
        ' Köşeli parantezli çalışma kitabı adını at, yalnız sayfa adını al
        ad = Mid(arr(i), InStr(arr(i), "]") + 1)
        ws.Cells(k + 1, 1).Value = k
        ws.Cells(k + 1, 2).Value = ad
    Next i

    ws.Range("C2").Value = k
End Sub
ExecuteExcel4Macro
Formülünü incelemek için bir hücre seçin.
ABC
1SıraSayfa AdıToplam Sayfa
21Satışlar1
Sayfa ListesiExcelDepo v1.0.0
İlk sayfanın sırası A2 hücresinde 1, adı B2 hücresinde Satışlar olarak görünür. Çalışma kitabındaki toplam sayfa sayısı C2 hücresine 1 olarak yazılır. Sayfalar sekme sırasıyla listelenir.

Kullanırken dikkat edin​

  • Eşittir işareti kullanmayın: Yöntemin bağımsız değişkeni eşittir işaretiyle başlamamalıdır. Örneğin GET.WORKBOOK(1) yazın, eşittir işaretli biçimi yazmayın. Aksi halde işlev tanınmayabilir ve hata alırsınız.
  • R1C1 biçimini unutmayın: Metin içindeki başvurular A1 biçiminde değil, R1C1 biçiminde yazılmalıdır. Satır ve sütun numarasını döngü değişkenlerinden birleştirerek oluşturmak en pratik yoldur.
  • 255 karakter sınırı: Bağımsız değişken olarak verilen metin en fazla 255 karakter olabilir. Uzun klasör yolları ve sayfa adları bu sınırı aşabilir. Böyle durumlarda başvuruyu kısaltın ya da başka bir yöntem seçin.
  • Sayfa etkin olmalıdır: Çalışma kitabı adı verilmeyen başvurular etkin çalışma kitabına göre çözülür. Kodu çalıştırmadan önce Activate ile ilgili çalışma kitabını ve sayfayı etkinleştirin. Yoksa beklenmedik bir kitabın değeri okunabilir.
  • Güvenlik ve uyumluluk: Excel 4.0 makro dili eski bir teknolojidir. Güvenlik ayarlarında bu makrolar için ayrı bir denetim bulunur ve kötü amaçlı dosyalarda sık kötüye kullanılır. Kurumsal ortamlarda bu nedenle kısıtlanmış olabilir. Mümkünse Range, Font, Interior gibi VBA nesne modeli karşılıklarını tercih edin.
  • İlgili konular:
    • Evaluate: Formül metnini A1 biçiminde çalıştıran yöntem
    • Application.Run: Makro çalıştırma yöntemi
    • Range.NumberFormat: Sayı biçim kodunu okuma ve yazma
    • Range.Font: Yazı tipi özellikleri
    • IsError: Hata değeri denetimi
    • LBound ve UBound: Dizi sınırları
    • Formüller > Tanımlı Adlar > Ad Yöneticisi (Formulas > Defined Names > Name Manager): Ad içinde XLM işlevi kullanımı
    • DOLAYLI: Metinden başvuru oluşturan çalışma sayfası işlevi
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
12
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst