ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Upload a file to a web using VBA (https://www.excelbanter.com/excel-programming/438463-upload-file-web-using-vba.html)

Bruce[_11_]

Upload a file to a web using VBA
 
There is a site on our company's INTRANET that I need to upload a file to.
This is a FORM that needs the fileName to be populated, but I have not been
able to get it to accept fileName from any means I have tried. I have ALL of
the other fields working and it is to the point all I need to do is manually
select the file, but I need to automate this.

I have been able to access the site, stuff all kinds of other info into the
websites varables, but I have NOT been able to stuff the fileName to upload.
Here is the code (including some failed attempts) to get the file name into
the web page.
First, I am opening the page and logging in with a userform ("fNTLogin")


Code:


Function ProcessScout() As Boolean
    Dim oScout As Object
    Dim ScoutWeb As String
    Dim fileName As String
    Dim newscoutname As String
    Dim F As fNTLogin
    'name of the file to upload
    newscoutname = "h:\Scout\ScoutInPut" &
Application.Substitute(Format(Date, "yyyymmdd"), "/", "-") & ".txt"

    GetAccountList 'function to get a list of account numbers
    ScoutWeb =
"http://internalWebsite.com/network_monitoring/servlet/network_monitoring"
    Set oScout = OpenScout(ScoutWeb) 'opens the site and gets the object
'oScout'
    'waitforweb2 (oScout)
            While oScout.busy
        DoEvents
    Wend
    While oScout.ReadyState < 4
        DoEvents
    Wend
    spage = oScout.document.DocumentElement.outerHTML ' the the outer html
for testing purposes
    webWait = oScout.document.Title

'test for logged in
    If InStr(spage, "Please enter your NT user name and password") 0 Then
'login
    Do While InStr(spage, "Please enter your NT user name and password") 0
    Set F = New fNTLogin  'Creates the login form
          F.Value1 = ""  'set username value to ""
          F.Value2 = ""  'set password value to ""
          F.Display  'shows the form
          pub_UserName = F.Result1 'sets the username for other logins
          pub_pw = F.Result2  'sets the pw for other logins
        Set F = Nothing 'distroys the form
        With oScout.document.form1
        .all.Item("user").Value = pub_UserName
        .all.Item("pass").Value = pub_pw
        .Submit
    End With
    While oScout.busy
        DoEvents
    Wend
    While oScout.ReadyState < 4
        DoEvents
    Wend
    spage = oScout.document.DocumentElement.outerHTML 'resetting spage for
testing if logged in
Loop

    End If
  ' We are now logged in
    oScout.Navigate
"http://internalwebsite.com:8070/network_monitoring/servlet/network_monitoring?reqType=cmLookupPage"
' move to the page to upload account info
  While oScout.busy
        DoEvents
    Wend
    While oScout.ReadyState < 4
        DoEvents
    Wend
    oScout.document.form1.searchType.Value = "bulkaccount"
    oScout.document.form1.bulkLoadType.Value = "account"
    oScout.document.getElementById("divMAC").Style.visibility = "hidden"
    oScout.document.getElementById("divPhone").Style.visibility = "hidden"
    oScout.document.getElementById("divAccount").Style.visibility = "hidden"
    oScout.document.getElementById("divNode").Style.visibility = "hidden"
    oScout.document.getElementById("divBulkMAC").Style.visibility =
"visible"
    oScout.document.form1.Mac.Value = ""
    oScout.document.form1.account.Value = ""
    oScout.document.form1.phone.Value = ""
    oScout.document.form1.Node.Value = ""
    oScout.document.form1.reqType.Value = "onDemandBatch"
    oScout.document.form1.Encoding = "multipart/form-data"

    With oScout.document.form1  'document name = "document" form name =
"form1"
        .report(3).Click 'select the third report option  'this works
        .Email.Value = " ' this works
        .FileName.Value = "H:\Scout\ScoutInPut1-7-2010.txt"    'this does
not error, but it does not stuff the name
    End With

  '  UploadFile oScout,  "H:\Scout\ScoutInPut1-7-2010.txt", "fileName" '
another failed attempt

'Failed attempt below
 '      Set Files = oScout.document.getElementsByTagName("input")
 '      For Each File In Files
 '
 '          If File.Type = "file" Then
 '              If SetFeatureTo Then
 '                  check.Checked = True
 '                  ' Exit Sub
 '              Else
 '                  ' check.Checked = False
 '                  ' Exit Sub
 '              End If
 '          End If
 '    '  End If
 '    '  r = check.Value
 '  Next


    oScout.document.form1.fileName.Value = "H:\Scout\ScoutInPut1-7-2010.txt"
' no errors but does not populate    Call setfeature(oScout, "billing",
True)
    Call setfeature(oScout, "ecx", True)
    Call setfeature(oScout, "gds", True)
    Call setfeature(oScout, "bacc", True)
    Call setfeature(oScout, "switch", True)
    With oScout.document.form1
        .all.Item("fileName").Value = "H:\Scout\ScoutInPut1-12-2010.txt"

        '.all.Item("pass").Value = pub_pw
        '.Submit.Click
    End With

    MsgBox "Please select file and pres Submit"  '<< this is to handle it
