【发布时间】:2020-02-12 18:53:41
【问题描述】:
我正在开发一些 VBA 自动化,它从 Excel 电子表格中获取数据,并将该数据输入到 Intranet 站点。
在 Intranet 站点上有一个小的 datepicker 工具(带有开始日期和结束日期),可让您选择日期(请参阅 datepicker html 代码的 html 摘录):
<input type="text" id="startdate" name="startdate" value="" class="form-control" size="30">
<button class="pika-button pika-day" type="button" data-pika-year="2019" data-pika-month="8" data-pika-day="2">2</button>
<button class="pika-prev" type="button">Previous Month</button>
<input type="text" id="enddate" name="enddate" value="" class="form-control" size="30">
<button class="pika-button pika-day" type="button" data-pika-year="2019" data-pika-month="8" data-pika-day="2">2</button>
<button class="pika-prev" type="button">Previous Month</button>
有关日期选择器功能,另请参阅下面的 JavaScript 代码:
<script>
var startDate,
endDate,
updateStartDate = function() {
startPicker.setStartRange(startDate);
endPicker.setStartRange(startDate);
endPicker.setMinDate(startDate);
},
updateEndDate = function() {
startPicker.setEndRange(endDate);
startPicker.setMaxDate(endDate);
endPicker.setEndRange(endDate);
},
startPicker = new Pikaday({
field: document.getElementById('startdate'),
minDate: new Date(2016, 1, 1),
maxDate: new Date(2050, 12, 31),
onSelect: function() {
startDate = this.getDate();
updateStartDate();
}
}),
endPicker = new Pikaday({
field: document.getElementById('enddate'),
minDate: new Date(2016, 1, 1),
maxDate: new Date(2050, 12, 31),
onSelect: function() {
endDate = this.getDate();
updateEndDate();
}
});
_startDate = startPicker.getDate();
_endDate = endPicker.getDate();
if (_startDate) {
startDate = _startDate;
updateStartDate();
};
if (_endDate) {
endDate = _endDate;
updateEndDate();
};
</script>
我最初有这段代码,它将正确的日期字符串推送到表单,但在运行自动化后,日期选择器中的日期选择器元素没有被选中(它们默认为今天的日期)(参见下面的代码:)。
IE.document.all("startdate").Value = Format$(ThisWorkbook.Sheets("Legends").Range("b7").Value, "yyyy-mm-dd")
IE.document.all("enddate").Value = Format$(ThisWorkbook.Sheets("Legends").Range("b8").Value, "yyyy-mm-dd")
这是我运行自动化后发生的情况,请查看带有推送日期的图片:Intranet site with date
这是我单击 datepicker 元素时的样子:Datepicker defaulting to today's date
在网上阅读了一些东西后,似乎您必须单击“startdate”元素,然后单击日期选择器中的其他元素(我在下面成功完成了:)。
IE.document.querySelector("startdate").Click
但是我无法弄清楚如何单击其他元素(上个月和当天)来完成这部分自动化。
任何帮助将不胜感激!
【问题讨论】:
-
您使用的是哪种 Datepicker 插件?你能分享相关的代码来重现问题吗?我使用您的代码创建了一个示例(没有添加 datepicker 引用),代码在我这边运行良好,我可以将日期填充到 TextBox 控件中。所以,这个问题可能与 Datepicker 插件有关。
-
感谢您的帮助!我已经为 datepicker 插件添加了 javascript 代码!
标签: vba internet-explorer automation datepicker