【问题标题】:VBA Download xlsx file from Website (DMS or EDM)VBA 从网站下载 xlsx 文件(DMS 或 EDM)
【发布时间】:2020-03-22 13:53:28
【问题描述】:

VBA 水平较差,我在此问题上寻求您的专业知识,但没有成功地遍历了与我类似的各种主题。 实际上,我想从网站(或文档管理系统)下载 .xlsx 文件。 站点链接如下:https://www.mezzoteam.com/login.aspx,需要认证。

以下代码用于通过连接参数连接到网站并访问包含要下载的文件的页面:

Sub GetTable_GED()

'Renseigner le lien de la page de connexion et la page du taleau à récupérer
Const cURL = "https://www.mezzoteam.com/login.aspx?ReturnUrl=%2flayout_documents.aspx"
Const cURL2 = "https://www.mezzoteam.com/window_document.aspx?&wsfromlink=22e58a2a-fa83-4462-9b30-1768498b67e6&id=ffc12ca9-1333-4b35-b5eb-7d3857f00b70"

Dim IE As InternetExplorer
Dim Doc As HTMLDocument
Dim LoginForm As HTMLFormElement
Dim objElement As Object
Dim objCollection As Object

'Créer une nouvelle fenetre dans le navigateur
Set IE = New InternetExplorer

'Activer le débogage de la page
IE.Visible = True

'Lancer la page
IE.navigate cURL

'Chargement initial de la page

Do While IE.readyState <> READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop

Set Doc = IE.document

'Identifier la structure de la page
Set LoginForm = Doc.forms(0)

'Remplir les paramètres de connexion de type username, password
'input name="ctl00$body$userName" id="ctl00_body_userName" class="form-control" placeholder="email@example.com" autocomplete="username" type="email"
'<input name="ctl00$body$password" type="password" id="ctl00_body_password" class="form-control" autocomplete="current-password">

With Doc

  .getElementById("ctl00_body_userName").Value = "xxxxxxxx@xxxx.com"
  .getElementById("ctl00_body_password").Value = "xxxxxxx"

  'Executer en cliquant le bouton de connexion
'<input type="submit" name="ctl00$body$LoginButton" value="Se connecter" id="ctl00_body_LoginButton" class="btn btn-block btn-primary">

  .getElementsByName("ctl00$body$LoginButton")(0).Click

End With

Do While IE.readyState <> READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop

'Maintenant, allons dans la page où se trouve le tableau à récupérer
IE.navigate cURL2
Do While IE.readyState <> READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop

Set objElement = IE.document

With objElement

'<button id="ctl00_BodyPlaceHolder_actionsbar_download" type="button" value="download" class="btn btn-primary"><span id="ctl00_BodyPlaceHolder_actionsbar_download_label">Télécharger</span> </button>

.getElementById("ctl00_BodyPlaceHolder_actionsbar_download").Click **click buton to download file**

End With

End Sub

'''

在这个阶段,下载不运行!我有这个消息错误: 代码.getElementById("ctl00_BodyPlaceHolder_actionsbar_download").Click中的“执行错误438:属性或方法不受此对象管理”

我的需要:下载这个 .xlsx 文件并在活动工作表中打开它。

我还在图片中附上了文件的目标页面,以及突出显示要下载的文件的 HTML 代码。

HTML code page where file contains

最好的问候,

【问题讨论】:

    标签: excel vba xlsx getfiles


    【解决方案1】:

    所以这个.getElementsById("yui-gen1000018")(0).Click 表明您使用的方法将返回共享相同id 的元素集合。您想从该集合中单击第一个元素。

    但是,没有.getElementsById()这样的方法。您正在寻找的方法是 .getElementById() 并返回一个 single 元素,其中指定了 id 而不是元素集合。请记住,HTML 元素的 id 应该是唯一的。

    所以,如果您有兴趣点击的元素实际上有一个唯一的id,即yui-gen1000018,那么点击它的方式是:

    .getElementById("yui-gen1000018").Click

    【讨论】:

    • 感谢@Stavros 的回归,我尝试了这个 '''.getElementsById("yui-gen1000018").Click''' 但仍然显示相同的运行时错误 '462'。能否请您查看此屏幕截图以了解要下载的文件所在页面的 HTML 结构?如果可能,请更正我的代码。谢谢
    • @NarcisseD。就像我说的.getElementsById() 是错误的。正确的方法是.getElementById()元素不是元素。没有 s.
    • 谢谢@Stavros。我使用了.getElementById(),但没有任何变化(我尝试使用不同的元素 id)。在我的主要帖子中,我提交了包含页面 HTML 代码并突出显示要下载的文件的图像。请问你能看一下吗?
    • 请您查看我的问题吗?我已经15天没有进步了。请帮帮我
    猜你喜欢
    • 2020-07-31
    • 2018-10-16
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    相关资源
    最近更新 更多