/ / ऑब्जेक्ट आवश्यक: एक्सेल और वर्ड वीबीए, शब्दकोश, और स्टोरेज रेंज - एक्सेल, वीबीए, शब्दकोश, एमएस-वर्ड, रेंज

ऑब्जेक्ट आवश्यक: एक्सेल और वर्ड वीबीए, शब्दकोश, और भंडारण श्रेणियां - एक्सेल, वीबीए, डिक्शनरी, एमएस-वर्ड, रेंज

मुझे यह समझने में मदद की आवश्यकता है कि मुझे Ln82 पर "ऑब्जेक्ट की आवश्यकता" त्रुटि क्यों हो रही है। मुझे लगा कि आप एक शब्दकोश में कुछ भी स्टोर कर सकते हैं?

वर्कफ़्लो है:

  1. कार्यक्रम शुरू करें
  2. इनपुट बॉक्स के माध्यम से लूप के लिए अस्थायी वस्तुओं का शब्दकोश बनाएं
  3. इस शब्दकोश का उपयोग बाद में सभी उपयोगकर्ता इनपुट को श्रेणियों के रूप में संग्रहीत करने के लिए करें
  4. डेस्टिनेशन डॉक्यूमेंट खोलने के लिए एक उप रूटीन (मैसुपेस) पर कॉल करें
  5. स्रोत एक्सेल wb (अलर्ट) खोलने के लिए एक उप रूटीन को कॉल करें
  6. स्रोत एक्सेल में श्रेणियों का चयन करने के लिए उपयोगकर्ता को 12 बार (लूप के माध्यम से) प्रेरित करें
  7. गंतव्य शब्द डॉक में पेस्ट करें (इस बिंदु पर मैं "परवाह नहीं करता हूं, जहां मुझे सिर्फ लानत की बात चिपकानी है)

कृपया किसी भी टिप्पणी को नजरअंदाज करें, यह सिर्फ मेरा स्क्रैच काम है जहां मैंने "अलग रास्ते" की कोशिश की।

Sub AlertToSupes()

"Declarations
Dim MyAlert As String
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
"Dim key As Variant
Dim v As Long
Dim r As Variant
Dim Mysupes As Document
"Mysupes.Visible = True
"Dim AlertToSupeData As Object
Application.ScreenUpdating = True


"Collection of objects to get from Alert doc and paste into Supes
"Dim colSupesData As Collection
"Set colSupesData = New Collection
"    colSupesData.Add "Project team names"
"    colSupesData.Add "Programming"
"    colSupesData.Add "Date(today)"
"    colSupesData.Add "Subject(Blind study name in Alert)"
"    colSupesData.Add "LRW job#"
"    colSupesData.Add "LOI"
"    colSupesData.Add "Incidence"
"    colSupesData.Add "Sample size"
"    colSupesData.Add "Dates(select from Alert)"
"    colSupesData.Add "Devices allowed"
"    colSupesData.Add "Respondent qualifications(from Alert)"
"    colSupesData.Add "Quotas"


"Dictionary of attributes(alternative to list)
dict.Add "Project team names", ""
dict.Add "Programming", ""
dict.Add "Date(today)", ""
dict.Add "Subject(Blind study name in Alert)", ""
dict.Add "LRW job#", ""
dict.Add "LOI", ""
dict.Add "Incidence", ""
dict.Add "Sample size", ""
dict.Add "Dates(select from Alert)", ""
dict.Add "Devices allowed", ""
dict.Add "Respondent qualifications(from Alert)", ""
dict.Add "Quotas", ""

"Open up the Supes

Call OpenSupes


"Open up the Alert file
MyAlert = Application.GetOpenFilename()
Workbooks.Open (MyAlert)

"Loop for subroutine
For Each key In dict.keys
Debug.Print (key)
Call Cpy(key)
dict.item = r.Value
Next key
End Sub

उप खांसी (प्रमुख रूप में भिन्न)

"Loop that asks for user-defined input for every field of Supes
Dim r As Range, LR As Long
Dim Mysupes As Object



On Error Resume Next
Set r = Application.InputBox("Select the cell that contains " & key, Type:=8)
On Error GoTo 0
If r Is Nothing Then Exit Sub
"LR = Cells(Rows.Count, r.Column).End(xlUp).Row
"Range(Cells(5, r.Column), Cells(LR, r.Column)).Copy Destination:=Cells(5, r.Column + 1)


r.Copy
With Mysupes
"AppWord.Documents.Add
AppWord.Selection.PasteExcelTable
Application.CutCopyMode = False
"Set MySupes = Nothing
End With
End Sub

उप OpenSupes ()

"Dim Mysupes As Object
Dim wordapp As Object
Dim Mysupes As FileDialog


Set wordapp = CreateObject("word.Application")
Set Mysupes = Application.FileDialog( _
FileDialogType:=msoFileDialogOpen)
Mysupes.Show
"Set Mysupes = wordapp.Documents.Open("\10.1.11.169LRWField (New)1 Admin2 Standard Documents1 SupesSupes Memo - Online Study.dotx")
wordapp.Visible = True


End Sub

उत्तर:

जवाब के लिए 0 № 1

आपके द्वारा रिपोर्ट की गई त्रुटि आपके लूप वेन के अंदर उत्पन्न होती है जिसे आप अपने शब्दकोश में r.Value असाइन करने का प्रयास करते हैं

For Each key In dict.keys
Debug.Print (key)
Call Cpy(key)
dict.item = r.Value
Next key

आप "मान रहे हैं Cpy सबरूटीन आपके प्रोग्राम में r सेल वापस भेज रहा है, लेकिन यह स्थानीय रूप से आपके कार्यक्रम में स्थानीय और स्थानीय रूप से घोषित नहीं किया गया है एक सीमा के रूप में खांसी के अंदर।

आपको एक बंद उप-मार्ग के बजाय फ़ंक्शन मान के रूप में r को वापस करने की आवश्यकता है, या आप r रेंज के प्रकार को एक वैश्विक बना सकते हैं ताकि यह आपके सभी प्रोग्राम द्वारा देखा जा सके


जवाब के लिए 2 № 2

कोड के साथ कई मुद्दे हैं।

1) कुंजी एक है कि आप का उपयोग करने की कोशिश कर रहे हैं Workbooks.Open Word दस्तावेज़ पर विधि। [Workbooks.Open][1] एक कार्यपुस्तिका चर की अपेक्षा करता है। तो यह:

 Workbooks.Open (MyAlert)

