Problem : VBSCRIPT – Macro question

Problem : VBSCRIPT – Macro question

I have the following macro but I want to do certiain things. I have placed in between asterisks what I would like to do!

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

Dim tempstr

autECLSession.autECLPS.SendKeys “1”
autECLSession.autECLPS.SendKeys “[enter]”
autECLSession.autECLPS.SendKeys “rc”
autECLSession.autECLPS.SendKeys “[tab]”

tempstr = InputBox(“Please enter Friday Date”, “Date”, “”) ***limit this to six digits ddmmyy format***

PutText 8, 55, tempstr, autECLSession

PutText 11, 55, ****put in here the date 6 days later in ddmmyy format
autECLSession.autECLPS.SendKeys “gbp”
autECLSession.autECLPS.SendKeys “77”
autECLSession.autECLPS.SendKeys “[enter]”

Function PutText(rw, cl, txt, autECLSession)
autECLSession.autECLPS.SetCursorPos rw, cl
autECLSession.autECLPS.SendKeys “[eraseeof]”
autECLSession.autECLPS.SendKeys txt
End Function

Is this possible?


Solution : VBSCRIPT – Macro question

Hi ,

Impressive!

I have to warn you, I just typed a lot, and came back to the top to warn you.  Good information though, but apparently I’m rather wordy today.

I made a couple slight changes, as you created a variable called “Date”, which could cause conflict (as Date is a VB reserved keyword).  I changed that to vDate.  I also did that to Row (excel vba keyword, probably wont cause a conflict but my better judgment said better safe than sorry) and removed the “Column” variable” (not being used).

I also changed some of your Select Case statements, which you’re using to change ” 1″ to “01” etc.
Instead of using Select Case for it (very good use of it, by the way!!), I trim the GetText (changes ” 1″ to “1”) and add a zero before it.  For the cases of “10” it will make it “010”, so I used Right(variable, 2) to only take the “10” from that.  An example of what I’m talking about is:
FromDateDD = Right(“0” & Trim(autECLSession.autECLPS.GetText(11, 25, 2)), 2)

For the month, I am using a function called MonthName, which returns the month name from the month number.  The arguments for it are    MonthName(MonthNumber, [abbreviation])       (the [ ] means optional, I am using True so it returns the 3 character abbreviation which is what you seem to want).  An example:
FromDateMM = MonthName(autECLSession.autECLPS.GetText(11, 27, 2), True)

The vRow part, where you’re pressing down, could be made a bit more efficient, but since you’re going to put a ‘c’ on the line with the right date, I’ll keep it as-is.  But as an FYI, instead of:

vRow = autECLSession.autECLPS.CursorPosRow
Do Until autECLSession.autECLPS.GetText(vRow, 23, 11) = vDate
autECLSession.autECLPS.SendKeys “[down]”
vRow = autECLSession.autECLPS.CursorPosRow
Loop

You could use:
vRow = autECLSession.autECLPS.CursorPosRow
Do Until autECLSession.autECLPS.GetText(vRow, 23, 11) = vDate
vRow = vRow + 1
Loop

Then use puttext to assign it to a certain row.  There is also an AS400 vb function that searches for text on the screen, and can return where it is found.  A slight example:
Dim Rw, Col
Rw = 1
Col = 1
If autECLSession.autECLPS.SearchText(vDate, 1, rw, col) = True Then
Msgbox “‘” & vDate & “‘ found at position (” & rw & “, ” & col & “)”
Else
Msgbox “‘” & vDate & “‘ not found on the screen”
End If

I think the way you have it just fine though.

Also, unrelated to this, I found a new method in as400 vb as well:
autECLSession.autECLPS.GetTextRect(StartRow, StartCol, EndRow, EndCol )
You can get a block of text.  This would have worked for your var2 in the other macro.  Found that while looking up SearchText.

But anyways, here is your updated code:

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

TheMainSub

Sub TheMainSub()

Dim FromDateDD, ToDateDD, FromDateMM, ToDateMM, FromDate, ToDate, vDate, vRow, EloiseNumber, tempstr1, tempstr2

EloiseNumber = autECLSession.autECLPS.GetText(1, 8, 6)

FromDateDD = Right(“0” & Trim(autECLSession.autECLPS.GetText(11, 25, 2)), 2)
ToDateDD = Right(“0” & Trim(autECLSession.autECLPS.GetText(12, 25, 2)), 2)
FromDateMM = MonthName(autECLSession.autECLPS.GetText(11, 27, 2), True)
ToDateMM = MonthName(autECLSession.autECLPS.GetText(12, 27, 2), True)

FromDate = FromDateDD & FromDateMM
ToDate = ToDateDD & ToDateMM

vDate = FromDate & ToDate

MsgBox vDate

autECLSession.autECLPS.SendKeys “[pf7][pf3]”
Wait
autECLSession.autECLPS.SendKeys “3[enter]”
Wait
autECLSession.autECLPS.SendKeys “RC [enter]”
Wait
autECLSession.autECLPS.SendKeys “[enter]”
Wait
autECLSession.autECLPS.SendKeys “1 [enter]”
tempstr1 = InputBox(“Please enter Family Name”, “Name”)
Wait
PutText 10, 35, tempstr1 & “?”, autECLSession
Wait
autECLSession.autECLPS.SendKeys “[enter]”
Wait
tempstr2 = InputBox(“Please enter 5 digit number”)
Wait
autECLSession.autECLPS.SendKeys “[pf12]”
Wait
autECLSession.autECLPS.SendKeys “[pf24]”
Wait
autECLSession.autECLPS.SendKeys “[pf3]”
Wait
autECLSession.autECLPS.SendKeys “1”
Wait
autECLSession.autECLPS.SendKeys “[enter]”
Wait
autECLSession.autECLPS.SendKeys “TC720 [enter]”
Wait
autECLSession.autECLPS.SendKeys “RC”
PutText 15, 35, EloiseNumber, autECLSession
Wait
autECLSession.autECLPS.SendKeys “[enter]”
Wait
autECLSession.autECLPS.SendKeys “4”
Wait
autECLSession.autECLPS.SendKeys “[enter]”
Wait

