onclick submit button vba html - html

I have an HTML page that has multilpe submit buttons with different "value=xxx" parameters. I need to submit the form with the right value via VBA code in MSAccess module!
<form method="post" name="data" action="/data1/infoProjetFO.php" onsubmit="return(checkPQ())" >
<input type="submit" name="Btn" value="SaveRecord">
<input TYPE="submit" name="Btn" VALUE="Distribution" id="idBtnDistribution" style="visibility:visible;" />&nbsp
'========================================================
sURL = "http://corp.myintrranet.com/index.php"
Set tBrowser = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")
tBrowser.navigate sURL
' Wait till the Browser is loaded
Do While tBrowser.Busy Or tBrowser.ReadyState <> 4
DoEvents
Debug.Print tBrowser.ReadyState
Loop
' here I have code that can get different values and also insert values with no problem!
'here is what I've tried!
tBrowser.Document.Forms("data").all("Btn").Value = "SaveRecord"
tBrowser.Document.Forms("data").all("Btn").Click
' or I tried
tBrowser.Document.Forms("data").all("Btn").submit
combinations I've tried to insert the proper submit button value result in trapping error code 438, object doesn't support ....
So I need to click or submit with the right value!
Thanks
Pete

Found the solution!
Set Formtst = tBrowser.Document.getElementsByTagName("input")
For Each btest In Formtst
If btest.Value = "SaveRecord" Then
btest.Click
Exit For
End If
Next
Thanks
Pete

Related

How to display Success message after clicking Save in HTML page

I have an html form containing this code which runs on IIS:
<form action="http://server1/data.asp" method="POST">
Your Name: <input name="name" type="text">
<input value="Save" type="submit">
</form>
After user submits this form it runs the code in data.asp which displays a Success message with code to write to a text file (file1.txt):
Success!
<%
Dim fso
Dim tst
Set fso=Server.CreateObject("Scripting.FileSystemObject")
Set tst = fso.OpenTextFile("C:\Inetpub\wwwroot\data\file1.txt", 8, true)
tst.writeline "Name = " & Request.Form("name")
tst.writeline "" & Request.Form("")
tst.close
Set tst = Nothing
Set fso = Nothing
%>
This works but it just shows a page with Success! and stays there. What I'd really like is:
After user submits the form by clicking Save I'd like a little message box that says "Success" and remain on the same html page or go to a url I specify within the code.
I don't want to use Java or 3rd party extensions. This is an HTML page that runs the data.asp page on submit and I'd like it to stay that way if possible.
So how would I modify the html and/or data.asp page to do this?
You can do like this:
Response.Redirect "https://www.yoursite.com/thankyou.asp"
Instead of returning "Success!" as your response content you can return the form content you have above, this way you can use the same file for the GET and POST methods, with an condition on your asp logic to execute only on POST requests and return a success alert when the code is excuted successfully.
<form action="http://server1/index.asp" method="POST">
Your Name: <input name="name" type="text">
<input value="Save" type="submit">
</form>
<%
If (Request.Method = "POST") Then
Dim fso
Dim tst
Set fso=Server.CreateObject("Scripting.FileSystemObject")
Set tst = fso.OpenTextFile("C:\Inetpub\wwwroot\data\file1.txt", 8, true)
tst.writeline "Name = " & Request.Form("name")
tst.writeline "" & Request.Form("")
tst.close
Set tst = Nothing
Set fso = Nothing
response.write ("<script>alert('Success!');</script>")
End If
%>
Found the solution by adding an extra page to the mix (redir2form.asp):
in data.asp:
<%
Dim fso
Dim tst
Set fso=Server.CreateObject("Scripting.FileSystemObject")
Set tst = fso.OpenTextFile("C:\Inetpub\wwwroot\data\file1.txt", 8, true)
tst.writeline "Name = " & Request.Form("name")
tst.writeline "" & Request.Form("")
tst.close
Set tst = Nothing
Set fso = Nothing
%>
Response.Redirect "http://server1/redir2form.asp"
in redir2form.asp:
<%
response.write ("<script>alert('Success!');</script>")
%>
<meta http-equiv="refresh" content="1; url=http://server1/index.htm" />
Index.htm has the form action going to the data.asp page.
Not as neat as it could be but that's how I got it to work. After a user submits the form he gets the "Success!" message box and once they click OK they're redirected back to the form page.

Click on Checkbox in Website using Excel VBA

