• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

MAC işletim sisteminde VBA Türkçe Karakterlerin Bozulması

volki_112

Altın Üye
Katılım
29 Eylül 2023
Mesajlar
858
Excel Vers. ve Dili
2019 Türkçe
Merhabalar Windows da sorunsuz çalışan kodlarım MAc işletim sisteminde hata vermektedir.

Örneğin Windowsda
Set tblInceleme = Sayfa10.ListObjects("İNCELEME") ' Sayfa10'daki "FONİNCELEME" tablosunu belirle olan satırım

MAC te
Set tblInceleme = Sayfa10.ListObjects("FONÜNCELEME") ' Sayfa10'daki "FONÜNCELEME" tablosunu belirle şekline dönüyor.

İ harfi Ü ye dönüyor. başka türkçe karakterlerde de bu sorun var. bunu nasıl çözebilirim.
 
Volki hocam;
Bu durum koddan çok karakter kodlaması (encoding) ve yerel ayar (locale) farkından kaynaklanıyor. Windows ve macOS, özellikle Excel VBA içinde Türkçe karakterleri her zaman aynı şekilde ele almıyor. “İ” → “Ü” gibi dönüşümler genelde Unicode/ANSI uyumsuzluğu veya case dönüşümü (büyük/küçük harf) sırasında ortaya çıkmaktadır.

Özellikle şu durumlar problem çıkarır:
UCase, LCase - String karşılaştırmaları - Tablo isimleri Türkçe karakter içeriyorsa

En garanti çözüm: İNCELEME yerine INCELEME kullanmak.Tablo adlarını ASCII yaparsan sorun tamamen ortadan kalkar.

Eğer bir yerde UCase vs. kullanıyorsan kaldır.Sabit string kullanın: Set tblInceleme = Sayfa10.ListObjects("İNCELEME")

Binary karşılaştırma kullanınız If StrComp(tbl.Name, "İNCELEME", vbBinaryCompare) = 0 Then

Tabloyu isme göre değil index ile alınız : Set tblInceleme = Sayfa10.ListObjects(1)

Debug ile gerçek ismi kontrol ediniz.Mac’te gerçekten isim ne olmuş bakınız:

Dim t As ListObject
For Each t In Sayfa10.ListObjects
Debug.Print t.Name
Next t

Normalize eden fonksiyon yazabilirsiniz

Function TRtoEN(text As String) As String
text = Replace(text, "İ", "I")
text = Replace(text, "Ü", "U")
text = Replace(text, "Ş", "S")
text = Replace(text, "Ğ", "G")
text = Replace(text, "Ö", "O")
text = Replace(text, "Ç", "C")
TRtoEN = text
End Function

Kullanımı : Set tblInceleme = Sayfa10.ListObjects(TRtoEN("İNCELEME"))

VBA’da StrConv fonksiyonu ile metinleri normalize edebilirsiniz:
Dim tableName As String
tableName = StrConv("İNCELEME", vbUnicode)
Set tblInceleme = Sayfa10.ListObjects(tableName)
 
Geri
Üst