एक शब्द डॉक्टर के साथ काम करने के लिए नहीं जा रहा है।

तुम्हें चाहिए Documents.Open लेकिन इसका उपयोग करने के लिए एक Word एप्लिकेशन की भी आवश्यकता होती है, इसलिए आपको उचित उप में उस एप्लिकेशन इंस्टेंस को बनाने की आवश्यकता होगी। आप इसे कहीं और से करते हैं wordapp.Documents.Open

2) का उपयोग करें Option Explicit अपने कोड के शीर्ष पर और अपने सभी चर घोषित करें। पूरे लापता हैं।

3) उन्हें खोलने के बाद अनुप्रयोगों को छोड़ दें या अंत में बहुत अधिक चलने वाले उदाहरणों के कारण कुछ दुर्घटनाग्रस्त हो जाएगा।

4) Application.ScreenUpdating = True स्क्रीन को अपडेट करने के लिए उप के अंत में होना चाहिए और केवल अगर आपके पास था Application.ScreenUpdating = False उससे पहले।

5) @CindyMeister नोटों के रूप में: आपको "t चाहिए" a On Error Resume Next चारों ओर InputBox। आप परिणाम को एक चर पर सेट करके परीक्षण कर सकते हैं और परीक्षण कर सकते हैं InputBoxes के साथ परेशानी

६) और @ डबमेच ने क्या कहा। एक फ़ंक्शन रूपांतरण एक तार्किक विकल्प होगा।