これは私の最初のフォーラム投稿です。私はどこからでも探していて、私が探している情報を見つけることができません。私が何か誤ってやると、私を許してください。Excel特定のSAP列に移動して特定の番号を検索するVBAコード
SAPのクエリからライブデータを抽出し、その情報をExcel Extraction PicにペーストするExcelスプレッドシートを作成しました。そこから、トランザクションME38を開いて、抽出されたデータに基づいて納入日程行を更新します。私は "スケジュールされた.."列(私が "txtEKET-MENGE"であることを知っている)に行き、示された数を "Qty Delivered"(抽出の一部である)に変更する必要があります。しかし、私は "Schedule ..."カラム( "txtEKET-ETENR")[抽出にもリストされているデータ]の特定のセルでのみこれを行う必要があります。 SAP Table Pic
ここまでは私がこれまで行ってきたことです。
Set xclapp = CreateObject("Excel.Application")
Set xclwbk = ThisWorkbook
Set xclsht = xclwbk.Sheets("Sheet1")
For k = 2 To ActiveCell.SpecialCells(11).Row
For j = 1 To ActiveCell.SpecialCells(11).Column
If j = 14 Then Purch = xclsht.Cells(k, j).Value
If j = 15 Then Item = xclsht.Cells(k, j).Value
If j = 16 Then SLine = xclsht.Cells(k, j).Value
If j = 8 Then PGI = xclsht.Cells(k, j).Value
Next
myTransaction = "ME38"
Session.FindById("wnd[0]/tbar[0]/okcd").Text = "/n" & myTransaction
Session.FindById("wnd[0]").sendVKey 0
On Error Resume Next
Session.FindById("wnd[0]/usr/ctxtRM06E-EVRTN").Text = Purch
Session.FindById("wnd[0]/usr/ctxtRM06E-EVRTN").caretPosition = 10
Session.FindById("wnd[0]").sendVKey 0
Session.FindById("wnd[0]/usr/txtRM06E-EBELP").Text = Item
Session.FindById("wnd[0]/usr/txtRM06E-EBELP").caretPosition = 3
Session.FindById("wnd[0]").sendVKey 0
Session.FindById("wnd[0]/tbar[1]/btn[30]").press
Session.FindById("wnd[0]/tbar[1]/btn[2]").press
Call SelectRowOnGrid
Session.FindById("wnd[0]/mbar/menu[0]/menu[0]").Select
Session.FindById("wnd[0]").Close
On Error Resume Next
Session.FindById("wnd[1]/usr/btnSPOP-OPTION1").press
Next
End If
If Err.Number <> 0 Then
'The Excel worksheet has e.g. 3 columns of data and an error column.
xclsht.Cells(j, 21).Value = "Here is an error."
Else
xclsht.Cells(j, 21).Value = "O.K."
End If
On Error GoTo 0
以下は、Function SelectRowOnGridです。
Function SelectRowOnGrid()
Dim grid As SAPFEWSELib.GuiTableControl
Dim columnname As SAPFEWSELib.GuiTableColumn
Dim texttofind As String
Set grid = Session.FindById("wnd[0]/usr/tblSAPMM06ETC_1117/")
Set columnname = Session.FindById("wnd[0]/usr/tblSAPMM06ETC_1117/txtEKET- ETENR")
texttofind = xclsht.Cells(k, 16).Value
For k = 0 To grid.RowCount - 1
If grid.GetCellValue(k, columnname) = texttofind Then
grid.SetCurrentCell
grid.DoubleClickCurrentCell
End If
Next k
End Function
"グリッドを設定..."になると、機能を終了し、それ以外は何もしません。
洞察力があれば幸いです。
まず私は、正しい列名を見つけるだろう。たとえば、スクリプトレコーダーを使用して、関連する列を強調表示し、その時点で記録を終了するだけでスクリプトを記録します。探している列名は、記録されたスクリプト内にあります。 – ScriptMan
私は言い換えましょう。 Excelのスプレッドシートから特定の番号を検索するために、SAPテーブルの列Session.FindById( "wnd [0]/usr/tblSAPMM06ETC_1117/txtEKET-ETENR)をスクロールするコードが必要です。 Session.FindById( "wnd [0]/usr/tblSAPMM06ETC_1117/txtEKET-MENGE)列のデータを同じExcelスプレッドシート上の別の番号に更新します。 –