iT邦幫忙

0

VBA 執行ERP判斷問題

  • 分享至 

  • xImage

https://ithelp.ithome.com.tw/upload/images/20220903/2010923168rMdeZi55.pnghttps://ithelp.ithome.com.tw/upload/images/20220903/20109231sR33fXnaad.png

想請教一個VBA執行ERP的問題,但因為只會使用抓取座標點選按鈕方式執行,所以目前碰到一個問題,就是如何判斷ERP執行畫面是否已跑完,進而可以執行下一步點選下載按鈕。

例如圖一是使用座標點選【O.列印】按鈕後,它會開始執行並顯示「電腦正在作業中,請稍候!」。圖二則是程式已執行完成並顯示下載選項【L.終端機印表】

想確認是否有辦法判斷【L.終端機印表】畫面是否已顯示,如此才能再繼續執行下一段VBA程序。

我目前是使用以下VBA等候時間執行下一段程序,但此作法經常太早或太久才執行導致失敗。

以上求解~~~~~~

Sub 下載ERP()
Dim RetVal
RetVal = Shell("Z:\AutoERP\AutoERP.exe", 3) '開啟ERP

Application.Wait Now + TimeValue("0:01:30") '等候1分30秒
SetCursorPos 220, 160 '移到座標位置
Application.Wait Now + TimeValue("0:00:1")
mouse_event &H2 Or &H4, 0, 0, 0, 0 '點選【L.終端機印表】按鈕

End Sub

看更多先前的討論...收起先前的討論...
先請教一下:
為什麼不直接從TIPTOP的4GL程式下手?
或是自行去撈TIPTOP的資料庫資料呢?
哈~~做工仔人!,這是一個非常好的問題,其實我也超無奈的,因為我只是公司的業務助理,每天要撈檔案做報表使用,雖然會一點巨集但又不是超厲害的那種,所以有跟IT提過需求希望可以幫忙自動下載資料或每天自動提供需要的檔案給我,但都被打槍了。所以目前以我的能力,只能靠座標點擊開啟ERP程式>輸入帳密>點選路徑>下載檔案,是醬的
所以除了巨集之外,我對伺服器或其他像你說的TIPTOP那些都不懂其實~~~
aben iT邦新手 5 級 ‧ 2022-09-04 13:07:06 檢舉
你好,我沒寫過VBA
1.但我看了一下圖2在程式上似乎掩蓋上了一個窗體,窗體顯示系統印表機等等按鈕,如果VBA有判斷該窗體是否存在的API你就能判斷圖1是否已經完成了的方法.
2.但判斷期間可能就要使用循環去每隔X毫秒判斷窗體出現了沒,沒出現代表還在圖1那個流程中.
aben,感謝回答,但因為我只會VBA,所以~~~哈
還是說VBA不知道有沒有類似按鍵精靈一樣的抓圖功能?但因為公司不能下載或安裝軟體,所以~~~
blanksoul12 iT邦研究生 5 級 ‧ 2022-09-05 10:59:13 檢舉
在一般公司的非IT員工如要簡化及快速完成某些報告或輸入工序,我便是鑽研 VBA, SQL 也只是自己配合其他 EXCEL 來做, 數據庫不會打開給前線員工用吧,而且太危險吧.現在公司很多報告,輸入及輸出也是用 VBA 完成的. 努力吧,學多點等未來轉工也可叫好些價錢.
沒錯沒錯~~~就是醬
基本上,以你的需求,是要輸入1個報表 的固定查詢欄位,然後定時發出 email 給某個 帳號。
這個大概 2個小時之內的工時就可以輕鬆搞定,並不大困難。
您要不要再跟 IT人員認真討論一下,會比較OK呢?

通常如果我是貴公司 IT人員的話,有人另外寫 外掛程式,來幫忙測試系統的話,應該會不大 OK 吧!

這樣子,很容易會有糾紛 的優!
souda iT邦高手 1 級 ‧ 2022-09-06 18:58:19 檢舉
這套20年多了。4gl可寫報表還蠻快的! 考慮升版嗎?T100
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
blanksoul12
iT邦研究生 5 級 ‧ 2022-09-05 10:12:19
最佳解答

你懂用 SetCursorPos 這個 windows API 便很好了,我記得有一個 windows API 是看 cursor 點着顏色的,可以試試
以下參考
http://www.office-cn.net/t/api/index.html?apihelp.htm
https://club.excelhome.net/thread-1141522-1-1.html

看更多先前的回應...收起先前的回應...
blanksoul12 iT邦研究生 5 級 ‧ 2022-09-05 10:34:04 檢舉

網上抄來的,自己研究

#If VBA7 Then
    Private Declare PtrSafe Function GetPixel Lib "gdi32" (ByVal hdc As LongPtr, ByVal x As Long, ByVal y As Long) As Long
    Private Declare PtrSafe Function GetCursorPos Lib "user32" (ByRef lpPoint As POINT) As LongPtr
    Private Declare PtrSafe Function GetWindowDC Lib "user32" (ByVal hwnd As LongPtr) As LongPtr
#Else
    Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
    Private Declare Function GetCursorPos Lib "user32" (ByRef lpPoint As POINT) As Long
    Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
#End If
Private Type POINT
    x As Long
    y As Long
End Type

Sub Picture1_Click()
    Dim pLocation As POINT
    Dim lColour As Long

    Dim lDC As Variant
    lDC = GetWindowDC(0)
    Call GetCursorPos(pLocation)
    lColour = GetPixel(lDC, pLocation.x, pLocation.y)
    Range("a1").Interior.Color = lColour
End Sub

blanksoul12,超級感謝但果不其然.....我還真看不懂 哈xxxxD

雖然大概知道這是cursor點着顏色效果,但還真不知道怎麼運用到判圖效果上,嗯~~~~這我可能有得學了 哈哈哈哈哈

blanksoul12 iT邦研究生 5 級 ‧ 2022-09-06 08:19:11 檢舉

你自己圈的地方,已經表明顏色不同了吧...不能用來判斷嗎? 見你懂用 SetCursorPos 應該也有點解決問題的決心吧.

了解,我再試試看~~~

blanksoul12大神,感謝熱心幫忙喔~~~~

我要發表回答

立即登入回答