Excel'den Word'e Vba ile Metin ve Tablo Aktarma

Katılım
13 Ekim 2009
Mesajlar
14
Excel Vers. ve Dili
office 2013
tr
Altın Üyelik Bitiş Tarihi
16-05-2021
Öncelikle şimdiden teşekkür ediyorum.
(Örnek dosyayı daha rahat anlamanız için güncelledim ne yapmak istediğimi daha rahat anlamanız için.)
Yapmak istediğim içindeki bazı bilgilerin sürekli farklı olduğu Kaynak Word dosyasından Excel ile verileri istediğim metin(text) ve tabloları oluşturdum, bunları her seferinde yeni 2 tane Word dosyası açıp metinleri metin formatı tablo olanları tablo formatında aktarmak istiyorum. Kodlamayı yaptım çok uzun oldu, işimi görüyor(biraz uzasada) kısaltmayı yapamadım. Asıl sorun neden kaynaklandığını bulamadığım bir durum var, bazen gelmesi gereken metin veya tablonun(arada bir tane text veya tablo) worde aktarılmadığı oluyor. Yazdığım kod fazla olduğu için boş excel dosyasına module olarak koyup ekledim. Sadece kod kısalabilir mi? En önemlisi aktarım hataları ile ilgili çözüm varsa yardımcı olursanız sevinirim. iyi günler dilerim.
 

Ekli dosyalar

Son düzenleme:
Katılım
13 Ekim 2009
Mesajlar
14
Excel Vers. ve Dili
office 2013
tr
Altın Üyelik Bitiş Tarihi
16-05-2021
Yardım edebilecek kimse yok mu? Mecbur kalmadıkça, soru sormadan önce öğrenmek için çok araştırıp yaptığım bir makro ama daha yeni başladığım için hazır makro kodlarını bulup uyarlamaya çalışıyorum bu kısımda tıkandım worde aktarımda bazen metin ve tablolar gelmiyor aynı işlemi tekrar yapınca geliyor sorunu çözemedim.
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,767
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Eklediğiniz dosyada hiç veri yok wort dosyasından da hiç örnek dosya yok belkide bundan dolayı cevap alamıyorsunuz.
 
Katılım
13 Ekim 2009
Mesajlar
14
Excel Vers. ve Dili
office 2013
tr
Altın Üyelik Bitiş Tarihi
16-05-2021
Yazı uzun olduğu için tam ifade edemedim heralde kusura bakmayın. "Yazdığım kod fazla olduğu için boş excel dosyasına module olarak koyup ekledim" sadece kodların olduğu modülü koymuştum. Örnek dosyayı değiştirdim. Sadece makro kodlarına bakıp yapılmak isteneni daha iyi anlayabilirsiniz. Yardım edenlere şimdiden teşekkür ederim.
 
Son düzenleme:
Katılım
13 Ekim 2009
Mesajlar
14
Excel Vers. ve Dili
office 2013
tr
Altın Üyelik Bitiş Tarihi
16-05-2021
Yardım edebilir misiniz?
 

yerbakili

Destek Ekibi
Destek Ekibi
Katılım
12 Mayıs 2009
Mesajlar
174
Excel Vers. ve Dili
Office 2003
Merhaba,
Eklediğiniz dosya ile yardım edilme ihtimali oldukça düşük gibi duruyor. Mümkünse, kendi dosyanızı olduğu gibi (en azından yardım almak istediğiniz fonksiyonların tam olarak çalışır hali ve verileri ile) ekleyin.
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,767
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Dosyanızda TAN sayfasında TS1 , TX315 satırlarındaki bilgilere göre iki adet word dosyası oluşturuluyor kodlarda kısıltma olurmu bilmiyorum nerede ise bütün bölümlerde hücre biçimlendirmeler mevcut bunlar kodları baya uzatıyor.