in the
                'meantime until I get the stuffing of the file name working
    oScout.document.form1.Submit
    spage = oScout.document.DocumentElement.Title
    Debug.Print spage

    webWait = oScout.document.Title

End Function



Here is the webpage html code that needs to recieve the filename:

Enter Email Address:<br
<input type=text size=25 name=email value=""<br<br
Select File To Upload:<br
<input type=file name=fileName<br



Thanks
Bruce


Tim Williams[_2_]

Upload a file to a web using VBA
 
Typically the only way to assign the file on a HTML form file element is to
actually click the button and select the file.
The input element's functionality is not exposed to scripting or automation
for security reasons.

If it were possible to set it programmatically (or by pre-populating the
path in the page HTML) then it would be possible to grab files without folk
knowing. I realize this is an intranet application, but I'm not sure
there's any way to relax that security.

Tim


"Bruce" wrote in message
...
There is a site on our company's INTRANET that I need to upload a file to.
This is a FORM that needs the fileName to be populated, but I have not
been able to get it to accept fileName from any means I have tried. I have
ALL of the other fields working and it is to the point all I need to do is
manually select the file, but I need to automate this.

I have been able to access the site, stuff all kinds of other info into
the websites varables, but I have NOT been able to stuff the fileName to
upload.
Here is the code (including some failed attempts) to get the file name
into the web page.
First, I am opening the page and logging in with a userform ("fNTLogin")


Code:


Function ProcessScout() As Boolean
    Dim oScout As Object
    Dim ScoutWeb As String
    Dim fileName As String
    Dim newscoutname As String
    Dim F As fNTLogin
    'name of the file to upload
    newscoutname = "h:\Scout\ScoutInPut" &
Application.Substitute(Format(Date, "yyyymmdd"), "/", "-") & ".txt"

    GetAccountList 'function to get a list of account numbers
    ScoutWeb =
"http://internalWebsite.com/network_monitoring/servlet/network_monitoring"
    Set oScout = OpenScout(ScoutWeb) 'opens the site and gets the object
'oScout'
    'waitforweb2 (oScout)
            While oScout.busy
        DoEvents
    Wend
    While oScout.ReadyState < 4
        DoEvents
    Wend
    spage = oScout.document.DocumentElement.outerHTML ' the the outer html
for testing purposes
    webWait = oScout.document.Title

'test for logged in
    If InStr(spage, "Please enter your NT user name and password") 0 Then
'login
    Do While InStr(spage, "Please enter your NT user name and password")
0
    Set F = New fNTLogin  'Creates the login form
          F.Value1 = ""  'set username value to ""
          F.Value2 = ""  'set password value to ""
          F.Display  'shows the form
          pub_UserName = F.Result1 'sets the username for other logins
          pub_pw = F.Result2  'sets the pw for other logins
        Set F = Nothing 'distroys the form
        With oScout.document.form1
        .all.Item("user").Value = pub_UserName
        .all.Item("pass").Value = pub_pw
        .Submit
    End With
    While oScout.busy
        DoEvents
    Wend
    While oScout.ReadyState < 4
        DoEvents
    Wend
    spage = oScout.document.DocumentElement.outerHTML 'resetting spage for
testing if logged in
Loop

    End If
  ' We are now logged in
    oScout.Navigate
"http://internalwebsite.com:8070/network_monitoring/servlet/network_monitoring?reqType=cmLookupPage"
' move to the page to upload account info
  While oScout.busy
        DoEvents
    Wend
    While oScout.ReadyState < 4
        DoEvents
    Wend
    oScout.document.form1.searchType.Value = "bulkaccount"
    oScout.document.form1.bulkLoadType.Value = "account"
    oScout.document.getElementById("divMAC").Style.visibility = "hidden"
    oScout.document.getElementById("divPhone").Style.visibility = "hidden"
    oScout.document.getElementById("divAccount").Style.visibility =
