如何从excel获取输入并使用该值在as400中运行宏

时间:2018-08-13 16:11:53

标签: excel ibm-midrange

今天,我正在as400宏上工作,我有一个一个要运行3000+条记录的相同宏的要求。 Excel工作表在A列中包含3000多个行,并且为数字格式。每次我需要运行宏之前,都需要使用excel A列中的值更改AS400宏代码。

下面是AS400宏的代码。

[PCOMM SCRIPT HEADER]
LANGUAGE=VBSCRIPT
DESCRIPTION=
[PCOMM SCRIPT SOURCE]
OPTION EXPLICIT
autECLSession.SetConnectionByName(ThisSessionName)

REM This line calls the macro subroutine
subSub1_

sub subSub1_()
   autECLSession.autECLOIA.WaitForAppAvailable

   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "dc74945"
   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "[enter]"

   autECLSession.autECLPS.WaitForAttrib 5,28,"00","3c",3,10000

   autECLSession.autECLPS.WaitForCursor 5,29,10000

   autECLSession.autECLOIA.WaitForAppAvailable

   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "[tab]"
   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "7"
   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "[enter]"

   autECLSession.autECLPS.WaitForAttrib 5,24,"00","3c",3,10000

   autECLSession.autECLPS.WaitForCursor 5,25,10000

   autECLSession.autECLOIA.WaitForAppAvailable

   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "n"
   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "[tab]"
   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "[tab]"
   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "[tab]"
   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "[tab]"
   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "[tab]"
   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "nnn"
   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "[tab]"
   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "n"
   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "[enter]"
end sub

现在每次我需要通过从excel获取输入来更改下面的行。

autECLSession.autECLPS.SendKeys "dc74945"

Excel包含以下格式的数据:

ID  Name
AC71182 Andrew Cain
AC74398 Adam Cadman
AD39903 Alisha Davies (CARDIFF)
AC74952 Abby Clarke
AD54561 Alison Duffield
AD59529 Ann Rose Davies
AD60488 Alex Delmonte C'Diff COMBO

我要寻找的是一个AS400宏,该宏可以从excel中的A列中逐个读取一个单元格(包含ID),然后通过更改上述行中的值来为该ID运行上面的宏。

我进行了很多搜索,但从未找到使用AS400 Macro进行搜索的简单方法。 我有VBA宏来执行此类操作,但是我需要AS400宏。因此,如果可以的话,请寻求帮助。

谢谢, 弥勒佛

2 个答案:

答案 0 :(得分:0)

您在IBM个人通信中运行的这些AS400宏只是Visual Basic脚本,您可以在代码中实例化其他ActiveX对象,例如Excel.Application。

这里是此类宏的简短示例。它会打开一个Excel工作表并遍历每一行,直到工作表的A列中没有值为止:

[PCOMM SCRIPT HEADER]
LANGUAGE=VBSCRIPT
[PCOMM SCRIPT SOURCE]
autECLSession.SetConnectionByName(ThisSessionName)
Dim excel
Dim row
Dim inputFilename 

inputFilename = "C:\...\YourExcelFile.xls"

Set excel = CreateObject("Excel.Application")
Set objWorkbook = excel.Workbooks.Open(inputFilename)
excel.visible = true 'If you want to

row = 2 'Start at row 2 of your excel sheet

'Loop until AS400 has blocked input (error in most cases) or there are no values in column A of excel sheet left
while autECLSession.autECLOIA.InputInhibited = 0 AND excel.Cells(row,1).Value <> "" 

   '### YOUR MACRO STARTS HERE
   autECLSession.autECLOIA.WaitForAppAvailable

   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys excel.Cells(row,1).Value 'Value of column A / current row from excel sheet
   autECLSession.autECLOIA.WaitForInputReady
   autECLSession.autECLPS.SendKeys "[enter]"

   autECLSession.autECLPS.WaitForAttrib 5,28,"00","3c",3,10000

   autECLSession.autECLPS.WaitForCursor 5,29,10000

   ' ...

   '### YOUR MACRO ENDS HERE

   row = row + 1
wend

excel.Quit
Set excel = Nothing

最诚挚的问候

答案 1 :(得分:0)

只要安装了IBM Personal Communications,就可以使用Excel VBA marco(而不是VBS marco)再次调用Excel应用程序来完成编码。

下面的链接是PCOMM库。您可以从第29页开始阅读。 https://www.ibm.com/support/knowledgecenter/SSEQ5Y_12.0.0/com.ibm.pcomm.doc/books/pdf/host_accessV120.pdf?view=kc

让我知道您是否仍然想要示例代码。