0

我正在使用Intranet。使用VBA我必须从列表中关闭某个日期。VBA/Internet Explorer/Javascript:如何从同一个Internet Explorer打开一个JavaScript窗口?

  • 我选择了日期。然后点击链接关闭(而不是按钮),这触发了一个JavaScript。

选择所有日期:

html.getElementsByName("selectall")(0).Click

点击该链接,关闭日期。

html.getElementsByTagName("a")(0).Click Do While ie.Busy = True Or ie.readyState <> 4: DoEvents: Loop

的JavaScript

{ 
     //alert(xxx) 
     document.first.deletepids.value = xxx 
     window.open('closeallocation.asp?hotelid='+hotelid+'&roomtype='+roomtype+'&allocxid='+allocxid,'','toolbar=no,scrollbars=yes,width=500,height=330,top=50,left=80') 
     //window.open('closeallocation.asp?deletepids='+xxx+'&hotelid='+hotelid+'&allocxid='+allocxid) 
    } 
    else 
    { 
     if(confirm("Room(s) already having bookings for required dates.Do you wish to continue ?")) 
     { 
      document.first.deletepids.value = xxx 
      window.open('closeallocation.asp?hotelid='+hotelid+'&roomtype='+roomtype+'&allocxid='+allocxid,'','toolbar=no,scrollbars=yes,width=500,height=330,top=50,left=80') 
     } 
     else 
      return false; 
    } 
  • 它会打开一个新窗口的一部分。

如何在使用VBA的同一窗口中打开javascript窗口,或者在新窗口中打开javascript窗口时如何获取元素或设置值或单击新窗口的元素?

我试图使用shell窗口搜索所有打开的窗口与标题和locationurl,但我没有找到特定的窗口出于某种原因。

Dim ow As ShellWindows 
Dim fw As Variant 
Dim html As HTMLDocument 
Dim ie As InternetExplorer 

Set ie = New InternetExplorer 
Set ow = New ShellWindows 

    For Each fw In CreateObject("Shell.application").Windows 

     'On Error GoTo ErrorMsg 
     If fw = "Internet Explorer" Then 
      If InStr(fw.LocationURL, "displayhotelallocsummary.asp") <> 0 Then 
      Exit For 
      End If 
     End If 
    Next fw 

Set ie = fw 
Set html = ie.document 

请指教。

+0

我真的不是故意是粗鲁的,但你应该认真考虑升级你对web开发的所有知识。这看起来很像我在1999年左右所做的,而且也感觉不好。这是一款新软件,还是您从10年前开始制作软件的人那里继承?通过用现代方法重做这一点,您将为您的客户/雇主节省大量金钱,并且您自己承受很大的压力。 –

+0

嗨安德烈斯。我根本没有被冒犯。我完全理解你的关心。你不是第一个对我的代码有这种想法的人。但是Javascript是由第三方编写的,我只是想让数据达到最佳效果。公司不希望花更多的钱聘用和专家程序员。所以我正在同时学习和工作。我很高兴我正在学习。 听起来像你一定是一个非常好的程序员。你认为这个问题有解决方案吗? – Arif

回答

0

嘿,我想我有你的解决方案。

以下功能允许您激活所需的窗口,以便分析其HTML代码。

  1. 做你的代码,然后一个新的网页打开
  2. 调用此函数ie = ActivateWindow(path),并把你的新页面的路径作为参数
  3. 该功能将通过从计算机中所有打开的窗口和激活含有该路径

    Function ActivateWindow (sLocation As String) As SHDocVw.InternetExplorer 
    
    Dim objShellWindows As New SHDocVw.ShellWindows 
    Dim window As Object, Good_one As SHDocVw.InternetExplorer 
    
    For Each window In objShellWindows 
    On Error Resume Next ' We add this so that if there's an issue in the procedure to get the typeName of the window, we just skip it since it s not the window we re looking for anyway 
        If TypeName(window.document) = "HTMLDocument" Then 
         If UCase(window.document.Location) = UCase(sLocation) Then 
          Set Good_one = window 
          Exit For 
         End If 
        End If 
    Next 
    
    Set ActivateWindow= Good_one 
    
    End Function 
    
+0

嗨Seb,当我用鼠标点击CLOSE链接时,它会打开一个弹出窗口。但是当我使用vba代码点击链接Internet Explorer弹出窗口并要求允许一次弹出窗口。 如何使用vba代码点击链接点击鼠标或选择链接和sendkey输入,以便我可以应用您的代码? – Arif

+0

我不确定我是否理解你的答案。当您想要在ALREADY上工作的窗口存在时,我发布的代码有效,但不在活动窗口中。只要它存在,即使互联网打开弹出窗口,它应该工作 – Seb

+0

这里的问题是IE阻止我打开弹出窗口。当我点击Code时,它正在请求许可。但如果我用鼠标点击,它会打开弹出窗口。我如何解决它?他们不是同样的问题,但一个是阻止另一个。 – Arif

0

1. How do I open the javascript window in the same window?

0123的一个
window.open('closeallocation.asp?hotelid=2&roomtype=3','_self','toolbar=no,scrollbars=yes,width=500,height=330,top=50,left=80') 

_self参数表明URL将取代当前页面

2. Or when it opens in a new window how do get elements or set value or click on the element of the new window?

您可以通过查询字符串

var myWindow = window.open('closeallocation.asp?hotelid=2&roomtype=3','','toolbar=no,scrollbars=yes,width=500,height=330,top=50,left=80'); 

在上面的例子中,你正在传递两个参数传递参数(hotelid=2 and roomtype=3

+0

当我用鼠标点击CLOSE链接时,它会打开一个弹出窗口。但是当我使用vba代码点击链接Internet Explorer弹出窗口并要求允许一次弹出窗口。如何使用vba代码点击链接点击鼠标或选择链接和sendkey输入? – Arif

+0

我想你会得到弹出窗口,因为VBA需要在浏览器中配置特殊权限...你应该使用javascript而不是...在JavaScript中的这样的东西应该''document.getElementsByTagName(“a”)[0] .click();' –

+0

嗨Bastos,我应该在哪里写这段代码?在我的VBA代码? – Arif

相关问题