Diğer taraftan birinci mesajınıza hücre aralığını yazsaydınız iyi olurdu zira işlem yapılan hücreler 539. sütunda bu sütunlara kim bakacakta dosyanızın dolu olduğu anlaşılacak

Ben olsaydım bu verileri A1 hücresinden başlatırdım. bazen verileri yazmıyor diyorsunuz hangi hücredeki verileri yazmıyor bunlarıda belirtiniz.

Bu dosyada ben sütunları deneme olarak sildim ve kodlar T sütunundan verileri almaktadır fazla olan kodları kaldırmaya çalıştım herşeyden önce On Error Resume Next kodunu kullnmayınız. bu kod hataları yok sayacaktır ve verilerinizin yanlış aktarılmasına veya hiç aktarılmamasına yol açacaktır.

Rich (BB code):
docword.Paragraphs(docword.Paragraphs.Count).Range.Font.Bold = True
docword.Paragraphs(docword.Paragraphs.Count).Range.Font.Name = "Times New Roman"
docword.Paragraphs(docword.Paragraphs.Count).Range.Font.Size = 12
 

Ekli dosyalar

Son düzenleme:
Katılım
13 Ekim 2009
Mesajlar
14
Excel Vers. ve Dili
office 2013
tr
Altın Üyelik Bitiş Tarihi
16-05-2021
Halit hocam ilk olarak ilgin için çok teşekkür ederim ayrıca soruyu sorarken ve excel verilerini örnek olarak eklerken eksiklerimden ötürü kusuruma bakmayın biraz acemilik oldu.
Diğer taraftan birinci mesajınıza hücre aralığını yazsaydınız iyi olurdu zira işlem yapılan hücreler 539. sütunda bu sütunlara kim bakacakta dosyanızın dolu olduğu anlaşılacak
Ben olsaydım bu verileri A1 hücresinden başlatırdım.
Asıl excel dosyamda aynı anda başka işlemlerde yapıyorum o alanlar dolu olduğu için size sormak istediğim kısım dışındakileri silmiştim ama acemilikten(anlatımda eksiklikten) örnek dosyayı hazırlarken en başa almam gerekirdi tekrar kusura bakmayın.

Kodlama kısmına gelirsek yeni başladığım için kodlama yapılarını yeni öğreniyorum, (sıfırdan tasarlayamadığım için)
hazır kodları kendi işim için uyarlamak zorunda kalıyorum.

Excelden Worde hem paragraf hem tablo aktaran makro kodu örneğini yabancı forumlarda buldum orada tek paragraf ve tek tablo vardı o yüzden bende her işlem için aynı kod kısmını tekrarlayarak çözdüm. Hem kodu kısaltmak hemde bu forumda örneği olsun diye buradan sormak istedim, forumu kullanan kişilerin elinde örnek olsun istedim.

Sizin söylediklerinize gelirsek,
Dosyanızda TAN sayfasında TS1 , TX315 satırlarındaki bilgilere göre iki adet word dosyası oluşturuluyor kodlarda kısıltma olurmu bilmiyorum nerede ise bütün bölümlerde hücre biçimlendirmeler mevcut bunlar kodları baya uzatıyor.
sorun yaşadığım yer burası idi, sizin düzeltmenize baktım istediğimi %95 çözmüşsünüz. Fakat aktarılan paragrafların hepsinin "times new roman" ve "12 punto" olması gerekiyor, sebebi ise çalıştığım kurumda olan kişilerde bunu kullanacak. Windows office programları calibri ve 11 geldiği için yazı fontlarını da iki word dosyasının en başında ayarlamayı yapamadım, bende her işlem için tek tek ayarlamak zorunda kaldım. Burada takıldığım için sizlere sormak istedim.