There is a website that has some data I want for my work. I login check some checkbox and submit, then the website will send me an email with my data. But it takes way too long to receive my information so I want to automate it so everyday first hour in the morning the information is requested, like that I will already have it on my email when I need it.
I modified some code and I already managed to login and go to the page where I need to click the checkbox (there are three of them) and then click on a submit button.
Sub GetTable()
Dim ieApp As InternetExplorer
Dim ieDoc As Object
Dim ieTable As Object
Dim chkBox As Object
'create a new instance of ie
Set ieApp = New InternetExplorer
'you don’t need this, but it’s good for debugging
ieApp.Visible = True
'assume we’re not logged in and just go directly to the login page
ieApp.Navigate "http://mydata/aspx/mydataLogon.aspx?Language=2"
Do While ieApp.Busy: DoEvents: Loop
Do Until ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop
Set ieDoc = ieApp.Document
'fill in the login form – View Source from your browser to get the control names
With ieDoc.forms(0)
.txtUsername.Value = "usertest"
.txtPassword.Value = "test123"
.Submit
End With
Do While ieApp.Busy: DoEvents: Loop
Do Until ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop
'now that we’re in, go to the page we want
ieApp.Navigate "http://mydata/InventoryTracking/aspx/rptDefault.aspx?rpt=../aspx/invRptDetailReport.aspx"
Set ieDoc = ieApp.Document
With ieDoc
'I tried with getElementbyId, I dont get any error but the chkbox still comes as with a nothing value
Set chkBox = ieDoc.getElementByid("cblPlants_0")
'therefore these give error too, I dont know why. A an object variable or with block variable not set error
chkBox.Click
chkBox.Checked = True
'here I get an object variable or with block variable not set error
ieDoc.getElementByid("cblPlants_0").Click
.Submit
End With
End sub
The checkbox control I want is inside of this:
'first there is a form and this is how the iframe is first called I think
<form name="_ctl1" method="post" action="rptDefault.aspx" id="_ctl1">
<table width="100%" HEIGHT="100%" cellpadding="0" cellspacing="0" border="0">
<TR>
<TD CLASS="Normal" COLSPAN="4"><IFRAME ID="IFRAME1" NAME="IFRAME1" SRC="../aspx/invRptDetailReport.aspx" frameborder="0" width="100%" height="100%"></IFRAME></TD>
</TR>
'Now the iframe1 goes like this
<form name="frmRptDetailReport" method="POST" action="invRptDetailReport.aspx" id="frmRptDetailReport">
<table id="htblMainBody" width="100%" cellpadding="0" cellspacing="0" border="0" bgcolor="#E5DBE2">
<tr><td <a id="lbtnSelect" href="javascript:__doPostBack('lbtnSelect','')"</a>
<div id="divChkboxlist" class="scrollingControlContainer scrollingCheckBoxList" onscroll="saveScrollPos();">
<table id="cblPlants" border="0" style="font-family:Arial;font-size:11px;width:275px;overflow: scroll"><tr>
<tr><td><input id="cblPlants_0" type="checkbox" name="cblPlants:0" onclick="javascript:setTimeout('__doPostBack(\'cblPlants$0\',\'\')', 0)" language="javascript" /><label for="cblPlants_0">1X1 -Confecciones</label></td>
</tr>
How can I check this check box on this page? After the checkbox is checked I will receive the email I want.
If you need more information please tell me
Try
ieDoc.querySelector("#cblPlants_0").click
Equivalent to:
ieDoc.getElementById("cblPlants_0").click
Remember to have proper page load waits after the .Navigate step before attempting the click
While ieApp.Busy Or ieApp.readyState < 4: DoEvents: Wend
Set ieDoc = ieApp.Document
ieDoc.getElementById("cblPlants_0").click
You may need an additional wait before the click. Step through with F8 to test.
You could also try executing the javascript
ieDoc.parentWindow.execScript "javascript:setTimeout('__doPostBack(\'cblPlants$0\',\'\')', 0)"

How to call html form fields in vbscript dynamically in a loop

