Vba 将文件上载到网站

Vba 将文件上载到网站,vba,excel,file-upload,image-uploading,Vba,Excel,File Upload,Image Uploading,我仍然是VBA的初学者,所以如果您需要进一步的解释或者我没有正确描述我的问题,请让我知道 我正在努力实现以下目标: 从我的电脑上传一个文件到一个网站(你只能在登录时尝试上传,很遗憾我无法共享链接) 为了实现这一目标,我需要做三件事: 1) 点击“上传”按钮 2) 将文件路径插入弹出窗口的搜索字段 3) 单击“打开”按钮 该网站如下所示: 弹出窗口如下所示: 上载字段的HTML代码如下所示: <div class="button-wrapper"> <input cl

我仍然是VBA的初学者,所以如果您需要进一步的解释或者我没有正确描述我的问题,请让我知道

我正在努力实现以下目标: 从我的电脑上传一个文件到一个网站(你只能在登录时尝试上传,很遗憾我无法共享链接)

为了实现这一目标,我需要做三件事: 1) 点击“上传”按钮 2) 将文件路径插入弹出窗口的搜索字段 3) 单击“打开”按钮

该网站如下所示:

弹出窗口如下所示:

上载字段的HTML代码如下所示:

<div class="button-wrapper">
    <input class="design-file-input" type="file">
    <a class=" button prio1" href="javascript:void(0);">Design hochladen</a>
</div>
然后设法让网站提交我的作品

创意2

单击“设计手册”按钮

但是弹出窗口出现了,我不知道如何用VBA控制它


我很高兴听到并尝试你的建议!!如果你需要任何进一步的细节,请告诉我!如果您能给我任何建议,非常感谢

直接将文件路径指定给该特定HTML元素的值是行不通的。不久前,我也遇到了同样的问题(自动将文件传递到上载文件对话框)。经过长时间的谷歌搜索,我找到了以下解决方案。不幸的是,我找不到这个答案的链接。如果我访问了该网站,我将与您共享该链接:

Dim FilePath As String
Dim FileName As String
FilePath = Environ$("temp") & "\"
FileName = "test_file_for_upload" & ".xlsx"

UploadFile DestURL, FilePath & FileName, "file" 'Usage

'******************* upload - begin
'Upload file using input type=file
Public Sub UploadFile(DestURL As String, FileName As String, _
  Optional ByVal FieldName As String = "File")
  Dim sFormData As String, d As String

  'Boundary of fields.
  'Be sure this string is Not In the source file
  Const Boundary As String = "---------------------------0123456789012"

  'Get source file As a string.
  sFormData = GetFile(FileName)

  'Build source form with file contents
  d = "--" + Boundary + vbCrLf
  d = d + "Content-Disposition: form-data; name=""" + FieldName + """;"
  d = d + " filename=""" + FileName + """" + vbCrLf
  d = d + "Content-Type: application/upload" + vbCrLf + vbCrLf
  d = d + sFormData
  d = d + vbCrLf + "--" + Boundary + "--" + vbCrLf

  'Post the data To the destination URL
  IEPostStringRequest DestURL, d, Boundary
End Sub

'sends URL encoded form data To the URL using IE
Sub IEPostStringRequest(URL As String, FormData As String, Boundary As String)
  'Create InternetExplorer
  Dim WebBrowser: Set WebBrowser = CreateObject("InternetExplorer.Application")

  'You can uncoment Next line To see form results
  WebBrowser.Visible = True

  'Send the form data To URL As POST request
  Dim bFormData() As Byte
  ReDim bFormData(Len(FormData) - 1)
  bFormData = StrConv(FormData, vbFromUnicode)

  WebBrowser.navigate URL, , , bFormData, _
    "Content-Type: multipart/form-data; boundary=" + Boundary + vbCrLf

  Do While WebBrowser.Busy
'    Sleep 100
    DoEvents
  Loop
  'WebBrowser.Quit
End Sub

'read binary file As a string value
Function GetFile(FileName As String) As String
  Dim FileContents() As Byte, FileNumber As Integer
  ReDim FileContents(FileLen(FileName) - 1)
  FileNumber = FreeFile
  Open FileName For Binary As FileNumber
    Get FileNumber, , FileContents
  Close FileNumber
  GetFile = StrConv(FileContents, vbUnicode)
End Function
'******************* upload - end
第三个参数
“file”
表示需要触发的HTML元素的ID。
希望此解决方案也适用于您

我猜您实际上尝试过将值传递给objIE.document.getElementsByCassName(“设计文件输入”)(0)。例如,值?我尝试输入以下内容:objIE.document.getElementsByCassName(“设计文件输入”)(0)。value=“C:\Filepath”但之后什么都不会发生。出于明显的安全原因,您无法为“文件”类型输入的值编写脚本。您提供了url吗?我看不见,相关的,
objIE.document.getElementsByClassName("button-wrapper")(0).Click
Dim FilePath As String
Dim FileName As String
FilePath = Environ$("temp") & "\"
FileName = "test_file_for_upload" & ".xlsx"

UploadFile DestURL, FilePath & FileName, "file" 'Usage

'******************* upload - begin
'Upload file using input type=file
Public Sub UploadFile(DestURL As String, FileName As String, _
  Optional ByVal FieldName As String = "File")
  Dim sFormData As String, d As String

  'Boundary of fields.
  'Be sure this string is Not In the source file
  Const Boundary As String = "---------------------------0123456789012"

  'Get source file As a string.
  sFormData = GetFile(FileName)

  'Build source form with file contents
  d = "--" + Boundary + vbCrLf
  d = d + "Content-Disposition: form-data; name=""" + FieldName + """;"
  d = d + " filename=""" + FileName + """" + vbCrLf
  d = d + "Content-Type: application/upload" + vbCrLf + vbCrLf
  d = d + sFormData
  d = d + vbCrLf + "--" + Boundary + "--" + vbCrLf

  'Post the data To the destination URL
  IEPostStringRequest DestURL, d, Boundary
End Sub

'sends URL encoded form data To the URL using IE
Sub IEPostStringRequest(URL As String, FormData As String, Boundary As String)
  'Create InternetExplorer
  Dim WebBrowser: Set WebBrowser = CreateObject("InternetExplorer.Application")

  'You can uncoment Next line To see form results
  WebBrowser.Visible = True

  'Send the form data To URL As POST request
  Dim bFormData() As Byte
  ReDim bFormData(Len(FormData) - 1)
  bFormData = StrConv(FormData, vbFromUnicode)

  WebBrowser.navigate URL, , , bFormData, _
    "Content-Type: multipart/form-data; boundary=" + Boundary + vbCrLf

  Do While WebBrowser.Busy
'    Sleep 100
    DoEvents
  Loop
  'WebBrowser.Quit
End Sub

'read binary file As a string value
Function GetFile(FileName As String) As String
  Dim FileContents() As Byte, FileNumber As Integer
  ReDim FileContents(FileLen(FileName) - 1)
  FileNumber = FreeFile
  Open FileName For Binary As FileNumber
    Get FileNumber, , FileContents
  Close FileNumber
  GetFile = StrConv(FileContents, vbUnicode)
End Function
'******************* upload - end