2017-08-16 118 views
1

这是我的第一篇论坛帖子。我一直在寻找,无法找到我正在搜索的信息。如果我做错或说错了,请原谅我。Excel VBA代码转到特定的SAP列并找到具体的编号

我已经创建了一个Excel电子表格,它从SAP查询中提取实时数据,并将该信息粘贴回Excel Extraction Pic。从那里,我打开交易ME38,根据提取的数据更新计划行。我需要去“预定的”列(我知道它是“txtEKET-MENGE”),并将显示的数字更改为“已交付数量”(这是提取的一部分);但是,我只需要在“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 

以下是功能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

对。让我解释一下。 我需要滚动浏览SAP表列Session.FindById(“wnd [0]/usr/tblSAPMM06ETC_1117/txtEKET-ETENR)的代码来寻找一个特定的数字(从Excel电子表格)。一旦找到特定的数字,我需要它会将同一个Excel电子表格中的 Session.FindById(“wnd [0]/usr/tblSAPMM06ETC_1117/txtEKET-MENGE)”中的数据更新为不同的数字。 –

回答

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

Josh,我很高兴它有所帮助。有时候最好自己找一个解决方案。 ;-) – ScriptMan

相关问题