So I have an html form created in classic asp that has about 25 check boxes with different labels. The checkboxes are written to the page via a loop that grabs the label values from a table and each checkbox is named similarly ("decreason1","decreason2","decreason3",ect...) using a loop variable.
I use a vbscript at the end of the page to validate the data on the page before passing with a submit button. I need to make sure that at least one of the checkboxes is checked before submitting the form.
dim i, checkedvalue ;
checkedvalue = false
for i = 1 to 25
if document.rtftadd.decreason1.checked = true then
checkedvalue = true
end if
next
I need the "document.rtftadd.decreason1.checked" to change with the loop to decreason2, decreason3
I'm not sure how to go about doing that.
Any help would be greatly appreciated.
There are a few different ways to do this and if you are seeking a validation method prior to form submission then JavaScript may be a better solution.
However, in an effort to address your question using only ASP Server side code for VBScript and considering your question suggest that you do not care which box is selected nor how many are selected then the following code may be a working solution for you.
By looking at all of the elements sent via the form and checking if your form name (without number) exist then this same block of code will work even if you increase or decrease the number of check boxes you are validating for input.
<%#LANGUAGE="VBSCRIPT"%>
<%
dim checkedvalue
checkedvalue = false
if request("btn1") = "Submit" then
For each item in request.form
if instr(item,"decreason") > 0 then
checkedvalue = true
end if
next
response.write "Checked Value = " & checkedvalue & "<br><br>"
end if
%>
<html>
<head></head>
<body>
<form method="post" action="index.asp" name="rtftadd">
<input type="checkbox" name="decreason1"> Box 1<br>
<input type="checkbox" name="decreason2"> Box 2<br>
<input type="checkbox" name="decreason3"> Box 3<br>
<input type="checkbox" name="decreason4"> Box 4<br>
<input type="checkbox" name="decreason5"> Box 5<br>
<br>
<input type="submit" value="Submit" name="btn1">
</form>
</body>
</html>

Calling a vbscript funciton to update a SQL table from an HTML form generated on an asp-classic page

Having a hard time with updating a SQL table from an HTML form generated on an asp-classic page. The page dynamically creates a table based on a SQL query; I've added a form for the purpose of editing certain fields displayed in the table but have been unable to trigger the function (i.e. onclick) that the form button calls using the code below. I've tried multiple variations of the syntax used for calling the function via VBscript and am missing something entirely. I'm wondering if I'm trying something that can't be done in the asp-classic environment due to the server side code being used and the limitations that go with that (as well as my trying to use the same page to generate the results). I know the default behavior for the form is to refresh the page if I don't specify a different page. In the code below, I'm just trying to confirm the behavior before I add the SQL update statement to the function. (I'm typically only retrieving or inserting data for a web site - very little experience updating the data between a single page like this.)
<br>
<form method="POST" id="form" action="">
<table>
<tr>
<td>
<select name="state">
<%
'populate the dropdown selection for the state within the form
do until rs.eof
For each x in rs.fields
response.write "<option value=" & x.Value & ">" & x.Value & "</option>" & vbNewLine
next
rs.movenext
loop
%>
</select>
</td>
<td>
<select name="ps">
<option value="blank"></option>
<option value="prime">Primary</option>
<option value="secondary">Secondary</option>
</select>
</td>
<td>
<input name="emp_num" size="5" maxlength="5" rows="1" ></textarea>
</td>
<td>
<input type="submit" onclick="Go" value="Update record"/>
</td>
</tr>
</table>
</form>
<%
function Go() {
msgbox "test"
//additional SQL code would be included here once the function actually works
}
%>
<%
'close the DB connection
dbconn.close
%>
</body>
</html>
You're trying to mix server-side code with client-side code, and It Don't Work Like ThatTM.
Here's a very rough outline of how you could get information from the user, process it, and display it, all on the same asp page. Note the utter lack of JavaScript. :)
<html>
<head>
<title>My Page</title>
<link rel="stylesheet" type="text/css" href="css/stylestuff.css">
<%
Dim rs, sql, conn
Dim mylist, myval1, myval2, i
myval1 = Request.Form("val1")
myval2 = Request.Form("val2")
'- If the form hasn't been submitted yet, myval1&2 will be the special value Empty,
'- but you can treat them as a blank string ("") for all intents and purposes.
If Validate(myval1, myval2) = True and myval1 & myval2 <> "" Then
DoStuffWith myval1, myval2
End If
%>
</head>
<body>
<h1>My Page</h1>
<form method="post" action="">
<p>Select one: <select name="val1" size="1">
<%
ListStuff mylist
For i = 0 to UBound(mylist,1)
response.write "<option value='" & mylist(0,i) & "'"
If myval & "" = mylist(0,i) & "" Then response.write " selected"
response.write ">" & mylist(1,i) & "</option>"
Next
%>
</select></p>
<p>Write something here:
<input type="text" name="val2" value="<%=myval2%>" size="10"></p>
<p><input type="submit" name="btn" value="Submit"></p>
</form>
<%
If myval1 & myval2 <> "" Then
DisplayStuff myval1, myval2
End If
%>
</body>
</html>
<%
Sub ListStuff(L)
sql = "Select [...] From [...] Where [...]"
Set rs = Server.Createobject("ADODB.Recordset")
rs.Open sql, "connection string (or previously-opened connection object)", 1,2
If Not rs.EOF Then
L = rs.GetRows
Else
Redim L(1,0)
L(0,0) = 0 : L(1,0) = "missing!"
End If
rs.Close
Set rs = Nothing
End Sub
'---------------------------------
Function Validate(v1,v2)
dim f
f = True
If Not Isnumeric(v1) Then f = False
If Len(v2) > 10 Then f = False
Validate = f
End Function
'---------------------------------
Sub DoStuffWith(v1,v2)
'- table-creation (or whatever) code goes here
End Sub
'---------------------------------
Sub DisplayStuff(v1,v2)
'- display code goes here
End Sub
%>

