• DİKKAT

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

Makro ile pc den bulunan programa teklif oluşturtma.

Katılım
29 Ekim 2010
Mesajlar
365
Excel Vers. ve Dili
Microsoft Office 365 ProPlus 64 bit
Merhabalar ,

Çalışmakta olduğum firmada müşterilerimize fiyat teklifi ilettiğimiz bir programımız var makro ile bu programa teklif oluşturulabilir mi ?


Örnek 40 satırlık bir teklif var gönderilmesi gerekiyor ,yaklaşık 25 dk alıyor.

yapılabilir ise ne tür bilgilere gerek vardır yardımcı olabilir misiniz.
 
Merhaba mustilem23,

Öncelikle programda teklifi nasıl oluşturuyorsunuz bunu anlamamız lazım.
program kendi içinde oluşturuyorsa, o programı yazan kişiyle çözebilirsiniz bu durumu.
eğer program dosya ekleyerek teklif oluşturuyorsa, o zaman da örnek kalıp görmemiz gerek.

yani sorunuz çözüm bulmak için çok yetersiz. örnek dosya yok, program hakkında bir bilgi yok..
öncelikle bu konularda aydınlanırsak, yardımcı olmaya çalışırız tabi ki..
 
programın ismi ıfs ,

kullanıcı veri girişi ile teklif oluşturuluyor,elimde teklif çekilecek bir excel doyası var buradan malzeme kodunu kopyalayıp programı açıyorum satıra giriş yapıyorum sonra satış malzemesi olduğu için malzeme kodunun en başına S- ekleyip tab tuşu ile ilerliyorum sonra adeti ekliyorum ve yine tab tuşu ile ilerliyorum sonrasında fiyatı ekliyorum ve yine tab tuşu ile makine seri no ekliyorum ve f12 diyerek kayıt ediyorum ve ilk satır hazır oluyor ,aynı yöntem ile yaklaşık 40 satır bazen de 50 satır dahi oluyor 10 müşteri teklifi hazırlandığını düşünür isek epey vakit alıyor,detaylı olarak anlatmaya çalıştım istenir ise videoda çekebilirim ekran görüntüsü olarak yardımcı olabilirseniz çok makbule geçecek ,teşekkürler.
 
Son düzenleme:
elimde mause makro diye bir program var bunun üzerinden kayıt yapsam makro kodlarını ilettesem bir ilerleme kaydedebilir miyiz.
 
arkadaşlar yardımcı olabilir seniz çok makbule geçecek.
 
merhaba,

siz ısf programına veri yazdıracak bir şey istiyorsunuz. bunun için kod yada makro yazılabileceğini sanmıyorum. program satıcısıyla görüşmenizi tavsiye ederim. onlar ilgili formda bir değişiklik yapıp bir buton koyabilir mesela, ve butona bastığınızda dosyanın yerini gösterirsiniz ve içindeki verileri çeker.
 
Auto it programı büyük ihtimalle işinizi görecektir.
Bir Text dosyasındaki verileri bu program ile sizin programa elle giriliyormuş gibi işlem yaptırabilirsiniz.

Ancak bunu kullanmayı öğrenmek biraz zaman alacaktır.
Program genel kullanımlı bir program olsaydı script ini yazardım. Kaç defa hangi tuşa basılması gerektiği , veri girerken programın nasıl tepki verdiği ,gelen ekranların başlık bilgileri gibi detaylar lazim

Programcıya teklif e excel den Import istediğinizi belirtin en doğrusu bu

Autoit i inceleyiniz.
 
Auto it programı büyük ihtimalle işinizi görecektir.
Bir Text dosyasındaki verileri bu program ile sizin programa elle giriliyormuş gibi işlem yaptırabilirsiniz.

Ancak bunu kullanmayı öğrenmek biraz zaman alacaktır.
Program genel kullanımlı bir program olsaydı script ini yazardım. Kaç defa hangi tuşa basılması gerektiği , veri girerken programın nasıl tepki verdiği ,gelen ekranların başlık bilgileri gibi detaylar lazim

Programcıya teklif e excel den Import istediğinizi belirtin en doğrusu bu

Autoit i inceleyiniz.

Yazılımcı ile görüşeceğim ,ama auto ıt yeni bir ufuk açtı bana araştıracağım inşllah yapabilirim ,

Sayın asri auto ıt için bilginiz varmıdır takıldığım konularda yardımcı olabilir misiniz.
 
Yazılımcı ile görüşeceğim ,ama auto ıt yeni bir ufuk açtı bana araştıracağım inşllah yapabilirim ,

