Komut25 isimli butonun içindeki tüm komutları kesip yeni bir prosedüre aktarın. Prosedürün isminin WordeAktar olduğunu varsayarsak kodunuz şu şekilde olmalı:
Private Sub WordeAktar()
' Word Şablonundan Yeni bir Word Belgesi oluşturması için gerekli kodlara başlıyoruz...
' Kodların çalışabilmesi için Referanslardan (Tools - References...) Microsoft Word 11.0 Object Library seçili olmalı...
Dim WordApp As Word.Application 'Referanslardan (Tools - References...) Microsoft Word 11.0 Object Library seçili olmalı... Yoksa hata alırsınız...
Dim strTemplateLocation As String
' Şablonun bulunduğu yeri tanımlandırıyoruz.
strTemplateLocation = CurrentProject.Path & "\isg_.dotx"
' Bu tanımlama ile, Ornek2.dot dosyamızın Access veritabanımızın bulunduğu yerde olduğunu tarif ettik.
On Error Resume Next
' Şimdi Yeni Word Belgesi yaratmak için gerekli kodlar başlıyor.
Set WordApp = GetObject(, "Word.Application")
If Err.Number <> 0 Then
Set WordApp = CreateObject("Word.Application")
End If
On Error GoTo ErrHandler
WordApp.Visible = True
WordApp.WindowState = wdWindowStateMaximize
WordApp.Documents.Add Template:=strTemplateLocation, NewTemplate:=False
' Şimdi, Word belgemizdeki Yer İmleri ile formdaki alanları eşitleyip yer imlerini uygun kayıtlarla değiştireceğimiz kodlar başlıyor.
With WordApp.Selection
If IsNull(adi_soyadi) Then
.Goto what:=wdGoToBookmark, Name:="adi_soyadi"
' Burda tablo1No adındaki Yer imini tanımlandırdık.
.TypeText ""
' Boşsa boş bırak dedik. Eğer bunu yazmazsak boş alandan sonraki değerleri almaz.
' Mesela tablo1No alanı boş olursa diğer alanların hiçbiri aktarmaz.
' Bunu yaparak boş olunca boş bırak dedik.
' Böylece boş olsa bile diğer kayıtları yazdırmasını sağladık.
Else
.Goto what:=wdGoToBookmark, Name:="adi_soyadi"
.TypeText [adi_soyadi]
' Burda da, tablo1No alanı doluysa içindeki değeri tablo1No adındaki Yer İminin yerine yazdırdık.
' Böylece, tablo1No adıyla oluşturduğumuz Yer İminin yerine formdaki tablo1No alanının değeri gelmiş oldu.
End If
' YUKARIDAKİ AÇIKLAMALAR DOĞRULTUSUNDA AŞAĞIDAKİ KODLARI İNCELEYİN. AYNI MANTIK...
If IsNull(tcno) Then
.Goto what:=wdGoToBookmark, Name:="tcno"
.TypeText ""
Else
.Goto what:=wdGoToBookmark, Name:="tcno"
.TypeText [tcno]
End If
If IsNull(gorev_unvan) Then
.Goto what:=wdGoToBookmark, Name:="gorev_unvan"
.TypeText ""
Else
.Goto what:=wdGoToBookmark, Name:="gorev_unvan"
.TypeText [gorev_unvan]
End If
If IsNull(belge_no) Then
.Goto what:=wdGoToBookmark, Name:="belge_no"
.TypeText ""
Else
.Goto what:=wdGoToBookmark, Name:="belge_no"
.TypeText [belge_no]
End If
If IsNull(belge_tarihi) Then
.Goto what:=wdGoToBookmark, Name:="belge_tarihi"
.TypeText ""
Else
.Goto what:=wdGoToBookmark, Name:="belge_tarihi"
.TypeText [belge_tarihi]
End If
If IsNull(kurs_suresi) Then
.Goto what:=wdGoToBookmark, Name:="kurs_suresi"
.TypeText ""
Else
.Goto what:=wdGoToBookmark, Name:="kurs_suresi"
.TypeText [kurs_suresi]
End If
End With
DoEvents
WordApp.Activate
Set WordApp = Nothing
Exit Sub
ErrHandler:
Set WordApp = Nothing
End Sub
Şimdi butona tıklandığında son kayıt bitene kadar tüm kayıtları tek tek gezip WordeAktar isimli prosedürümüzü çalıştıralım. Bunun için çok yöntem var ben burada Do-Loop döngüsünden faydalandım. Komut25 isimli butonun tıklanma olayına yazacağımız kodumuz şu şekilde olmalı:
Do
WordeAktar
DoCmd.GoToRecord , , acNext
Loop Until (Me.NewRecord = True)
Elbette bu şekilde çalıştıracak olursanız ekranda kayıt sayısı kadar Word belgesinin açılması kaçınılmaz.
Evet Teşekkürler
alpeki99 kodları düzenledim kayıt sayısı kadar word açıldı pek hoş olmadı tabii fakat bu kayıtları aynı word şablonunda alt alta açabilirsek
problem çözülecektir inşaallah.