VBA
स्वचालन या अन्य अनुप्रयोगों का उपयोग पुस्तकालयों
खोज…
परिचय
यदि आप अपने विज़ुअल बेसिक एप्लिकेशन के हिस्से के रूप में अन्य एप्लिकेशन में ऑब्जेक्ट्स का उपयोग करते हैं, तो आप उन एप्लिकेशनों के ऑब्जेक्ट पुस्तकालयों के लिए एक संदर्भ स्थापित करना चाह सकते हैं। यह दस्तावेज़ीकरण एक सूची, स्रोत और उदाहरण प्रदान करता है कि विंडोज सॉफ्ट, इंटरनेट एक्सप्लोरर, एक्सएमएल HttpRequest, और अन्य जैसे विभिन्न सॉफ्टवेयर्स के पुस्तकालयों का उपयोग कैसे करें।
वाक्य - विन्यास
- expression.CreateObject (ObjectName)
- अभिव्यक्ति; आवश्यक है। एक अभिव्यक्ति जो एक एप्लिकेशन ऑब्जेक्ट लौटाता है।
- ObjectName; आवश्यक स्ट्रिंग। बनाने की वस्तु का वर्ग नाम। मान्य वर्ग नामों के बारे में जानकारी के लिए, OLE Programmatic Identifiers देखें।
टिप्पणियों
जब कोई एप्लिकेशन ऑटोमेशन का समर्थन करता है, तो जो एप्लिकेशन एक्सपोज़ करता है उसे विज़ुअल बेसिक द्वारा एक्सेस किया जा सकता है। ऑब्जेक्ट पर विधियों को लागू करके या ऑब्जेक्ट के गुणों को प्राप्त करने और सेट करके इन ऑब्जेक्ट्स में हेरफेर करने के लिए Visual Basic का उपयोग करें।
यदि आप अपने विज़ुअल बेसिक एप्लिकेशन के हिस्से के रूप में अन्य एप्लिकेशन में ऑब्जेक्ट्स का उपयोग करते हैं, तो आप उन एप्लिकेशनों के ऑब्जेक्ट पुस्तकालयों के लिए एक संदर्भ स्थापित करना चाह सकते हैं। इससे पहले कि आप ऐसा कर सकें, आपको पहले यह सुनिश्चित करना होगा कि एप्लिकेशन एक ऑब्जेक्ट लाइब्रेरी प्रदान करता है।
आपको उस एप्लिकेशन की ऑब्जेक्ट लाइब्रेरी का संदर्भ सेट करके अपने कोड में उपलब्ध किसी अन्य एप्लिकेशन की वस्तुओं का चयन करने की अनुमति देता है।
निर्दिष्ट वर्ग का एक स्वचालन वस्तु बनाता है। यदि एप्लिकेशन पहले से चल रहा है, तो CreateObject एक नया उदाहरण बनाएगा।
VBScript नियमित अभिव्यक्तियाँ
Set createVBScriptRegExObject = CreateObject("vbscript.RegExp")
उपकरण> संदर्भ> Microsoft VBScript नियमित अभिव्यक्ति #। "
एसोसिएटेड DLL: VBScript.dll
स्रोत: इंटरनेट एक्सप्लोरर 1.0 और 5.5
- MSDN-Microsoft बीफ़्स अप VBScript रेगुलर एक्सप्रेशंस के साथ
- MSDN- नियमित अभिव्यक्ति सिंटैक्स (स्क्रिप्टिंग)
- विशेषज्ञों का आदान-प्रदान - अनुप्रयोगों और विज़ुअल बेसिक 6 के लिए विजुअल बेसिक में नियमित अभिव्यक्तियों का उपयोग करना
- Microsoft Excel में SO पर इन-सेल और लूप दोनों में रेगुलर एक्सप्रेशंस (रेगेक्स) का उपयोग कैसे करें ।
- regular-expressions.info/vbscript
- regular-expressions.info/vbscriptexample
- विकी-नियमित अभिव्यक्ति
कोड
आप RegEx के परिणाम प्राप्त करने के लिए इस फ़ंक्शन का उपयोग कर सकते हैं, सभी मिलानों (यदि 1 से अधिक) को 1 स्ट्रिंग में बदल दें, और एक्सेल सेल में परिणाम प्रदर्शित करें।
Public Function getRegExResult(ByVal SourceString As String, Optional ByVal RegExPattern As String = "\d+", _
Optional ByVal isGlobalSearch As Boolean = True, Optional ByVal isCaseSensitive As Boolean = False, Optional ByVal Delimiter As String = ";") As String
Static RegExObject As Object
If RegExObject Is Nothing Then
Set RegExObject = createVBScriptRegExObject
End If
getRegExResult = removeLeadingDelimiter(concatObjectItems(getRegExMatches(RegExObject, SourceString, RegExPattern, isGlobalSearch, isCaseSensitive), Delimiter), Delimiter)
End Function
Private Function getRegExMatches(ByRef RegExObj As Object, _
ByVal SourceString As String, ByVal RegExPattern As String, ByVal isGlobalSearch As Boolean, ByVal isCaseSensitive As Boolean) As Object
With RegExObj
.Global = isGlobalSearch
.IgnoreCase = Not (isCaseSensitive) 'it is more user friendly to use positive meaning of argument, like isCaseSensitive, than to use negative IgnoreCase
.Pattern = RegExPattern
Set getRegExMatches = .Execute(SourceString)
End With
End Function
Private Function concatObjectItems(ByRef Obj As Object, Optional ByVal DelimiterCustom As String = ";") As String
Dim ObjElement As Variant
For Each ObjElement In Obj
concatObjectItems = concatObjectItems & DelimiterCustom & ObjElement.Value
Next
End Function
Public Function removeLeadingDelimiter(ByVal SourceString As String, ByVal Delimiter As String) As String
If Left$(SourceString, Len(Delimiter)) = Delimiter Then
removeLeadingDelimiter = Mid$(SourceString, Len(Delimiter) + 1)
End If
End Function
Private Function createVBScriptRegExObject() As Object
Set createVBScriptRegExObject = CreateObject("vbscript.RegExp") 'ex.: createVBScriptRegExObject.Pattern
End Function
स्क्रिप्टिंग फ़ाइल सिस्टम ऑब्जेक्ट
Set createScriptingFileSystemObject = CreateObject("Scripting.FileSystemObject")
उपकरण> संदर्भ> Microsoft स्क्रिप्टिंग रनटाइम
एसोसिएटेड DLL: ScrRun.dll
स्रोत: विंडोज ओएस
MSDN-Accessing फ़ाइलें FileSystemObject के साथ
फ़ाइल सिस्टम ऑब्जेक्ट (FSO) मॉडल फ़ोल्डर्स और फ़ाइलों के साथ काम करने के लिए एक वस्तु-आधारित उपकरण प्रदान करता है। यह आपको फ़ोल्डर और फ़ाइलों को संसाधित करने के लिए गुणों, विधियों और घटनाओं के एक समृद्ध सेट के साथ परिचित ऑब्जेक्ट.method सिंटैक्स का उपयोग करने की अनुमति देता है। आप पारंपरिक विज़ुअल बेसिक स्टेटमेंट और कमांड भी नियोजित कर सकते हैं।
FSO मॉडल आपके एप्लिकेशन को फ़ोल्डर्स बनाने, बदलने, स्थानांतरित करने और हटाने, या यह निर्धारित करने की क्षमता देता है कि क्या और कहाँ विशेष फ़ोल्डर मौजूद हैं। यह आपको फ़ोल्डर्स के बारे में जानकारी प्राप्त करने में सक्षम बनाता है, जैसे कि उनके नाम और उनके द्वारा बनाई गई तारीख या अंतिम संशोधन।
MSDN-FileSystemObject विषय : " ... FileSystemObject की अवधारणा की व्याख्या करें और इसका उपयोग कैसे करें। " VBA में exceltrick-FileSystemObject - विवरण
Scripting.FileSystemObject
स्क्रिप्टिंग डिक्शनरी ऑब्जेक्ट
Set dict = CreateObject("Scripting.Dictionary")
उपकरण> संदर्भ> Microsoft स्क्रिप्टिंग रनटाइम
एसोसिएटेड DLL: ScrRun.dll
स्रोत: विंडोज ओएस
स्क्रिप्टिंग। छाया वस्तु
MSDN-Dictionary ऑब्जेक्ट
इंटरनेट एक्सप्लोरर ऑब्जेक्ट
Set createInternetExplorerObject = CreateObject("InternetExplorer.Application")
उपकरण> संदर्भ> Microsoft इंटरनेट नियंत्रण
एसोसिएटेड DLL: ieframe.dll
स्रोत: इंटरनेट एक्सप्लोरर ब्राउज़र
MSDN-InternetExplorer ऑब्जेक्ट
स्वचालन के माध्यम से विंडोज इंटरनेट एक्सप्लोरर की एक आवृत्ति को नियंत्रित करता है।
Internet Explorer Objec मूल सदस्य
नीचे दिए गए कोड को परिचय देना चाहिए कि IE ऑब्जेक्ट कैसे काम करता है और VBA के माध्यम से इसे कैसे हेरफेर करना है। मैं इसके माध्यम से कदम रखने की सलाह देता हूं, अन्यथा यह कई नाविकों के दौरान त्रुटि कर सकता है।
Sub IEGetToKnow()
Dim IE As InternetExplorer 'Reference to Microsoft Internet Controls
Set IE = New InternetExplorer
With IE
.Visible = True 'Sets or gets a value that indicates whether the object is visible or hidden.
'Navigation
.Navigate2 "http://www.example.com" 'Navigates the browser to a location that might not be expressed as a URL, such as a PIDL for an entity in the Windows Shell namespace.
Debug.Print .Busy 'Gets a value that indicates whether the object is engaged in a navigation or downloading operation.
Debug.Print .ReadyState 'Gets the ready state of the object.
.Navigate2 "http://www.example.com/2"
.GoBack 'Navigates backward one item in the history list
.GoForward 'Navigates forward one item in the history list.
.GoHome 'Navigates to the current home or start page.
.Stop 'Cancels a pending navigation or download, and stops dynamic page elements, such as background sounds and animations.
.Refresh 'Reloads the file that is currently displayed in the object.
Debug.Print .Silent 'Sets or gets a value that indicates whether the object can display dialog boxes.
Debug.Print .Type 'Gets the user type name of the contained document object.
Debug.Print .Top 'Sets or gets the coordinate of the top edge of the object.
Debug.Print .Left 'Sets or gets the coordinate of the left edge of the object.
Debug.Print .Height 'Sets or gets the height of the object.
Debug.Print .Width 'Sets or gets the width of the object.
End With
IE.Quit 'close the application window
End Sub
वेब स्क्रेपिंग
IE के साथ करने के लिए सबसे आम बात एक वेबसाइट की कुछ जानकारी परिमार्जन करना है, या एक वेबसाइट फ़ॉर्म भरना और जानकारी जमा करना है। हम इसे कैसे करना है पर देखेंगे।
हमें example.com स्रोत कोड पर विचार करने दें:
<!doctype html>
<html>
<head>
<title>Example Domain</title>
<meta charset="utf-8" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style ... </style>
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is established to be used for illustrative examples in documents. You may use this
domain in examples without prior coordination or asking for permission.</p>
<p><a href="http://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>
हम informations प्राप्त करने और सेट करने के लिए नीचे दिए गए कोड का उपयोग कर सकते हैं:
Sub IEWebScrape1()
Dim IE As InternetExplorer 'Reference to Microsoft Internet Controls
Set IE = New InternetExplorer
With IE
.Visible = True
.Navigate2 "http://www.example.com"
'we add a loop to be sure the website is loaded and ready.
'Does not work consistently. Cannot be relied upon.
Do While .Busy = True Or .ReadyState <> READYSTATE_COMPLETE 'Equivalent = .ReadyState <> 4
' DoEvents - worth considering. Know implications before you use it.
Application.Wait (Now + TimeValue("00:00:01")) 'Wait 1 second, then check again.
Loop
'Print info in immediate window
With .Document 'the source code HTML "below" the displayed page.
Stop 'VBE Stop. Continue line by line to see what happens.
Debug.Print .GetElementsByTagName("title")(0).innerHtml 'prints "Example Domain"
Debug.Print .GetElementsByTagName("h1")(0).innerHtml 'prints "Example Domain"
Debug.Print .GetElementsByTagName("p")(0).innerHtml 'prints "This domain is established..."
Debug.Print .GetElementsByTagName("p")(1).innerHtml 'prints "<a href="http://www.iana.org/domains/example">More information...</a>"
Debug.Print .GetElementsByTagName("p")(1).innerText 'prints "More information..."
Debug.Print .GetElementsByTagName("a")(0).innerText 'prints "More information..."
'We can change the localy displayed website. Don't worry about breaking the site.
.GetElementsByTagName("title")(0).innerHtml = "Psst, scraping..."
.GetElementsByTagName("h1")(0).innerHtml = "Let me try something fishy." 'You have just changed the local HTML of the site.
.GetElementsByTagName("p")(0).innerHtml = "Lorem ipsum........... The End"
.GetElementsByTagName("a")(0).innerText = "iana.org"
End With '.document
.Quit 'close the application window
End With 'ie
End Sub
क्या हो रहा है? यहां प्रमुख खिलाड़ी .Document है , जो HTML स्रोत कोड है। हम जो संग्रह या वस्तु चाहते हैं, उसे प्राप्त करने के लिए हम कुछ प्रश्न लागू कर सकते हैं।
उदाहरण के लिए IE.Document.GetElementsByTagName("title")(0).innerHtml
। GetElementsByTagName
HTML तत्वों का एक संग्रह लौटाता है, जिसमें " शीर्षक " टैग होता है। सोर्स कोड में ऐसा एक ही टैग होता है। संग्रह 0-आधारित है। इसलिए पहला तत्व प्राप्त करने के लिए हम (0)
जोड़ते हैं। अब, हमारे मामले में, हम केवल innerHtml
(एक स्ट्रिंग) चाहते हैं, न कि तत्व वस्तु। इसलिए हम अपनी इच्छित संपत्ति निर्दिष्ट करते हैं।
क्लिक करें
किसी साइट पर लिंक का अनुसरण करने के लिए, हम कई तरीकों का उपयोग कर सकते हैं:
Sub IEGoToPlaces()
Dim IE As InternetExplorer 'Reference to Microsoft Internet Controls
Set IE = New InternetExplorer
With IE
.Visible = True
.Navigate2 "http://www.example.com"
Stop 'VBE Stop. Continue line by line to see what happens.
'Click
.Document.GetElementsByTagName("a")(0).Click
Stop 'VBE Stop.
'Return Back
.GoBack
Stop 'VBE Stop.
'Navigate using the href attribute in the <a> tag, or "link"
.Navigate2 .Document.GetElementsByTagName("a")(0).href
Stop 'VBE Stop.
.Quit 'close the application window
End With
End Sub
Microsoft HTML ऑब्जेक्ट लाइब्रेरी या IE सबसे अच्छा दोस्त
HTML से सबसे अधिक प्राप्त करने के लिए जो IE में लोड हो जाता है, आप किसी अन्य लाइब्रेरी अर्थात Microsoft HTML ऑब्जेक्ट लाइब्रेरी का उपयोग (या कर सकते हैं) कर सकते हैं। इसके बारे में एक और उदाहरण में।
IE मुख्य मुद्दे
IE के साथ मुख्य मुद्दा यह पुष्टि कर रहा है कि पृष्ठ लोड हो रहा है और इसके साथ बातचीत करने के लिए तैयार है। द Do While... Loop
मदद करता है, लेकिन विश्वसनीय नहीं है।
इसके अलावा, IE का उपयोग सिर्फ HTML सामग्री को परिमार्जन करने के लिए किया जाता है। क्यों? क्योंकि ब्राउजर ब्राउजिंग के लिए होता है, यानी सभी CSS, JavaScripts, Pictures, Popups आदि के साथ वेब पेज प्रदर्शित करना। अगर आपको केवल कच्चे डेटा की जरूरत है, तो अलग दृष्टिकोण पर विचार करें। जैसे XML HTTPRequest का उपयोग करना । इसके बारे में एक और उदाहरण में।