Uzun yıllar önce(2015) donanimhaber forum sitesindeki sorulara cevap vermek için Word VBA makroları yazmıştım. Forumda cevap olarak verdiğim kodları gözden geçirip düzenledim ve burada yayınlıyorum.
Soru 1
Diyelim ki 80 sayfalık bir belge var elimizde ve her bir sayfada küçük birer adet resim var. Yani toplam 80 resim. Ben bunların her birini tek tek düzenleyerek sayfanın tamamına yaymadan, toplu ve otomatik olarak sayfanın tamamını kaplayacak şekilde nasıl yayarım?
Cevap 1
Aşağıdaki VBA makroyu kullanabilirsiniz. Alttaki kodlar tüm resimlerin genişliğini 10cm'e ayarlar.
genislik = 10 'cm
satırındaki 10 sayısını değiştirebilirsiniz.
'Mesut Akcan
'mesutakcan.blogspot.com
'Belgedeki tüm resimlerin genişliğini 10 cm'ye ayarlar
'Yükseklik orantılı değişir
Sub GenislikAyarla()
Dim shp As InlineShape
Dim genislik As Double
genislik = 10 'cm
Application.ScreenUpdating = False
For Each shp In ActiveDocument.InlineShapes
With shp
.LockAspectRatio = msoTrue 'en/boy Orantısı sabit
'.Height = (.Width / .Height) * CentimetersToPoints(genislik)
.Width = CentimetersToPoints(genislik)
End With
DoEvents
Next
Application.ScreenUpdating = True
MsgBox "İşlem Tamam!"
End Sub
Soru 2
Word VBA makro kodları nasıl çalıştırılır?
Cevap 2
Word programındayken, ALT+F11e bas.
Menüden Insert / Module tıkla. Açılan kod penceresine kodu ekle.
Word programında makro çalıştırmak için ALT+F8e bas makro adını seç. Çalıştır tıkla.
Soru 3
Üstteki makro sadece genişliği değiştiriyor. Ben belgede bulunan tüm resimlerin genişliğini 7, yüksekliğini 5 olarak ayarlamak istiyorum. Bunun için makro var mı?
Cevap 3
Aşağıdaki makroyu kullanabilirsiniz. Eğer orijinal resimleriniz 7x5 oranında değilse sünme olabilir.
'Mesut Akcan
'mesutakcan.blogspot.com
'Belgedeki tüm resimlerin genişliğini 7cm,
'yüksekliğini 5 cm'ye ayarlar
Sub GenislikVeYukseklikAyarla()
Dim shp As InlineShape
Dim genislik As Double
Dim yukseklik As Double
genislik = 7 'cm
yukseklik = 5 'cm
Application.ScreenUpdating = False
For Each shp In ActiveDocument.InlineShapes
With shp
.LockAspectRatio = msoFalse 'en/boy Orantısı sabit değil
.Height = CentimetersToPoints(yukseklik)
.Width = CentimetersToPoints(genislik)
End With
Next
Application.ScreenUpdating = True
MsgBox "İşlem Tamam!"
End Sub
Soru 4
Bu makroyu çalıştırmada sorunum yok lakin makroyu Word'e kalıcı olarak nasıl ekleriz. Word her açılışında makroyu çalıştırabileyim.
Cevap 4
Word'ü açın. ALT+F11e basın. Ctrl+R ile Project bölmesini açın.
Bu bölmede Normal yazan proje adını seçin.
Menüden Insert / Module tıklayın.
Açılan kod penceresine makro kodunu ekleyin.
Ctrl+S ile kaydedin.
Artık makroyu her dosyaya eklemeye gerek olmadan kullanabilirsiniz.
Soru 5
Verilen kodları değiştirerek kullanmaya çalıştım ama başarılı olamadım.
Word dosyama eklediğim tüm resimlerin 3,47 inç 2,48 inç olmasını istiyorum. Bunun için gereken makro konusunda yardımcı olabilir misiniz?
Cevap 5
Aşağıdaki makro kodunu kullanın.
'Mesut Akcan
'mesutakcan.blogspot.com
'Belgedeki tüm resimlerin genişliğini 3.47 inç,
'yüksekliğini 2.48 inç olarak ayarlar
Sub GenislikVeYukseklikAyarla_2()
Dim shp As InlineShape
Dim genislik As Double
Dim yukseklik As Double
genislik = 3.47 'inç
yukseklik = 2.48 'inç
Application.ScreenUpdating = False
For Each shp In ActiveDocument.InlineShapes
With shp
.LockAspectRatio = msoFalse 'en/boy Orantısı sabit değil
.Height = InchesToPoints(yukseklik)
.Width = InchesToPoints(genislik)
End With
Next
Application.ScreenUpdating = True
MsgBox "İşlem Tamam!"
End Sub