2013-05-13 8 views
5

बनाया VBA का उपयोग मैं निम्नलिखितएक्सेस करना आईई टैब एक बार

Option Explicit 

Public Enum IE_READYSTATE 
    Uninitialised = 0 
    Loading = 1 
    Loaded = 2 
    Interactive = 3 
    complete = 4 
End Enum 

Sub Example_Click() 
Dim ieApp As clsIE 

    'Create IE and login 
    If ieApp Is Nothing Then 
     Set ieApp = New clsIE 
     With ieApp 

      'IE Tab1 
      .IE.Visible = True 
      .IE.navigate "http://www.bbc.co.uk/news/" 
      Do While .IE.Busy Or Not .IE.readyState = IE_READYSTATE.complete: DoEvents: Loop 

      'IE Tab2 
      .IE.Navigate2 "http://www.bbc.co.uk", CLng(2048) 
      Do While .IE.Busy Or Not .IE.readyState = IE_READYSTATE.complete: DoEvents: Loop 

      'IE Tab3 
      .IE.Navigate2 "http://www.bbc.co.uk", CLng(2048) 
      Do While .IE.Busy Or Not .IE.readyState = IE_READYSTATE.complete: DoEvents: Loop 


     End With 
    End If 

End Sub 

का उपयोग करना कैसे मैं तो करने के लिए .... इन टैब तक पहुंच सकते 3 अलग टैब के साथ एक InternetExplorer वस्तु बना सकते हैं

  1. छोड़ो/एक विशिष्ट टैब बंद करें?
  2. नेविगेट एक विशिष्ट टैब पर एक नया URL के लिए?
  3. पहुँच कोई विशिष्ट टैब डोम?

मुझे पता है कि यह सब एक टैब के साथ कैसे करें लेकिन एकाधिक टैब नहीं हैं?

उत्तर

4

मैं एक जवाब काम करने के लिए, हालांकि मैं कठोर परीक्षण नहीं किया है प्रतीत होता है कि मिल गया है। मैंने आपके कोड को संशोधित कर दिया है ताकि मैं इसे अपने clsIE मॉड्यूल के बिना चला सकूं। इस कोड को 3 यूआरएल के लिए टैब नेविगेट उन्हें खोलने और फिर उन्हें का उपयोग कर ShellWindows वस्तु को नए URL से खुलता है।

मैंने थोड़ी देर बदल दी। बस .. लाइनें क्योंकि वे आईई एप्पलकेशन की स्थिति तैयार थीं, जबकि नए टैब अभी भी लोड हो रहे थे, जबकि दूसरे और तीसरे टैब के लिए काम नहीं किया था।

Sub Example_Click() 
Dim ieApp As InternetExplorer 
Dim SWs As ShellWindows 
Dim IETab1Number As Integer 
Dim IETab2Number As Integer 
Dim IETab3Number As Integer 

Set SWs = New ShellWindows 

'Create IE and login 
If ieApp Is Nothing Then 
    Set ieApp = CreateObject("InternetExplorer.Application") 
    With ieApp 

     'IE Tab1 
     .Visible = True 
     .Navigate "http://www.bbc.co.uk/news/" 
     Do While .Busy Or Not .ReadyState = IE_READYSTATE.complete: DoEvents: Loop 
     IETab1Number = SWs.Count 

     'IE Tab2 
     .Navigate2 "http://www.bbc.co.uk/news/uk-scotland-north-east-orkney-shetland-23822420", CLng(2048) 
     'Do While .Busy Or Not .ReadyState = IE_READYSTATE.complete: DoEvents: Loop 
     Do While SWs.Count = IETab1Number: DoEvents: Loop 

     IETab2Number = SWs.Count 

     'IE Tab3 
     .Navigate2 "http://www.bbc.co.uk", CLng(2048) 
     'Do While .Busy Or Not .ReadyState = IE_READYSTATE.complete: DoEvents: Loop 
     Do While SWs.Count = IETab2Number: DoEvents: Loop 
     IETab3Number = SWs.Count 
     'ieApp.Visible = False 

     SWs.Item(IETab1Number - 1).Navigate "http://www.bbc.co.uk/" 
     SWs.Item(IETab2Number - 1).Navigate2 "http://www.bbc.co.uk/news/" 
     SWs.Item(IETab3Number - 1).Navigate2 "http://www.bbc.co.uk/news/" 


    End With 
