hadromer
Altın Üye
- Katılım
- 23 Ekim 2015
- Mesajlar
- 402
- Excel Vers. ve Dili
- LTSC Professional Plus 2021 64 Bit Türkçe
- Altın Üyelik Bitiş Tarihi
- 26-04-2028
Necati Bey emeğinize sağlık yordum sizi. Ancak sizin kodları denediğimde wrdDoc.Tables(1).AutoFitBehavior (wdAutoFitWindow) kısmında not defined hatası alıyorum. kendi kodlarımı denediğimde derslerdeki birleştirme kodu çalışmıyor. acaba neyi yanlış yapıyorum ?Ben verdiğiniz uzun ders isimlerini kendi makromda denedim sonuç olumlu. Kendi kodlarımı ekliyorum. Altına da ders birleştirme kodlarını düzenleyip sizinkileri ekliyorum.
Kendi kodlarınızKod:Option Explicit Sub MSWord_Ders_Programi3() Dim wrdApp As Object Dim wrdDoc As Object Dim ws As Worksheet, sablon As String Dim i As Integer, j As Integer, k As Integer Dim sonsat As Integer, derssay As Integer, ekle As Integer Dim ayniders1 As String, ayniders2 As String Set ws = ThisWorkbook.Sheets("Sayfa1") sonsat = ActiveSheet.UsedRange.Rows.Count Set wrdApp = CreateObject("Word.Application") wrdApp.Visible = True sablon = ThisWorkbook.Path & "\" & "YENİ.docx" Set wrdDoc = wrdApp.Documents.Add(sablon) derssay = wrdDoc.Tables(1).Columns.Count - 1 If derssay < Int((sonsat - 5) / 3) Then ekle = Int((sonsat - 5) / 3) - derssay For i = 1 To ekle wrdDoc.Tables(1).Columns.Add Next i wrdDoc.Tables(1).Rows.Alignment = wdAlignRowCenter MsgBox "Tabloya yeni sütun eklendi, kontrol ediniz.", vbInformation End If For j = 2 To 6 i = 5 For k = 2 To Int((sonsat - 5) / 3) + 1 If ws.Cells(i, j).MergeCells = False Then wrdDoc.Tables(1).cell(j, k).Range.Text = _ ws.Cells(i, j).Text & vbNewLine & _ ws.Cells(i + 1, j).Text & vbNewLine & _ ws.Cells(i + 2, j).Text i = i + 3 Else wrdDoc.Tables(1).cell(j, k).Range.Text = _ ws.Cells(i, j).Text i = i + 3 End If Next k Next j derssay = wrdDoc.Tables(1).Columns.Count For j = 2 To 6 For k = derssay To 3 Step -1 With wrdDoc.Tables(1) ayniders1 = Replace(.cell(j, k).Range.Text, Chr(13), "") ayniders2 = Replace(.cell(j, k - 1).Range.Text, Chr(13), "") If ayniders1 = ayniders2 And Len(Replace(.cell(j, k).Range.Text, Chr(13), "")) > 2 Then .cell(j, k).Range.Delete .cell(j, k - 1).Merge MergeTo:=.cell(j, k) End If End With Next k Next j wrdDoc.Tables(1).AutoFitBehavior (wdAutoFitWindow) wrdDoc.SaveAs ThisWorkbook.Path & "\" & Range("a" & 3).Text & ".docx" wrdDoc.Close False Set wrdDoc = Nothing wrdApp.Quit Set wrdApp = Nothing MsgBox "Belge hazırlandı", vbInformation End Sub
Kod:Option Explicit Sub MSWord_Ders_Programi() Dim wrdApp As Object ' Changed to Object for late binding Dim wrdDoc As Object ' Changed to Object for late binding Dim ws As Worksheet, sablon As String Dim i As Integer, j As Integer, k As Integer Dim sonsat As Integer, derssay As Integer, ekle As Integer Dim tbl As Object ' Changed to Object for late binding Dim ayniders1 As String, ayniders2 As String On Error Resume Next Set ws = ThisWorkbook.Sheets("Sayfa1") sonsat = ws.UsedRange.Rows.Count On Error GoTo 0 ' Recommended to turn off error resume after critical code Set wrdApp = CreateObject("Word.Application") wrdApp.Visible = True sablon = ThisWorkbook.Path & "\" & "YENİ.docx" Set wrdDoc = wrdApp.Documents.Add(sablon) Set tbl = wrdDoc.Tables(1) derssay = tbl.Columns.Count - 1 ' Gerekirse yeni sütun ekleyin If derssay < Int((sonsat - 5) / 3) Then ekle = Int((sonsat - 5) / 3) - derssay For i = 1 To ekle tbl.Columns.Add Next i MsgBox "Tabloya yeni sütun eklendi, kontrol ediniz.", vbInformation End If ' Excel'deki verileri Word tablosuna kopyalayın For j = 2 To 6 i = 5 For k = 2 To Int((sonsat - 5) / 3) + 1 If ws.Cells(i, j).MergeArea.Cells.Count = 1 Then tbl.cell(j, k).Range.Text = _ ws.Cells(i, j).Text & vbNewLine & _ ws.Cells(i + 1, j).Text & vbNewLine & _ ws.Cells(i + 2, j).Text i = i + 3 Else tbl.cell(j, k).Range.Text = _ ws.Cells(i, j).Text i = i + 3 End If Next k Next j ' Tabloyu sabitlemek ve taşmasını engellemek için ayarlar With tbl .AllowAutoFit = True ' Otomatik boyutlandırmayı etkinleştir ' Tablonun pencereye sığmasını sağlamak için tablo genişliğini ayarlayın .PreferredWidthType = 2 ' Yüzde olarak genişlik .PreferredWidth = 100 ' %100 genişlik ' Sütun genişliklerini manuel olarak ayarlayın (cm cinsinden) Dim colWidth As Single colWidth = wrdDoc.PageSetup.PageWidth / .Columns.Count ' Sütun genişliğini pencere genişliğine göre ayarla For i = 1 To .Columns.Count .Columns(i).Width = colWidth Next i ' Tablonun sabit bir yerde kalması için metin hizalaması ve boşluk ayarları Dim cell As Object ' Changed to Object for late binding For Each cell In .Range.Cells cell.Range.ParagraphFormat.SpaceAfter = 0 ' Paragraf sonrası boşluk bırakma cell.Range.ParagraphFormat.SpaceBefore = 0 ' Paragraf öncesi boşluk bırakma cell.Range.ParagraphFormat.Alignment = 1 ' Metni ortalayın cell.VerticalAlignment = 1 ' Dikey hizalama Next cell End With ' Tekrar eden hücreleri birleştirin derssay = wrdDoc.Tables(1).Columns.Count For j = 2 To 6 For k = derssay To 3 Step -1 With wrdDoc.Tables(1) ayniders1 = Replace(.cell(j, k).Range.Text, Chr(13), "") ayniders2 = Replace(.cell(j, k - 1).Range.Text, Chr(13), "") If ayniders1 = ayniders2 And Len(Replace(.cell(j, k).Range.Text, Chr(13), "")) > 2 Then .cell(j, k).Range.Delete .cell(j, k - 1).Merge MergeTo:=.cell(j, k) End If End With Next k Next j ' Belgeyi kaydedin ve kapatın wrdDoc.SaveAs ThisWorkbook.Path & "\" & ws.Range("A3").Text & ".docx" wrdDoc.Close False Set wrdDoc = Nothing wrdApp.Quit Set wrdApp = Nothing MsgBox "Belge hazırlandı", vbInformation End Sub