【发布时间】:2014-04-02 23:29:15
【问题描述】:
我正在尝试使用 VBA 访问网站并下载一些信息。网站中有一些下拉框,需要先选中这些下拉框,然后才能单击提交按钮。我找到了其中一个框,但另一个框是日期,在 html 中没有选项,即使下拉列表中填充了 YYYY MMM 可以追溯到几年前。我发现一段 html 似乎是填充下拉列表的函数。我当然不是 html 专家,所以这是我的最佳猜测。
以下是下拉列表的html:
<td valign="top">
<select name="dateSelect" id="dateSelect" ></select>
</td>
填充下拉列表的函数如下所示:
var dateSelect = document.getElementById("dateSelect");
//sel value = YYYYMMM
var dateYear = dateSelect.value.substr(0, 4)
var dateMonth = dateSelect.value.substr(5)
var months = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
var years = new Array()
var d = new Date();
var startYear = 0;
if (d.getYear() < 2000)
startYear = d.getYear() + 1900;
else
startYear = d.getYear();
for (var a = startYear; a >= 2007; a--) {
years[startYear - a] = a;
}
function fillselboxes(theDate) {
var d = new Date();
theDate = new Date(theDate);
var dateSelect = document.getElementById("dateSelect");
for (var a = 0; a < years.length; a++) {
for (var b = months.length - 1; b >= 0; b--) {
addOption(dateSelect, years[a] + " " + months[b], years[a] + "_" + (b + 1));
}
}
dateSelect.value = years[startYear - theDate.getFullYear()] + "_" + (theDate.getMonth() + 1);
}
在我的宏中,我想从下拉列表中选择上个月。作为菜鸟,我唯一能想到的尝试是:
Dim ie as InternetExplorer
Set ie = New InternetExplorer
ie.Visible = True
ie.navigate "redacted"
Do While ie.READYSTATE <> READYSTATE_COMPLETE
DoEvents
Loop
ie.getElementById("dateselect").Value = Format(DateSerial(Year(Date), Month(Date) - 1, 1), "YYYY MMM")
当我尝试这样做时,它给了我一个运行时错误“438”:对象不支持此属性或方法。
【问题讨论】:
-
您的某些行缺少分号。它们不是严格要求的,但它们可以帮助避免未来的错误。
标签: html vba internet-explorer