Bu Blogda Ara

10 Mayıs 2021 Pazartesi

Word Dosyasında Görünmeyen Karakterleri Makro İle Temizleme Denemesi

Merhabalar.

Word dosyalarında istenmeyen ve görünmeyen karakterlerin işinizi yavaşlattığına şahit olmuşsunuzdur.

Bunları temizlemek için istenen karakter aralığının dışında tüm karakterleri silmek mantığında çalışan, basit bir makro denedim.

Kod, kısmen başarılı olsa da işlemciyi 3 basamaklı sayfaya erişen dosyalarda işlemciyi yorması ve aşağıdaki gibi bazı özel karakterlerin makroya eklenememesi gibi sorunlardan dolayı, kodun gelişimi maalesef sekteye uğradı.

Bu karakterlerin istisna dizisi içinde yer almasını istedim; fakat makro düzenleyici Unicode 255'inci karakter sırasından sonraki Genişletilmiş Latinceyi desteklemedi:
ā Ā ˁ ḍ Ḍ ˀ ḥ Ḥ ḫ Ḫ ġ Ġ Ī Ī ḳ Ḳ s̠ S̠ ṣ Ṣ ṭ Ṭ ū Ū ẕ Ẕ Ż Ż ẓ Ẓ

Word dosyasındaki deneme metni aşağıdadır:

ARŞİVLER

Lorem Ipsum, dizgi ve baskı endüstrisinde kullanılan mıgır metinlerdir. Lorem Ipsum, adı bilinmeyen bir matbaacının bir hurufat numune kitabı oluşturmak üzere bir yazı galerisini alarak karıştırdığı 1500'lerden beri endüstri standardı sahte metinler olarak kullanılmıştır.

Beşyüz yıl boyunca varlığını sürdürmekle kalmamış, aynı zamanda pek değişmeden elektronik dizgiye de sıçramıştır. 1960'larda Lorem Ipsum pasajları da içeren Letraset yapraklarının yayınlanması ile ve yakın zamanda Aldus PageMaker gibi Lorem Ipsum sürümleri içeren masaüstü yayıncılık yazılımları ile popüler olmuştur.


Joker karakterli değiştirme penceresinde ise şu arama ifadesini denedim. Kısmen başarılı oldu; ama 255'ten fazla karakteri bu pencerede yönetmek zor.
[!A-z 0-9 ışğüöçİŞĞÜÖÇ.,;'^13]

Çalıştırdığım makro:

Sub Gorunmeyen_Karakter_Vurgula()
Dim ToplamHarfSayisi As Long
ToplamHarfSayisi = ActiveDocument.Range.Characters.Count

Dim HarfSayac As Long
Dim Dizi As Variant
Dizi = Array("", "A", "B", "C", "Ç", "D", "E", "F", "G", "Ğ", "H", "I", "İ", "J", "K", "L", "M", "N", "O", "Ö", "P", _
"Q", "R", "S", "Ş", "T", "U", "Ü", "V", "W", "X", "Y", "Z", " ", ".", ",", ":", ";", _
"a", "b", "c", "ç", "d", "e", "f", "g", "ğ", "h", "ı", "i", "j", "k", "l", "m", "n", _
"o", "ö", "p", "q", "r", "s", "ş", "t", "u", "ü", "v", "w", "x", "y", "z", _
"!", Chr(34), "#", "$", "%", "&", "'", Chr(133), "(", ")", "*", "+", "-", "/", ">", "=", "<", "?", "@", _
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", _
"â", "î", "û", "Â", "Î", "Û", _
"[", "\", "]", "^", "_", "`", "{", "|", "}", "~", "€", "ƒ", _
Chr(137), "Š", "‹", "Œ", "?", "'", "o", "-", "™", "š", "›", "œ", "Ÿ", "¡", "¢", "£", _
"¤", "¥", "¦", "§", "¨", "©", "ª", "­", "®", "¯", "°", "±", "²", "³", "´", "µ", "·", "¸", "¹", "º", "¼", "½", "¾", "¿", _
"À", "Á", "Ã", "Ä", "Å", "Æ", "È", "É", "Ê", "Ë", "Ì", "Í", "Ï", "Ñ", "Ò", "Ó", "Ô", "Õ", "×", _
"Ø", "Ù", "Ú", "ß", "à", "á", "ã", "ä", "å", "æ", "è", "é", "ê", "ë", "ì", "í", "ï", "ñ", "ò")

Dim DiziSayac As Long

For HarfSayac = 1 To ToplamHarfSayisi
For DiziSayac = 1 To UBound(Dizi)
If ActiveDocument.Range.Characters(HarfSayac) = Dizi(DiziSayac) Then
GoTo SonrakiHarf
End If
Next DiziSayac
If DiziSayac > UBound(Dizi) - 1 Then
ActiveDocument.Range.Characters(HarfSayac).Select
Selection.Range.HighlightColorIndex = wdRed
End If
ToplamHarfSayisi = ActiveDocument.Range.Characters.Count
If HarfSayac = ToplamHarfSayisi Then
GoTo IslemSonu
End If
SonrakiHarf:
Next HarfSayac
IslemSonu:
End Sub

Hiç yorum yok:

Yorum Gönder