Kod:
baslik.Copy    '' burası BOLD ve ORTALI metin olacak 
docword.Paragraphs(docword.Paragraphs.Count).Range.PasteAndFormat (wdFormatPlainText)
docword.Paragraphs(docword.Paragraphs.Count).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter  '' ortalı
docword.Paragraphs(docword.Paragraphs.Count).Range.Font.Bold = True
'paragraf ekle
docword.Paragraphs.Add
docword.Paragraphs(docword.Paragraphs.Count).Range.Font.Bold = False
1.sorum :
Yukarıdaki kod kısmında yaptığınız (bold = false ) olayı işlemi gerçekten çok kısalttı, tekrar çok teşekkür ederim.
Ek olarak yeni Word dosyası eklenince (iki word dosyası içinde) en başta "times new roman" ve "12 punto" nasıl ayarlayabilirim?
tüm paragrafların ortak yazı tipi bu olması gerekiyor.

2.sorum:
bazen verileri yazmıyor diyorsunuz hangi hücredeki verileri yazmıyor bunlarıda belirtiniz.
Makroyu her çalıştırdığım zaman bazen ilk paragraf bazen son paragraf ve bazende tablolardan her hangi biri gelmiyordu ama onuda siz zaten cevaplamışsınız, yanlış anlamadıysam.

herşeyden önce On Error Resume Next kodunu kullnmayınız. bu kod hataları yok sayacaktır ve verilerinizin yanlış aktarılmasına veya hiç aktarılmamasına yol açacaktır.
Galiba sorun bundan kaynaklanıyordu. Ben "On Error Resume Next" kodunu, kodlamada hata yaparsam devam etsin diye kullanıyordum asıl hatamın burası olduğunu anlamış oldum.

3.sorum:
Kod:
'''''Set appword = GetObject(class:="Word.Application")
'''''If appword Is Nothing Then
Set appword = CreateObject(class:="Word.Application")
Kodlamanın burasında Word uygulaması açık ise yeniden uygulama açmak yerine yeni dosya ekleyerek devam etsin bilgisayarda işlem hızlansın diye "if" kullanmıştım ama siz gerekli görmemişsiniz galiba. İş yerinde kullandığımız bilgisayarlar çok hızlı olmayabiliyor bu yüzden bu tip işlemlerde zorlanıyorlar. Yazdığım bu kısım sizce yanlış mı veya gereksiz mi? Çünkü word uygulaması hep açık oluyor.

Son olarak tekrar teşekkür etmek istiyorum. Yazı biraz uzun oldu ama ayrı ayrı sorup çok vaktinizi almak istemiyorum. Forum sayesinde kendimi geliştirmeye başladım, inşallah benimde ilerde faydam olur.
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,767
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Dosyayı irdeleyiniz.
1.soru için bunu yapınız.
Rich (BB code):
Set appword = CreateObject(class:="Word.Application")
If Not appword Is Nothing Then Set appword = GetObject(class:="Word.Application")
2. soru için

Rich (BB code):
docword.Paragraphs(docword.Paragraphs.Count).Range.Font.Name = "Times New Roman"
docword.Paragraphs(docword.Paragraphs.Count).Range.Font.Size = 12
 

Ekli dosyalar

Son düzenleme:
Katılım
13 Ekim 2009
Mesajlar
14
Excel Vers. ve Dili
office 2013
tr
Altın Üyelik Bitiş Tarihi
16-05-2021
Halit hocam denedim yaptıklarınızı elinize sağlık.
Denerkende bir şey farkettim ilk başlıktan sonraki metni 2 yana yaslı yaptıktan sonra paragraf ekledikce 2 yana yaslı geliyor direk, yani başlıktan sonra bold false yapıp 2 yana yaslı yaparsak kodda azalmış olacak gibi geldi. Tekrar çok teşekkür ederim.
Hem metin hem tablo aktarmanın birlikte olduğu güzel örnek oldu son yaptıklarınız, başkalarının da işine yarayacaktır kesinlikle.
Kolay gelsin iyi günler.
 
Son düzenleme:

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,767
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Teşekkürler iyi çalışmalar
 
Üst