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.SetConnectio
Dim tempstr
autECLSession.autECLPS.Sen
autECLSession.autECLPS.Sen
autECLSession.autECLPS.Sen
autECLSession.autECLPS.Sen
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.Sen
autECLSession.autECLPS.Sen
autECLSession.autECLPS.Sen
Function PutText(rw, cl, txt, autECLSession)
autECLSession.autECLPS.Set
autECLSession.autECLPS.Sen
autECLSession.autECLPS.Sen
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.autECLP
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.au
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.Cur
Do Until autECLSession.autECLPS.Get
autECLSession.autECLPS.Sen
vRow = autECLSession.autECLPS.Cur
Loop
You could use:
vRow = autECLSession.autECLPS.Cur
Do Until autECLSession.autECLPS.Get
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.Sea
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.Get
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.SetConnectio
TheMainSub
Sub TheMainSub()
Dim FromDateDD, ToDateDD, FromDateMM, ToDateMM, FromDate, ToDate, vDate, vRow, EloiseNumber, tempstr1, tempstr2
EloiseNumber = autECLSession.autECLPS.Get
FromDateDD = Right(“0” & Trim(autECLSession.autECLP
ToDateDD = Right(“0” & Trim(autECLSession.autECLP
FromDateMM = MonthName(autECLSession.au
ToDateMM = MonthName(autECLSession.au
FromDate = FromDateDD & FromDateMM
ToDate = ToDateDD & ToDateMM
vDate = FromDate & ToDate
MsgBox vDate
autECLSession.autECLPS.Sen
Wait
autECLSession.autECLPS.Sen
Wait
autECLSession.autECLPS.Sen
Wait
autECLSession.autECLPS.Sen
Wait
autECLSession.autECLPS.Sen
tempstr1 = InputBox(“Please enter Family Name”, “Name”)
Wait
PutText 10, 35, tempstr1 & “?”, autECLSession
Wait
autECLSession.autECLPS.Sen
Wait
tempstr2 = InputBox(“Please enter 5 digit number”)
Wait
autECLSession.autECLPS.Sen
Wait
autECLSession.autECLPS.Sen
Wait
autECLSession.autECLPS.Sen
Wait
autECLSession.autECLPS.Sen
Wait
autECLSession.autECLPS.Sen
Wait
autECLSession.autECLPS.Sen
Wait
autECLSession.autECLPS.Sen
PutText 15, 35, EloiseNumber, autECLSession
Wait
autECLSession.autECLPS.Sen
Wait
autECLSession.autECLPS.Sen
Wait
autECLSession.autECLPS.Sen
Wait
vRow = autECLSession.autECLPS.Cur
Do Until autECLSession.autECLPS.Get
autECLSession.autECLPS.Sen
vRow = autECLSession.autECLPS.Cur
Loop
autECLSession.autECLPS.Sen
autECLSession.autECLPS.Sen
PutText 18, 25, “JBP”, autECLSession
Wait
PutText 21, 25, tempstr2, autECLSession
Wait
autECLSession.autECLPS.Sen
End Sub
Function Wait()
autECLSession.autECLOIA.Wa
autECLSession.autECLOIA.Wa
End Function
Function PutText(rw, cl, txt, autECLSession)
Wait
autECLSession.autECLPS.Set
autECLSession.autECLPS.Sen
autECLSession.autECLPS.Sen
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.autECLP
‘ ToDateDD = Right(“0” & Trim(autECLSession.autECLP
‘ FromDateMM = MonthName(autECLSession.au
‘ ToDateMM = MonthName(autECLSession.au
‘
‘ FromDate = FromDateDD & FromDateMM
‘ ToDate = ToDateDD & ToDateMM
‘
‘ vDate = FromDate & ToDate
Could be:
vDate = Right(“0” & Trim(autECLSession.autECLP
Or, formatted for easier readability:
vDate = Right(“0” & Trim(autECLSession.autECLP
MonthName(autECLSession.au
Right(“0” & Trim(autECLSession.autECLP
MonthName(autECLSession.au
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.SetConnectio
TheMainSub
Sub TheMainSub()
Dim vDate, vRow, EloiseNumber, tempStr, vColumn
EloiseNumber = autECLSession.autECLPS.Get
vDate = Right(“0” & Trim(autECLSession.autECLP
MonthName(autECLSession.au
Right(“0” & Trim(autECLSession.autECLP
MonthName(autECLSession.au
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.Cur
vRow = autECLSession.autECLPS.Cur
autECLSession.autECLPS.Sea
PutText vRow, vColumn, “c[enter]”, autECLSession
PutText 18, 25, “JBP”, autECLSession
PutText 21, 25, tempStr, autECLSession
SendAndWait “[enter]”
End Sub
Function Wait()
autECLSession.autECLOIA.Wa
autECLSession.autECLOIA.Wa
End Function
Function SendAndWait(txt)
Wait
autECLSession.autECLPS.Sen
Wait
End Function
Function PutText(rw, cl, txt, autECLSession)
Wait
autECLSession.autECLPS.Set
autECLSession.autECLPS.Sen
SendAndWait txt
End Function