私のPCで実行されている他のソフトウェアとExcel VBAに関する質問があります。他のソフトウェアからExcelファイルにデータを取得
私はExcelファイルを作成し、DDEを使用してトレーディングソフトウェア(SPTrader)からのデータを正常に接続しました。
他の目的のために、交換されたレコードをExcelファイルに戻したいと思います。
次に、私はWinAPI FindWindowとFindWindowEXを使用して、SPTraderのアカウントセクションの取引レコードフィールドのウィンドウを探しました。また、ShowWindow(SW_MAXIMIZE/SW_RESTORE)を使用してウィンドウをテストし、正しい領域を取得したことを証明できます。
これらの領域では、ソフトウェアはマウスの右クリックだけを使用してから、[すべての貿易をコピー]ドロップダウンリストから選択します。 Ctrl + Cは使用できません。
しかしとき今、私はちょうどにVBAコードを使用して、私はレコードを取得するためのSendMessage(CB_GETLBTEXT、CB_SELECTSTRING、LB_GETTEXT、LB_GETITEMDATA、LB_GETTEXTLEN)と窓指さ(HWNDによる)を使用しますが、それは0
を返しますウィンドウ全体の位置とサイズを指定するようにソフトウェア全体を設定します。次に、マウスカーソルをその場所に呼び出し、右クリックして「すべての取引をコピー」を選択し、Excelファイルに貼り付けます。
私の質問は次のとおりです。 VBAによって取引記録領域からデータを取り出すことは可能ですか? このエリアのタイプは何ですか?テーブル、リストボックス、レコードセット...? 関数を手動で実行せずに取引が完了したときにデータを取り出す方法は?
ありがとうございました!エクセルVBAで
Public Sub TradesOrder()
Dim mainwnd As String
Dim mainwnd_ac As String
Dim hwnd As String
Dim Chwnd1 As String
Dim Chwnd2 As String
Dim Chwnd3 As String
Dim Chwnd4 As String
Dim Chwnd5 As String
Dim Chwnd6 As String
Dim Chwnd7 As String
Dim wkb As Workbook
Dim wb As String
Dim sht As String
Dim dirty As Long
wb = "SPTrader_Excel_KK.xlsm"
sht = "SPTrader_XLS"
On Error Resume Next
Set wkb = Workbooks("SPTrader_Excel_KK.xlsm")
If wkb Is Nothing Then
Workbooks.Open (ThisWorkbook.Path & "\" & wb)
Workbooks(wb).Activate
Worksheets(sht).Activate
Else
Workbooks(wb).Activate
Worksheets(sht).Activate
On Error GoTo 0
End If
mainwnd = Worksheets(sht).Range("AC1").Value
mainwnd_ac = Worksheets(sht).Range("AC2").Value
hwnd = FindWindow(vbNullString, mainwnd)
Chwnd1 = FindWindowEx(hwnd, 0&, "MDIClient", vbNullString)
Chwnd2 = FindWindowEx(Chwnd1, 0&, "TfrmAccBox", vbNullString)
Chwnd3 = FindWindowEx(Chwnd2, 0&, "TPageControl", vbNullString)
Chwnd4 = FindWindowEx(Chwnd3, 0&, "TTabSheet", "Order")
Chwnd5 = FindWindowEx(Chwnd4, 0&, "TAdvStringGrid", vbNullString)
Chwnd6 = FindWindowEx(Chwnd5, 0&, "TAdvRichEdit", vbNullString) 'TAdvRichEdit 'TGridDatePicker
SetWindowPos hwnd, HWND_NOTOPMOST, 0, 0, 850, 620, SWP_SHOWWINDOW
BringWindowToTop Chwnd2
BringWindowToTop Chwnd4
ShowWindow Chwnd4, SW_NORMAL
SetCursorPos 500, 540 'x and y mouse position
mouse_event MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0 'RightClick
mouse_event MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 'RightClick
Sleep 100
mouse_event MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0 'RightClick
mouse_event MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 'RightClick
SendKeys "{DOWN}"
SendKeys "{DOWN}"
Sleep 100
SendKeys "{ENTER}"
Worksheets(sht).Activate
Worksheets(sht).Range("C25").Select
Range("C25").PasteSpecial xlPasteAll
End Sub
「取引記録」のウィンドウクラスとは何ですか? Spy ++を試しましたか? – EylM
こんにちは! EyIM、 ありがとう、面白い! Spy ++ under classページから、クラス名はウィンドウTAdvRichEdit、クラススタイルは00000008&CS_DBCLKS、クラスバイトは0です。 – Kosan
これはカスタムコントロールのようです。複合グリッドコントロールから単一のセルを読み取る可能性は、そのコントロールが自動化インターフェイスを実装していない限り、実質的にゼロです。プロセスの境界を越えてランダムなメッセージを送信することは、あなたを非常に遠ざけることにはなりません。これは明らかにリストボックスやコンボボックスではないので、リストボックスやコンボボックスに固有のメッセージには何の役にも立たないでください。 – IInspectable