• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

dosya ismini değişkene atama

Katılım
4 Kasım 2004
Mesajlar
87
Excel Vers. ve Dili
2003
tr
word belgesinden excel dataabase e veri kaydetme

selam
ben word dosyasının adından yararlanıp excel dosyasına kayıt eklemek istiyorum
misal
2009-1000.doc diye bir dosyam var
bu dosyaya ait kayıtlar database de 2009-1000 satırında
eğer ben dosyanın adını dosyano değişkenine atayabilirsem
word dosyasındaki bazı bilgilerin de ilgili satırdaki hücrelere eklenmesini sağlamak istiyorum

bunu b = Mid(ActiveDocument.FullName, 25, 9) ile sağladım

bunu yapmak için tıkandığım yer word makrosu ile database.xls dosyasını açmak...

teşekkürler
 
Son düzenleme:
eğer excel dosyasını da açabilirsem hedefime büyük ölçüde yaklaşacağım
 
Son düzenleme:
Aşağıdaki komut ile açabilirsiniz. database.xls dosyasının yolunu kendinize göre değiştirirsiniz.

Kod:
CreateObject("Shell.Application").Open "C:\database.xls"
 
Aşağıdaki komut ile açabilirsiniz. database.xls dosyasının yolunu kendinize göre değiştirirsiniz.

Kod:
CreateObject("Shell.Application").Open "C:\database.xls"

çok teşekkür ederim
ama şöyle bir sorun oldu
benim database dosyam zaten açık olduğundan
"yeniden açılsın mı" diyen bir msgbox açılıyor

bu durumda sadece database i active etmek mi uygun
yoksa
sizin verdiğin kodun arkasına hayır diyen bir ek mi yapmalı?
 
Sub wart()
Selection.HomeKey Unit:=wdStory
With Selection.Find
.Forward = True
.ClearFormatting
.MatchWholeWord = True
.MatchCase = False
.Wrap = wdFindContinue
.Execute FindText:="Hasar Tutarı" 'hasar tutarı satırını bul
End With
Selection.MoveRight Unit:=wdWord, Count:=3
Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
a = Selection 'hasar tutarını değişkene ata
'MsgBox a
b = Mid(ActiveDocument.FullName, 25, 9) 'dosya adını değişkene ata
'MsgBox b
CreateObject("Shell.Application").Open "c:\proex\data\database.xls"
End Sub

buraya kadar geldim
bundan sonraki aşamada database de düşey arama ile b değişkeni ile eşleşen satırı belirlemek ve atamaları yapmak kaldı...

yardımlarınızı bekliyorum
 
çok teşekkür ederim
ama şöyle bir sorun oldu
benim database dosyam zaten açık olduğundan
"yeniden açılsın mı" diyen bir msgbox açılıyor

bu durumda sadece database i active etmek mi uygun
yoksa
sizin verdiğin kodun arkasına hayır diyen bir ek mi yapmalı?

Bu durumda önce açık dosya kontrolü yapılıp ona göre işlem yapılabilir. Bununla ilgili olarak aşağıdaki linki incelemenizi öneririm.

http://www.excel.web.tr/f48/ac-k-dosya-hk-t62069.html
 
Dosya açma kodu ile birlikte "b" değişkenini sayfa1 A sütununda arayan aşağıdaki kodu deneyebilirsiniz.

Kod:
Set yeni = CreateObject("Excel.Application")
yeni.Visible = True
yeni.Workbooks.Open FileName:="c:\proex\data\database.xls"
Set aralik = yeni.Workbooks("database.xls").sheets("sayfa1").[a:a]
MsgBox yeni.worksheetfunction.match(b, aralik, 0)
 
denedim ilgili satırı da buldu
çok teşekkür ederim

ancak iki yardım daha rica edeceğim
1- benim asıl makrom zaten excel de çalıştığından ve tüm bilgiyi database aldığından dosyayı açmadan sadece active etmem mümkün olmaz mı?


2- ben a değişkeni için makro kaydeti kullanmıştım ama rakam bin ve daha üstü ise ( misal 1.250,00 TL) sadece noktaya kadar olan kısmı aldı bu tutarı TL dahil almak için seçmem gereken yol nedir?

teşekürler
 
Son düzenleme:
yukarıdaki sorunlar BAKi olmak üzere biraz daha ilerledim, ustadan kopya çekerek :)

Kod:
Sub wart()
Selection.HomeKey Unit:=wdStory
With Selection.Find
.Forward = True
.ClearFormatting
.MatchWholeWord = True
.MatchCase = False
.Wrap = wdFindContinue
.Execute FindText:="Hasar Tutarı" 'hasar tutarı satırını bul
End With
Selection.MoveRight Unit:=wdWord, Count:=3
Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
a = Selection 'hasar tutarını değişkene ata
'MsgBox a
b = Mid(ActiveDocument.FullName, 25, 9) 'dosya adını değişkene ata
'MsgBox b
'CreateObject("Shell.Application").Open "c:\proex\data\database.xls"
Set yeni = CreateObject("Excel.Application")
yeni.Visible = True
yeni.Workbooks.Open FileName:="c:\proex\data\database.xls"
Set aralik = yeni.Workbooks("database.xls").sheets("database").[b:b]
satirno = yeni.worksheetfunction.match(b, aralik, 0)
'MsgBox satirno
teslim = Date
yeni.sheets("database").Cells(satirno, 34) = teslim
yeni.sheets("database").Cells(satirno, 40) = a 
End Sub
 
