2012-05-01 13 views
10

यह मेरा पहला सवाल है जो यहां स्टैक ओवरफ्लो पर है!वीबीए इंटरनेट एक्सप्लोरर ऑटोमेशन - फ़ाइल डाउनलोड करते समय "ओपन" का चयन कैसे करें

मैं थोड़ी देर के लिए इस समस्या का हल ढूंढ रहा हूं और मुझे कोई मदद नहीं मिली है। मैं सिर्फ अपनी खोजों में गलत कीवर्ड का उपयोग कर रहा हूं, लेकिन अब तक मुझे कोई भाग्य नहीं मिला है। यहां प्रश्न है:

वीबीए में, मैं इंटरनेट एक्सप्लोरर में फ़ाइल डाउनलोड संवाद से "ओपन" विकल्प कैसे चुन सकता हूं?

बस अतिरिक्त स्पष्टीकरण के लिए, मैं पीले-नारंगी बार के बारे में बात कर रहा हूं जो फ़ाइल डाउनलोड होने पर आईई 9 में स्क्रीन के नीचे पॉप अप करता है।

मैं इंटरनेट एक्सप्लोरर का उपयोग कर वेब से सैकड़ों पीडीएफ डाउनलोड करने के लिए कुछ वीबीए स्वचालन कर रहा हूं, लेकिन एक मध्यवर्ती कदम है जहां वास्तविक पीडीएफ प्राप्त करने से पहले एक .fdf फ़ाइल खोला जाना है। इसलिए मुझे पहले "ओपन" विकल्प चुनने की ज़रूरत है ताकि मैं स्वचालन के अगले चरण पर जा सकूं। जैसा कि मैंने पहले कहा था, मैंने बहुत सी खोज की है और अब तक कोई भाग्य नहीं है।

मैंने SendKeys का उपयोग करने की कोशिश की है दर्ज करें, यह काम करेगा, और यह आखिरी खाई का प्रयास था जो काम नहीं करता था।

मदद के लिए अग्रिम धन्यवाद!

+1

+ 1 एक अच्छा सवाल :) –

+0

आप सीधे फ़ाइलें लाने के लिए URLDownloadToFile का उपयोग कर विचार किया है? http://www.vbaexpress.com/forum/showthread.php?t=33145 –

+1

मैंने वास्तव में URLDownloadToFile का प्रयास किया है, लेकिन ये सभी फ़ाइलें पासवर्ड संरक्षित साइट पर हैं और मैं यह समझने में सक्षम नहीं था कि कैसे प्रमाण पत्र पास करना है । –

उत्तर

4

मैंने इसे बड़े पैमाने पर यहां कवर किया है।

विषय: VBA/VB.Net/VB6-बटन पर क्लिक करें रद्द करें IE पर खोलें/सहेजें/डाउनलोड खिड़की - भाग मैं

लिंक: http://www.siddharthrout.com/2011/10/23/vbavb-netvb6click-opensavecancel-button-on-ie-download-window/

और


संपादित करें (आईएमपी) यदि आप आईई 9 का उपयोग कर रहे हैं तो भाग 2 को पढ़ने में मत भूलना क्योंकि इसमें शामिल है और IE 9 डाउनलोड खिड़की की खिड़की संरचना को शामिल किया गया


विषय: VBA/VB.Net/VB6-क्लिक करें खोलें/सहेजें/बटन रद्द करें IE पर डाउनलोड खिड़की - द्वितीय भाग

लिंक: http://www.siddharthrout.com/2012/02/02/vbavb-netvb6click-opensavecancel-button-on-ie-download-window-part-ii/

उपरोक्त लिंक इस बात पर चर्चा करते हैं कि आप जो चाहते हैं उसे प्राप्त करने के लिए एपीआई का उपयोग कैसे करें।

1 लिंक से ...

तुम्हारे और मेरे जैसे

, हम दोनों नाम है, ठीक उसी प्रकार खिड़कियों "हैंडल" (hWnd), कक्षा आदि एक बार जब आप जानते हैं hWnd है क्या कि, यह है उस खिड़की से बातचीत करना आसान है।

Findwindow API क्लास नाम और विंडो के कैप्शन ("फ़ाइल डाउनलोड") का उपयोग करके किसी विशेष विंडो का एचडब्ल्यूएनडी पाता है।"ओपन", "सेव" और "रद्द करें" बटन स्वयं विंडोज़ हैं लेकिन वे मुख्य विंडो की बाल विंडो हैं जो "फाइल डाउनलोड" है। इसका मतलब है कि उनमें से प्रत्येक के पास एचडब्ल्यूएनडी भी होगा :) बच्चे की खिड़कियां खोजने के लिए, हम FindWindow का उपयोग नहीं करते हैं लेकिन FindWindowEx का उपयोग करते हैं। सभी तीन बटन "ओपन", "सेव" और "रद्द करें" में एक ही कक्षा है जो "बटन" है।

+0

मैं वीबीए के लिए काफी नया हूं, इसलिए मुझे यकीन नहीं है कि FindWindowEx API का उपयोग कैसे करें। मैंने अपने कोड में फ़ंक्शन घोषणा की और कहा कि इसे 64 बिट सिस्टम के लिए अपडेट करने की आवश्यकता है। –

+0

क्या आप इसे पढ़ चुके हैं? :) –

+0

बस PtrSafe विशेषता को जोड़ा, जो चीजों को ठीक करने लग रहा था। मैं इसे अब एक शॉट दे दूंगा। –

1

इसी प्रकार के पोस्ट: link

Option Explicit 
    Dim ie As InternetExplorer 
    Dim h As LongPtr 
    Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr 

Sub Download() 
    Dim o As IUIAutomation 
    Dim e As IUIAutomationElement 
    Set o = New CUIAutomation 
    h = ie.Hwnd 
    h = FindWindowEx(h, 0, "Frame Notification Bar", vbNullString) 
    If h = 0 Then Exit Sub 

    Set e = o.ElementFromHandle(ByVal h) 
    Dim iCnd As IUIAutomationCondition 
    Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "Open") 

    Dim Button As IUIAutomationElement 
    Set Button = e.FindFirst(TreeScope_Subtree, iCnd) 
    Dim InvokePattern As IUIAutomationInvokePattern 
    Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId) 
    InvokePattern.Invoke 
End Sub 
+0

यह 'Dim o As IUIAutomation' करता है लेकिन बाद में' सेट ओ = न्यू CUIAutomation' सेट करता है, तो दोनों में से एक मेरे लिए गलत लगता है? मैं वीबीए के बारे में बहुत कम जानता हूं, इसलिए मुझे यकीन नहीं है कि समायोजित किया जाना चाहिए ;-) – Carpetsmoker

0

मैं आवेदन करने के लिए शॉर्टकट कुंजी भेज दिया। यहां वे आईई 11 के लिए हैं। क्षमा करें मैं IE9 में परीक्षण नहीं कर सका। यदि आप Alt दबाए रखते हैं, तो यह आपको आईएम 11 के रूप में कॉम्बो की दूसरी कुंजी दिखा सकता है।

नोट: यदि कोड आपकी मशीन पर सक्रिय विंडो नहीं है तो कोड नहीं चलाएगा, इसलिए यह डीबग मोड में काम नहीं करेगा।

  • शॉर्टकट कुंजी: Alt + हे
  • VBA: Application.SendKeys "%{O}"
संबंधित मुद्दे