"hidden"
    oScout.document.getElementById("divNode").Style.visibility = "hidden"
    oScout.document.getElementById("divBulkMAC").Style.visibility =
"visible"
    oScout.document.form1.Mac.Value = ""
    oScout.document.form1.account.Value = ""
    oScout.document.form1.phone.Value = ""
    oScout.document.form1.Node.Value = ""
    oScout.document.form1.reqType.Value = "onDemandBatch"
    oScout.document.form1.Encoding = "multipart/form-data"

    With oScout.document.form1  'document name = "document" form name =
"form1"
        .report(3).Click 'select the third report option  'this works
        .Email.Value = " ' this works
        .FileName.Value = "H:\Scout\ScoutInPut1-7-2010.txt"    'this does
not error, but it does not stuff the name
    End With

  '  UploadFile oScout,  "H:\Scout\ScoutInPut1-7-2010.txt", "fileName" '
another failed attempt

'Failed attempt below
'      Set Files = oScout.document.getElementsByTagName("input")
'      For Each File In Files
'
'          If File.Type = "file" Then
'              If SetFeatureTo Then
'                  check.Checked = True
'                  ' Exit Sub
'              Else
'                  ' check.Checked = False
'                  ' Exit Sub
'              End If
'          End If
'    '  End If
'    '  r = check.Value
'  Next


    oScout.document.form1.fileName.Value =
"H:\Scout\ScoutInPut1-7-2010.txt" ' no errors but does not populate
Call setfeature(oScout, "billing", True)
    Call setfeature(oScout, "ecx", True)
    Call setfeature(oScout, "gds", True)
    Call setfeature(oScout, "bacc", True)
    Call setfeature(oScout, "switch", True)
    With oScout.document.form1
        .all.Item("fileName").Value = "H:\Scout\ScoutInPut1-12-2010.txt"

        '.all.Item("pass").Value = pub_pw
        '.Submit.Click
    End With

    MsgBox "Please select file and pres Submit"  '<< this is to handle it
in the
                'meantime until I get the stuffing of the file name working
    oScout.document.form1.Submit
    spage = oScout.document.DocumentElement.Title
    Debug.Print spage

    webWait = oScout.document.Title

End Function




Here is the webpage html code that needs to recieve the filename:

Enter Email Address:<br
<input type=text size=25 name=email value=""<br<br
Select File To Upload:<br
<input type=file name=fileName<br



Thanks
Bruce




joel[_561_]

Upload a file to a web using VBA
 

Have you been able to enter you email address?


The tag "Input" is an array You may be putting filename in the wrong
index of the array. Indexing will alway start with 0 (which is item 1).
I can't tell from your code how many Input tags are on your page.

One thing that I've been able to open the webpage manually (this
doesn't work when the page is called from VBa) and then enter the a
string into the input box. I usually just put my name into the box I'm
trying to located. Then use the developers tool on the IE explorer by
typing F12. There is a search box in the developers tool where you can
search for the string that you put into the box.


--
joel
------------------------------------------------------------------------
joel's Profile: 229
View this thread: http://www.thecodecage.com/forumz/sh...d.php?t=170493

Microsoft Office Help


Bruce[_11_]

Upload a file to a web using VBA
 
I have been able to populate email...
I think Tim is gonna be right, I have seen several other referances to
that...
I will try the array method and see if that works.
I may have to try sendkey, if I can figure out how to place the curser in
the right box...

Thanks
Bruce

"joel" wrote in message
...

Have you been able to enter you email address?


The tag "Input" is an array You may be putting filename in the wrong
index of the array. Indexing will alway start with 0 (which is item 1).
I can't tell from your code how many Input tags are on your page.

One thing that I've been able to open the webpage manually (this
doesn't work when the page is called from VBa) and then enter the a
string into the input box. I usually just put my name into the box I'm
trying to located. Then use the developers tool on the IE explorer by
typing F12. There is a search box in the developers tool where you can
search for the string that you put into the box.


--
joel
------------------------------------------------------------------------
joel's Profile: 229
View this thread:
http://www.thecodecage.com/forumz/sh...d.php?t=170493

Microsoft Office Help




All times are GMT +1. The time now is 09:41 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com