Sorularınızdan ne kasdettiğiniz anlaşılmıyor. Birinci sorunuzda dosyayı açmadan sadece active etmekten kastınız nedir. İkinci sorunuz için ilgili satırlarda aşağıdaki değişikliği yaparsanız istediğiniz gibi olabilir. Ancak her sayı boyutunda doğru sonuç vermesi için word dosyanızın bir örneğini eklemenizi öneririm.

Kod:
Selection.MoveRight Unit:=wdWord, Count:=[B][COLOR=red]2[/COLOR][/B]
Selection.MoveRight Unit:=wdWord, Count:=[COLOR=red][B]6[/B][/COLOR], Extend:=wdExtend

Not: Neden hem word hemde excel dosyayı kullanıyorsunuz. Bence word dosyanızdaki uygulamayıda excelde hazırlayıp daha kolay işlem yapabilirsiniz.
 
üstad
ilginiz için çok teşekkür ederim
2 numaralı sorun;
raporlarımın kapak kısmını database.xls den data alarak oluşturuyorum, rapor tamamlandıktan sonra ortaya çıkan tutar, tamamlanma tarihi vb. birkaç bilgiyi de database.xls ye işlemem lazım,
ama bu gün, kapaktaki dataları wordde bir tabloya yerleştirmeye karar verdim, tablodaki hücre adreslerini kullanarak bu çok kolay oldu,
böylece word ile alakalı sorun hallolmuş oldu, aşağıdaki iki dosyada farkı anlayacaksınız.

1 numaralı sorun;
database.xls ye data işlemek için sizin yardımınız ile yaptığım satırlar makroyu her çalıştırdığımda workbook u yeniden açıyor.

bu durum bizim database.xls paylaştırılmış ve sürekli açık olarak kullanmamız nedeni ile veri kaybına neden olabilir,
isteğim word den makro ile gönderdiğim datalar zaten açık olan database.xls ye işlenemez mi

saygılarımla
 

Ekli dosyalar

levent üstad
aşağıdaki gibi bir çözüm ürettim
inceler ve yorumlarsanız çok sevinirim

Kod:
Sub wart()
a = ActiveDocument.Tables(1).Cell(19, 3).Range.Text 'hasar tutarını değişkene ata
b = Mid(ActiveDocument.FullName, 25, 9) 'dosya adını değişkene ata
Set yeni = CreateObject("Excel.Application")
yeni.Visible = False
yeni.Workbooks.Open FileName:="c:\proex\data\database.xls"
Set aralik = yeni.Workbooks("database.xls").sheets("database").[b:b]
satirno = yeni.worksheetfunction.match(b, aralik, 0)
teslim = Date
yeni.sheets("database").Cells(satirno, 34) = teslim
yeni.sheets("database").Cells(satirno, 40) = a
yeni.activeworkbook.Save
yeni.Application.Quit
End Sub
 
levent üstad
aşağıdaki gibi bir çözüm ürettim
inceler ve yorumlarsanız çok sevinirim

Word makroları hakkında çok fazla bilgi sahibi olmadığımdan yorum yapmam doğru olmaz. Sonuçta bir çözüm üretmişsiniz bu açıdan sizi kutluyorum. Ancak ben hala worddeki tablonuzu neden excelde oluşturup daha kolay işlem yapmadığınızı merak ediyorum.
 
bunun mantığını anlatmak için herşeyi baştan anlatmam lazım

bizim büroya gelen işlerin bilgilerinin kayıt edildiği bir excel makromuz var, bu makroda her vakaya ardışık bir numara atıyoruz
raporların kapağını da buradaki bilgileri worde aktararak oluşturuyoruz,
dosya numarasını esas alarak vaka ile ilgili resimleri ve raporlarını adlandırıyoruz
böylece makrodaki kaydı çağırdığımızda resimler kendiliğinde yükleniyor,
rapor veya raporları tıklama ile erişilebilir hale geliyor

ancak rapor tamamlandığında ortaya çıkan bilgiler (vaka tutarı, tamamlanma tarihi, vaka adres revizyon vb şeyler) ise word documanında olduğundan bunların asıl makrodaki yerlerine manuel olarak işlenmesi gerekiyor. Ayda ortalama 200 vaka işlediğimiz için bu işlem ya ihmal ediliyor ya da gereği gibi yapılamıyor

bu çalışma ve sonrasında yapacağım ekler ile
manuel girilmesi gereken bilgiler yerlerine yerleşecek ve manuel işlemden kurtulacağız

SON BIR SORUN
son satırda excel i kapatmaya çalışıyorumsa da sadece database.xls kapanıyor
excel boş olarak açık kalıyor bunu çözmemde yardımcı olailir misiniz?


saygılarımla
 
Son düzenleme:
Selamlar,

Ben uygulamış olduğunuz kodu denedim fakat bende excel uygulaması açık kalmıyor. Yani tamamen kapanıyor.
 
cevabınız için teşekkür ederim
evet desktop da kapanıyor ama ctrl+alt+del yaptığınızda excel.exe nin her seferinde arttığını görüyorsunuz.
bu durumda tamamen kapanmış olmuyor belli bir süre sonra şişkinlik yapıp makineyi kitleyebilir diye düşünüyorum...

saygılarımla
 
Geri
Üst