Excel VBA自动化-预填充日期框

Excel VBA自动化-预填充日期框,excel,vba,internet-explorer,combobox,automation,Excel,Vba,Internet Explorer,Combobox,Automation,我试图通过VBA将Excel中的数据预填充到本地intranet网站 我已经能够将大多数数据预先填充到站点,但我正在努力使用这个组合日期框: 请参阅HTML代码: <div class="form-group row " id="starttime_field"> <label class="col-form-label col-md-3" for="starttime">Start time</label> <div class="col-md-9"

我试图通过VBA将Excel中的数据预填充到本地intranet网站

我已经能够将大多数数据预先填充到站点,但我正在努力使用这个组合日期框:

请参阅HTML代码:

<div class="form-group row  " id="starttime_field">
<label class="col-form-label col-md-3" for="starttime">Start time</label>
<div class="col-md-9">
<input type="text" id="starttime" name="starttime" class="form-control" size="30" style="display: none;"><span class="combodate">
<select class="hour " style="width: auto;"><option value="0">00</option><option value="1">01</option><option value="2">02</option><option value="3">03</option><option value="4">04</option><option value="5">05</option><option value="6">06</option><option value="7">07</option><option value="8">08</option><option value="9">09</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option></select>&nbsp;:&nbsp;
<select class="minute " style="width: auto;"><option value="0">00</option><option value="1">01</option><option value="2">02</option><option value="3">03</option><option value="4">04</option><option value="5">05</option><option value="6">06</option><option value="7">07</option><option value="8">08</option><option value="9">09</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option><option value="32">32</option><option value="33">33</option><option value="34">34</option><option value="35">35</option><option value="36">36</option><option value="37">37</option><option value="38">38</option><option value="39">39</option><option value="40">40</option><option value="41">41</option><option value="42">42</option><option value="43">43</option><option value="44">44</option><option value="45">45</option><option value="46">46</option><option value="47">47</option><option value="48">48</option><option value="49">49</option><option value="50">50</option><option value="51">51</option><option value="52">52</option><option value="53">53</option><option value="54">54</option><option value="55">55</option><option value="56">56</option><option value="57">57</option><option value="58">58</option><option value="59">59</option></select></span><span class="combodate"><select class="hour " style="width: auto;"><option value="0">00</option><option value="1">01</option><option value="2">02</option><option value="3">03</option><option value="4">04</option><option value="5">05</option><option value="6">06</option><option value="7">07</option><option value="8">08</option><option value="9">09</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option></select>&nbsp;:&nbsp;<select class="minute " style="width: auto;"><option value="0">00</option><option value="1">01</option><option value="2">02</option><option value="3">03</option><option value="4">04</option><option value="5">05</option><option value="6">06</option><option value="7">07</option><option value="8">08</option><option value="9">09</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option><option value="32">32</option><option value="33">33</option><option value="34">34</option><option value="35">35</option><option value="36">36</option><option value="37">37</option><option value="38">38</option><option value="39">39</option><option value="40">40</option><option value="41">41</option><option value="42">42</option><option value="43">43</option><option value="44">44</option><option value="45">45</option><option value="46">46</option><option value="47">47</option><option value="48">48</option><option value="49">49</option><option value="50">50</option><option value="51">51</option><option value="52">52</option><option value="53">53</option><option value="54">54</option><option value="55">55</option><option value="56">56</option><option value="57">57</option><option value="58">58</option><option value="59">59</option></select></span>
我不确定如何将电子表格中的数据预填充到小时和分钟组合框中,因为它的布局与html中的其他字段略有不同

任何帮助或指导都将不胜感激


谢谢

小时和分钟框是
select
元素,这意味着借助InternetExplorer自动化,您有两种选择单个项目的主要方法(以及一些用于复杂情况的替代方法):

  • 您可以在
    select
    本身上使用
    selectedIndex
    ,然后在该
    select
    下的列表中指定感兴趣的
    选项的索引。我想从1开始,但你需要检查一下
  • 选项
    元素本身上使用.Selected=True
  • 由于选项具有相同的值,因此需要通过父项隔离下拉列表,如果使用第二种方法,请选择。这可以通过在前面添加父类名称来实现

    方法1:

    时辰

    分钟

    ie.document.querySelector(".minute").SelectedIndex = 1
    
    ie.document.querySelector(".minute [value='0']").Selected = True 'minute 00
    
    方法2:

    时辰

    分钟

    ie.document.querySelector(".minute").SelectedIndex = 1
    
    ie.document.querySelector(".minute [value='0']").Selected = True 'minute 00
    
    备选方案主要是用javascript编写并通过
    ie.document.parentWindow.execScript
    。当元素由于某种原因不可交互但通常不可交互时,这会很有帮助 特别是QA自动化专家


    阅读:


  • 编辑:

    根据提供的html区分开始时间和结束时间,例如

    ie.document.querySelector(".combodate + .combodate .hour [value='0']").Selected =True  'end hour
    ie.document.querySelector(".combodate + .combodate .minute [value='0']").Selected =True  'end minute
    
    使用变量

    Dim var As Long
    var = 0
    
    ie.document.querySelector(".combodate .hour [value='" & cstr(var) & "']").Selected =True  'start hour
    
    尽管您的HTML没有反映出这一点,但我还是希望看到类似的内容:

    ie.document.querySelector("#starttime_field .combodate .hour [value='" & cstr(var) & "']").Selected =True 
    ie.document.querySelector("#endtime_field .combodate .hour [value='" & cstr(var) & "']").Selected =True 
    

    请通过使用代码片段工具共享html,而不是发布html图像。我们可能需要能够复制它。另外,它看起来像一个select元素,这意味着它需要扩展以显示子选项感谢您的帮助,我已将HTML代码添加为一个片段。您是否意外粘贴了两次,或者所有内容都有两次?第一部分是HTML代码,第二个是我的VBA代码。在html中有两分钟和两小时的框。非常感谢你的工作!!!!最后一个问题,我在下面有一个精确的结束时间组合框,我如何引用第二个小时和分钟框?我如何为值分配一个变量,所以我希望它不是[value='0'],而是value=x(Dim x作为整数x=1)。谢谢非常感谢这项工作,我现在可以为我的值指定一个变量了!最后一件事!我在尝试endtime querySelector代码(即document.querySelector(“.combodate+.combodate.minute[value='0']]”)时遇到运行时错误-424。Selected=True),从您之前对该答案的评论中,有什么想法?@FeiLong001。看来你找到了解决问题的办法。我建议您将QHarr提出的建议标记为可接受的答案。它可以在将来帮助其他社区成员解决类似的问题。谢谢你的理解。嗨,QHarr,除了querySelector方法,还有其他方法吗?如果使用querySelector方法(即使填充了小时和分钟下拉列表),表单似乎无法正确保存。表单抱怨没有选择小时/分钟,我必须手动选择它工作的时间。谢谢
    ie.document.querySelector("#starttime_field .combodate .hour [value='" & cstr(var) & "']").Selected =True 
    ie.document.querySelector("#endtime_field .combodate .hour [value='" & cstr(var) & "']").Selected =True