vRow = autECLSession.autECLPS.CursorPosRow
Do Until autECLSession.autECLPS.GetText(vRow, 23, 11) = vDate
autECLSession.autECLPS.SendKeys “[down]”
vRow = autECLSession.autECLPS.CursorPosRow
Loop

autECLSession.autECLPS.SendKeys “c”
autECLSession.autECLPS.SendKeys “[enter]”

PutText 18, 25, “JBP”, autECLSession
Wait
PutText 21, 25, tempstr2, autECLSession
Wait
autECLSession.autECLPS.SendKeys “[enter]”

End Sub

Function Wait()
autECLSession.autECLOIA.WaitForAppAvailable
autECLSession.autECLOIA.WaitForInputReady
End Function

Function PutText(rw, cl, txt, autECLSession)
Wait
autECLSession.autECLPS.SetCursorPos rw, cl
autECLSession.autECLPS.SendKeys “[eraseeof]”
autECLSession.autECLPS.SendKeys txt
End Function

You don’t actually need so many date variables (FromDateDD, ToDateDD, FromDateMM, ToDateMM, FromDate, ToDate, vDate), since they’re just manipulating string.  This block:

‘ FromDateDD = Right(“0” & Trim(autECLSession.autECLPS.GetText(11, 25, 2)), 2)
‘ ToDateDD = Right(“0” & Trim(autECLSession.autECLPS.GetText(12, 25, 2)), 2)
‘ FromDateMM = MonthName(autECLSession.autECLPS.GetText(11, 27, 2), True)
‘ ToDateMM = MonthName(autECLSession.autECLPS.GetText(12, 27, 2), True)

‘ FromDate = FromDateDD & FromDateMM
‘ ToDate = ToDateDD & ToDateMM

‘ vDate = FromDate & ToDate

Could be:
vDate = Right(“0” & Trim(autECLSession.autECLPS.GetText(11, 25, 2)), 2) & MonthName(autECLSession.autECLPS.GetText(11, 27, 2), True) & Right(“0” & Trim(autECLSession.autECLPS.GetText(12, 25, 2)), 2) & MonthName(autECLSession.autECLPS.GetText(12, 27, 2), True)

Or, formatted for easier readability:
vDate = Right(“0” & Trim(autECLSession.autECLPS.GetText(11, 25, 2)), 2) & _
MonthName(autECLSession.autECLPS.GetText(11, 27, 2), True) & _
Right(“0” & Trim(autECLSession.autECLPS.GetText(12, 25, 2)), 2) & _
MonthName(autECLSession.autECLPS.GetText(12, 27, 2), True)

But that would be up to you.

Lastly, here is the most efficient way I can think to do the whole thing.  I created a new function, “SendAndWait” to use sendkeys then wait (since you had that so much):

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

TheMainSub

Sub TheMainSub()
Dim vDate, vRow, EloiseNumber, tempStr, vColumn
EloiseNumber = autECLSession.autECLPS.GetText(1, 8, 6)
vDate = Right(“0” & Trim(autECLSession.autECLPS.GetText(11, 25, 2)), 2) & _
MonthName(autECLSession.autECLPS.GetText(11, 27, 2), True) & _
Right(“0” & Trim(autECLSession.autECLPS.GetText(12, 25, 2)), 2) & _
MonthName(autECLSession.autECLPS.GetText(12, 27, 2), True)
SendAndWait “[pf7]”
SendAndWait “[pf3]”
SendAndWait “3[enter]”
SendAndWait “RC [enter]”
SendAndWait “[enter]”
SendAndWait “1 [enter]”
tempStr = InputBox(“Please enter Family Name”, “Name”)
PutText 10, 35, tempStr & “?[enter]”, autECLSession
tempStr = InputBox(“Please enter 5 digit number”)
SendAndWait “[pf12]”
SendAndWait “[pf24]”
SendAndWait “[pf3]”
SendAndWait “1[enter]”
SendAndWait “TC720 [enter]”
SendAndWait “RC”
PutText 15, 35, EloiseNumber & “[enter]”, autECLSession
SendAndWait “4[enter]”

vColumn = autECLSession.autECLPS.CursorPosCol
vRow = autECLSession.autECLPS.CursorPosRow
autECLSession.autECLPS.SearchText vDate, 1, vRow, vColumn
PutText vRow, vColumn, “c[enter]”, autECLSession
PutText 18, 25, “JBP”, autECLSession
PutText 21, 25, tempStr, autECLSession
SendAndWait “[enter]”
End Sub

Function Wait()
autECLSession.autECLOIA.WaitForAppAvailable
autECLSession.autECLOIA.WaitForInputReady
End Function

Function SendAndWait(txt)
Wait
autECLSession.autECLPS.SendKeys “txt”
Wait
End Function

Function PutText(rw, cl, txt, autECLSession)
Wait
autECLSession.autECLPS.SetCursorPos rw, cl
autECLSession.autECLPS.SendKeys “[eraseeof]”
SendAndWait txt
End Function