Sayın asri auto ıt için bilginiz varmıdır takıldığım konularda yardımcı olabilir misiniz.

Autoit in ustası değilim , işime yarayacak bir iki çalışmam olmuştu. Bol miktarda kaynak mevcut.

Programıniza iki satırlık teklif girişini videoya çekip gönderin.
Her bir işlemde kaç defa hangi tuşa bastiginizi da yazınız.
Isinizi gormesede fikir verecek bir script hazirlarim
 
Aşağıdaki kodu Autoit editöründe boş bir sayfa yapıştırıp farklı bir isimde kaydedin.

Excel dosyasını teklif.xlsx olarak kaydettiğiniz kod ile aynı yere kopyalayın.

Boş bir word belgesi açın.

Program sıra ile verileri okuyup. Word belgesinde mouse un bulunduğu konuma yazacaktır.

Örneğe bakarak sizin teklif programına göre uyarlayınız.

Kod:
#include <AutoItConstants.au3>

Func _WinWaitActivate($title,$text,$timeout=0)
    WinWait($title,$text,$timeout)
    If Not WinActive($title,$text) Then WinActivate($title,$text)
    WinWaitActive($title,$text,$timeout)
EndFunc


$oExcel = ObjCreate("Excel.Application")
$oExcel.Workbooks.Open (@ScriptDir & "\teklif.xlsx").Sheets (1).Select ()
$oExcel.Visible = True

;Excel dosyası açıldıktan 10 sn sonra bilgi girişine başlanacaktır.
Sleep(10000)

For $i = 2 To 1000

   ;Açılan excel dosyasından 1,3,4 kolonlarından veriler okunuyor.
   Local $stok=$oExcel.activesheet.cells($i, 1).value
   Local $adet=$oExcel.activesheet.cells($i, 3).value
   Local $fiyat=$oExcel.activesheet.cells($i, 4).value

   ;Okunan veri boş ise döngü bitiriliyor.
   if $stok="" then ExitLoop

   ;Boş bir Word belgesi açık bulunmalı.
   _WinWaitActivate("Belge1 - Microsoft Word","")

   ; Click varsayılan koordinata göre, Mouse + nın üzerinde bulunması gerekiyor.
   MouseClick($MOUSE_CLICK_LEFT)

   ; + nın koordinatı belli ise yatay 0, dikey 500 olarak verilmiş örnek.
   ;MouseClick($MOUSE_CLICK_LEFT, 0, 500, 1)

   ;Stokkodu gönderiliyor
   send($stok)
   ;TAB tuşu gönderiliyor
   send("{TAB}")
   ;1 sn bekleniyor
   Sleep(1000)
   ;adet gönderiliyor
   send($adet)
   ;TAB tuşu gönderiliyor
   send("{TAB}")
   ;Fiyat gönderiliyor
   send($fiyat)
   ;Teklif programı açık iken kullanılacak ise ";" bunu kaldırın.
   ;send("{F12}")
   ;2 sn bekleniyor
   Sleep(2000)

next
$oExcel.Workbooks.close
 
scripti f5 ile çalıştıyorum programdan şöyle bir uyarı geliyor

>"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\mdogru\Desktop\yedek teklıf\auto tek.au3"
"C:\Users\mdogru\Desktop\yedek tekl?f\auto tek.au3" (11) : ==> The requested action with this object has failed.:
$oExcel.Workbooks.Open (@ScriptDir & "\teklif.xlsx").Sheets (1).Select ()
$oExcel.Workbooks^ ERROR
>Exit code: 1 Time: 1.411
 
Aşağıdaki dosyayı c:\autoit yada d:\autoit olarak açın.
Teklifgir.au3 dosyasında sağ tuş "edit script" diyerek editörü açıp çalıştırın.

Bu çözüm çok kolay olmayacak, ancak öğrendikten sonra bir çok işlemi otomatikleştirebilir siniz.
Oluşturduğunuz scriptleri derledikten sonra .exe olarak çalıştırabilir siniz.

Uyarı: silme , kaydetme yazma gibi işlemlerde program otomatik yaptığı için dikkatli olunuz.
Programın nereye giriş yaptığını bilmesini sağlayınız. bkz. _WinWaitActivate("Belge1 - Microsoft Word","")



http://s2.dosya.tc/server/i64san/autoit.zip.html
 
evet şuan çalıştı word dosyasında ,



;Boş bir Word belgesi açık bulunmalı.
_WinWaitActivate("Satis Teklifi - IFS Applications","")

word ü açmadım bizim programın ismini yazdım fakat bir şey yazmadı yanlış birşey mi yapıyorum acaba sizide mesgul ediyorum kusura bakmayın.
 