VBA simple parse

I am using vba ( & internetexplorer object) to convert CSUIP to ISIN (these are financial security unique identification codes) from the following website http://www.isincodes.net/convert-cusip-to-isin.php.
I have so far created a vba code (in following order) that:
1. manipulates the US/CA dropdown box
2. inputs my CUSIP into the inputbox
3. clicks the "Covert"Button
Sub cusip_is2()
'declare variables
Set objie = CreateObject("internetExplorer.Application")
objie.Visible = True
'go to website
objie.navigate ("http://www.isincodes.net/convert-cusip-to-isin.php")
Do
DoEvents
Loop Until objie.readyState = 4
'input the CA in the country ID step1
objie.document.getelementbyID("country").Value = "CA"
'input 912796HQ5 in text box as desired CUSIP to convert
objie.document.getelementbyID("appendedInputButton").Value = "912796HQ5"
'press the button to convert
Set ElementCol = objie.document.getElementsByTagName("button")
For Each btnInput In ElementCol
btnInput.Click
Next btnInput
'wait until the pages loads (not sure if I need this)
Do
DoEvents
Loop Until objie.readyState = 4
'added extra few seconds incase HMTL document is updating
Application.Wait Now + TimeSerial(0, 0, 1)
'created userform to look at the data to see if I can find the converted CUSIP - WHICH I CANNOT (HELPPPPP!!!!)
Userfrom_Web_Code.Textbox_Webform.Text = objie.body.innerText
Userfrom_Web_Code.Show
'clean up and try again for the next failure LOL
objie.Quit
Set objie = Nothing
End Sub
From my research I know that I keep getting the source code but I want the DOM, this is where I am having trouble. Please see EXTRACT of source code on the website once I have inputted "CA" for country and the CUSIP "912796HQ5", and note that the id tag with results contains nothing.
<p>Enter a CUSIP and a correct ISIN will be calculated for you, if possible:</p>
<form class="form-inline">
<div class="input-append">
<select id="country" style="width:60px;">
<option value="CA">CA</option>
<option value="US" selected>US</option>
</select>
<input type="text" maxlength="9" class="span3" id="appendedInputButton">
<button type="button" class="btn">Convert</button>
</div>
</form>
<div id="results"></div>
<br><br>
</div>
<div class="span4">
<h4>What is a CUSIP?</h4>
<p>A CUSIP is a 9-character alphanumeric code which identifies a North American financial security.</p>
<p>
A CUSIP consists of three parts:<br>
• A six-character issuer code<br>
• A two-character issue number<br>
• A single check digit.<br><br>
For example: 780259206 (Royal Dutch Shell-A)
</p>
conversely when I check the inspect element which takes me to the "DOM" then I can see this under id results.
<div id="results" style="display: block;"><br>
<b>Strict Standards</b>: Non-static method Validate_CUSIP::validate() should not be called statically in <b>/home/isincode/public_html/action/c.php</b> on line <b>15</b><br>
<p class="text-success"><strong>Correct ISIN: CA912796HQ58</strong></p></div>
Can anyone please help me solve this problem in vba.
Note that I know that you can create an algorithm yourself in vba/excel to do the conversion of CUSIP to ISIN however I want to do this project in VBA to learn parsing. I am also very new to coding and have had limited exposure to please be kind and explain everything you suggest.
Please see if the following edit will suit you:
....
....
'added extra few seconds incase HMTL document is updated
Application.Wait Now + TimeSerial(0, 0, 2)
Dim ISIN As String
ISIN = Right(objie.document.getelementbyID("results").innerText,12) 'the 12 rightmost characters
Debug.Print "ISIN you are looking for is: " & ISIN
....
Edit the code to do something usefull with the ISIN-string