2017-08-16 9 views
1

これは私の最初のフォーラム投稿です。私はどこからでも探していて、私が探している情報を見つけることができません。私が何か誤ってやると、私を許してください。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 

"グリッドを設定..."になると、機能を終了し、それ以外は何もしません。

洞察力があれば幸いです。

+0

まず私は、正しい列名を見つけるだろう。たとえば、スクリプトレコーダーを使用して、関連する列を強調表示し、その時点で記録を終了するだけでスクリプトを記録します。探している列名は、記録されたスクリプト内にあります。 – ScriptMan

+0

私は言い換えましょう。 Excelのスプレッドシートから特定の番号を検索するために、SAPテーブルの列Session.FindById( "wnd [0]/usr/tblSAPMM06ETC_1117/txtEKET-ETENR)をスクロールするコードが必要です。 Session.FindById( "wnd [0]/usr/tblSAPMM06ETC_1117/txtEKET-MENGE)列のデータを同じExcelスプレッドシート上の別の番号に更新します。 –

答えて

0

SAPでテーブルを処理する方法の例を示します。あなたの場合は、GRIDのコマンドを使用して、これは正しくありません。例えば

myFile = "z:\tmp\test.xlsx" 
mySheet = "Test" 

Set xclApp = CreateObject("Excel.Application") 
Set xclwbk = xclapp.Workbooks.Open(myFile) 
set xclsht = xclwbk.Sheets(mySheet) 

xclApp.Visible = True 
xclapp.DisplayAlerts = false 

k = 1 

do 

set myTable = session.findById("wnd[0]/usr/ssubITEMS:SAPLFSKB:0100/tblSAPLFSKBTABLE") 

if k = 1 then 
'rows = myTable.RowCount 
    cols = myTable.Columns.Count 
    vRows = myTable.VisibleRowCount 
    for j = 0 to cols - 1 
    xclsht.Cells(k,j + 1).Value = myTable.columns.elementAt(j).title 
    next 
    k = k + 1 
end if 

for i = 0 to vRows - 1 
l = 1 
for j = 0 to Cols - 1 
    on error resume next 
    myVariable = trim(myTable.GetCell(i,j).Text) 
    if err.number <> 0 then exit for  
    on error goto 0 
    if left(right(myVariable,3),1) = "," then 
    myVariable = replace(myVariable, "." , "") 
    myVariable = replace(myVariable, "," , "") 
    xclsht.Cells(k,l).Value = myVariable/100 
    else 
    xclsht.Cells(k,l).Value = myVariable 
    end if 
    l = l + 1 
next 
if err.number <> 0 then exit for  
k = k + 1 
next 
if err.number <> 0 then exit do  
myTable.VerticalScrollbar.Position = myTable.VerticalScrollbar.Position + vRows 

Loop 
xclapp.ActiveWorkbook.Save 

Set xclwbk = Nothing 
Set xclsheet = Nothing 
set xclapp = Nothing 

よろしく、 ScriptMan

+0

Scriptman、この情報を提供していただきありがとうございます。それは私の問題を直接解決しませんでしたが、私の問題解決を学び、推論するのに役立ちました。援助と私の新しい発見された知識を非常に感謝します。敬具、Josh –

+0

ジョシュ、私は助けてくれてとても嬉しいです。場合によっては、単独で解決策を見つける方が良い場合もあります。 ;-) – ScriptMan

関連する問題