End If 
Set ieApp = Nothing 
Set SWs = Nothing 

End Sub 

यह टैब में हेरफेर करने के लिए शैलविंडोज का उपयोग करता है। यह केवल संख्या द्वारा किया जाता है इसलिए मुझे लगता है कि यह त्रुटियों के लिए प्रवण हो सकता है।

इसे और अधिक मजबूत बनाने के लिए आप ऑपरेशन के बाद टैब से कुछ जानकारी प्राप्त कर सकते हैं और जांच कर सकते हैं कि मूल्य लौटने पर यह वही है। उदाहरण sPageTitle = SWs.Item(IETab3Number - 1).Document.Title के लिए एक टैब में, अगली बार जब आप टैब आप जाँच कर सकते हैं कि यह नहीं बदला है का उपयोग करना चाहते पेज का शीर्षक स्टोर करने के लिए इस्तेमाल किया जा सकता।

+1

चाहेंगे +5 अगर मैं – user3357963

1

यहाँ कैसे मैं VBScript पर एक IE विंडो में समूहीकरण टैब की समस्या हल हो जाती है।/टैब समूह/smth है। जैसे "http://stackoverflow.com"। यदि फ़ंक्शन को खोले गए स्टैक ओवरफ्लो टैब के साथ आईई विंडो मिली है, तो यह इस विंडो में एक नया टैब जोड़ता है और यह टैब लौटाता है अन्यथा नई विंडो खुलता है।

Private Function getNewTab(tabGroupS) 
    Dim i, objs, cnt, openflag 
    Set objs = CreateObject("Scripting.Dictionary") 
    Set SWObj = CreateObject("Shell.Application").Windows() 
    For Each i In SWObj 
     If LCase(Right(i.FullName, 12)) = "iexplore.exe" Then objs.Add objs.Count, i 
    Next 
    cnt = SWObj.Count 
    For Each i In objs 
     If Left(objs(i).LocationURL, Len(tabGroupS)) = tabGroupS Then 
      openflag = True 
      objs(i).Navigate2 "about:blank", &H800 
      Exit For 
     End If 
    Next 
    If Not openflag Then 
     Set getNewTab = CreateObject("InternetExplorer.Application") 
     getNewTab.Visible = True 
     Exit Function 
    End If 
    Do: WScript.Sleep 100: Loop Until SWObj.Count > cnt 'wait until new tab is opened 
    For Each i In SWObj 
     If LCase(Right(i.FullName, 12)) = "iexplore.exe" Then 
      If Not hasObj(i, objs) Then 
       Set getNewTab = i 
       Exit Function 
      End If 
     End If 
    Next 
End Function 

Function hasObj(obj, col) 
    For Each i In col 
     If obj Is col(i) Then 
      hasObj = True 
      Exit Function 
     End If 
    Next 
End Function 
3

सरल तरीके को सिर्फ इस कोड वस्तु

IE.navigate "http://www.bbc.co.uk/news/", CLng(2048) 
Do While IE.Busy Or Not IE.readyState = IE_READYSTATE.complete: DoEvents: Loop 
With CreateObject("Shell.Application").Windows 
Set IE = .Item(.Count - 1) 
End With 
0

कि नया टैब पुन: असाइन है कोशिश:

Sub FillinternetForm() 
    Dim ie As Object 
    Set ie = CreateObject("Internetexplorer.Application") 
    ie.Navigate "https://google.com" 
    ie.Visible = True 
    While ie.Busy 
     DoEvents 'wait until IE is done loading page. 
    Wend 
    ie.Document.all("lst-ib").Value = "Fast Sub" 
    ie.Navigate "https://google.com", CLng(2048) 
    ie.Document.all("lst-ib").Value = "Fast slow Sub" 
End Sub 
+0

पहला टैब :) सकता है जब दूसरा अच्छी तरह काम कर इस के बारे में अपनी मूल्य भरने की मार्गदर्शिका खोलें क्या कोई भी इस कोड में सही तरीके से काम कर सकता है? – Raulsoul

संबंधित मुद्दे