Size gönderdiğim dosyalarda Au3info.exe programı mevcut.
Bu programı çalıştırıp hedef işareti tutun ve sizin programın çerçevesine getirin.
Aşağıdaki çıkan title satırındaki açıklamayı winwait e yazın.

programdaki + butonunun kısa yolu mevcut mu?

Sadece mouse ile mi tıklanabiliyor.
 
evet oldu şuan programa yazıyor ve kaydetti 1 satırı alt satıra geçmek için f5 kısayolu bizim programda onu ekledim yine yazıyor fakat exceldeki birinci satırını yazıyor yani 2 tane aynı satır oldu bunu nasıl aşabiliriz ,



programdaki + butonunun kısa yolu mevcut mu?

programam gelip f5 e basar isek aynı işlevi yapıyor.

kodlar aşağıdaki gibi oldu en son fakat yukarıda bahsettiğim gibi bir sorun var.

#include <AutoItConstants.au3>

Func _WinWaitActivate($title,$text,$timeout=0)
WinWait($title,$text,$timeout)
If Not WinActive($title,$text) Then WinActivate($title,$text)
WinWaitActive($title,$text,$timeout)
EndFunc


$oExcel = ObjCreate("Excel.Application")
$oExcel.Workbooks.Open (@ScriptDir & "\teklif.xlsx").Sheets (1).Select ()
$oExcel.Visible = True

;Excel dosyası açıldıktan 10 sn sonra bilgi girişine başlanacaktır.
Sleep(10000)

For $i = 2 To 1000

;Açılan excel dosyasından 1,3,4 kolonlarından veriler okunuyor.
Local $stok=$oExcel.activesheet.cells($i, 1).value
Local $adet=$oExcel.activesheet.cells($i, 3).value
Local $fiyat=$oExcel.activesheet.cells($i, 4).value

;Okunan veri boş ise döngü bitiriliyor.
if $stok="" then ExitLoop

;Boş bir Word belgesi açık bulunmalı.
_WinWaitActivate("Satis Teklifi - Y20001123 - MUSTAFA DOGRU @ DURMAZLAR PROD. APPLICATION SERVER - IFS Applications","")

; Click varsayılan koordinata göre, Mouse + nın üzerinde bulunması gerekiyor.
MouseClick($MOUSE_CLICK_LEFT)

; + nın koordinatı belli ise yatay 0, dikey 500 olarak verilmiş örnek.
;MouseClick($MOUSE_CLICK_LEFT, 0, 500, 1)

;Stokkodu gönderiliyor
send($stok)
;TAB tuşu gönderiliyor
send("{TAB}")
;1 sn bekleniyor
Sleep(1000)
;TAB tuşu gönderiliyor
send("{TAB}")
;1 sn bekleniyor
Sleep(1000)
;adet gönderiliyor
send($adet)
;1 sn bekleniyor
Sleep(1000)
;TAB tuşu gönderiliyor
send("{TAB}")
;Fiyat gönderiliyor
send($fiyat)
;TAB tuşu gönderiliyor
send("{TAB}")
;1 sn bekleniyor
Sleep(1000)
;Teklif programı açık iken kullanılacak ise ";" bunu kaldırın.
send("{F12}")
;2 sn bekleniyor
Sleep(2000)
send("{F5}")
;2 sn bekleniyor
Sleep(2000)
;Stokkodu gönderiliyor
send($stok)
;TAB tuşu gönderiliyor
send("{TAB}")
;1 sn bekleniyor
Sleep(1000)
;TAB tuşu gönderiliyor
send("{TAB}")
;1 sn bekleniyor
Sleep(1000)
;adet gönderiliyor
send($adet)
;1 sn bekleniyor
Sleep(1000)
;TAB tuşu gönderiliyor
send("{TAB}")
;Fiyat gönderiliyor
send($fiyat)
;TAB tuşu gönderiliyor
send("{TAB}")
;1 sn bekleniyor
Sleep(1000)
;Teklif programı açık iken kullanılacak ise ";" bunu kaldırın.
send("{F12}")
;2 sn bekleniyor
Sleep(2000)
send("{F5}")
;2 sn bekleniyor
Sleep(2000
next
$oExcel.Workbooks.close
 
Programda zaten döngü mevcut.
Siz iki defa sendkey grubunu kullanmışsınız.

F5 i yukarı aldım.
alttaki fazla satırları sildim.
Bu şekilde dener mi siniz?

Kod:
#include <AutoItConstants.au3>

Func _WinWaitActivate($title,$text,$timeout=0)
        WinWait($title,$text,$timeout)
        If Not WinActive($title,$text) Then WinActivate($title,$text)
        WinWaitActive($title,$text,$timeout)
EndFunc


$oExcel = ObjCreate("Excel.Application")
$oExcel.Workbooks.Open (@ScriptDir & "\teklif.xlsx").Sheets (1).Select ()
$oExcel.Visible = True

;Excel dosyası açıldıktan 10 sn sonra bilgi girişine başlanacaktır.
Sleep(10000)

For $i = 2 To 1000

   ;Açılan excel dosyasından 1,3,4 kolonlarından veriler okunuyor.
   Local $stok=$oExcel.activesheet.cells($i, 1).value
   Local $adet=$oExcel.activesheet.cells($i, 3).value
   Local $fiyat=$oExcel.activesheet.cells($i, 4).value

   ;Okunan veri boş ise döngü bitiriliyor.
   if $stok="" then ExitLoop

   ;Boş bir Word belgesi açık bulunmalı.
   _WinWaitActivate("Satis Teklifi - Y20001123 - MUSTAFA DOGRU @ DURMAZLAR PROD. APPLICATION SERVER - IFS Applications","")

   ;+ ya basılıyor
   send("{F5}")
   
   Sleep(1000)
   ;Stokkodu gönderiliyor
   send($stok)
   ;TAB tuşu gönderiliyor
   send("{TAB}")
   ;1 sn bekleniyor
   Sleep(1000)
   ;TAB tuşu gönderiliyor
   send("{TAB}")
   ;1 sn bekleniyor
   Sleep(1000)
   ;adet gönderiliyor
   send($adet)
   ;1 sn bekleniyor
   Sleep(1000)
   ;TAB tuşu gönderiliyor
   send("{TAB}")
   ;Fiyat gönderiliyor
   send($fiyat)
   ;TAB tuşu gönderiliyor
   send("{TAB}")
   ;1 sn bekleniyor
   Sleep(1000)
   ;Teklif programı açık iken kullanılacak ise ";" bunu kaldırın.
   send("{F12}")
   ;2 sn bekleniyor
   Sleep(2000)
   
   next
$oExcel.Workbooks.close
 
özverili desteğinize çok teşekkür ederim 10 numara 5 yıldız oldu ? takıldığım konularda sizden yardım alabilir miyim auto ıt hakkın da.
 
özverili desteğinize çok teşekkür ederim 10 numara 5 yıldız oldu ? takıldığım konularda sizden yardım alabilir miyim auto ıt hakkın da.

Sonuç almanıza sevindim.

Ben bu kadar çabuk sonuca ulaşacağınızı beklemiyordum :)
Bir şeyler katarak sonuca ulaştınız.
Autoit büyük bir proje. Menülü formlu programlar bile yazabilir siniz.
Bol miktarda yerli ve yabancı kaynak mevcut. Bana sıra gelene kadar çözüm bulacağınızdan eminim.

Olduki bulunmadı. O zaman bir de ben araştırırım :)

Saygılarımla.
 
Eklediğiniz sleep komutlarındaki süreleri programın verdiği tepki sürelerine göre ayarlarsanız. Daha akıcı bir giriş sağlamış olursunuz.

Aşağıdaki örnek ileride işinize yarayabilir.

Bu komut ile bir penceredeki bir edit kutusuna direkt yazı yazdırabilir siniz.
ControlSetText($hWnd, "", "Edit1", "xxxxxxxxxxxxxxxxxxxxx")

Bu komut ile de bir penceredeki bir edit kutusundak, yazı direkt okuyabilir siniz.
Local $sText = ControlGetText($hWnd, "", "Edit1")

Kod:
#include <MsgBoxConstants.au3>
Example()
Func Example()
    ; Run Notepad
    ; Run("notepad.exe")

    ; Wait 10 seconds for the Notepad window to appear.
    Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)

     ; Set the edit control in Notepad with some text. The handle returned  by WinWait is used for the "title" parameter of ControlSetText.
    ControlSetText($hWnd, "", "Edit1", "xxxxxxxxxxxxxxxxxxxxx")

     ; Retrieve the text of the edit control in Notepad. The handle returned  by WinWait is used for the "title" parameter of ControlGetText.
    Local $sText = ControlGetText($hWnd, "", "Edit1")

    ; Display the text of the edit control.
    MsgBox($MB_SYSTEMMODAL, "", "The text in Edit1 is: " & $sText)

    ; Close the Notepad window using the handle returned by WinWait.
    WinClose($hWnd)
EndFunc   ;==>Example
 
Geri
Üst