मुझे यह समझने में मदद की आवश्यकता है कि मुझे Ln82 पर "ऑब्जेक्ट की आवश्यकता" त्रुटि क्यों हो रही है। मुझे लगा कि आप एक शब्दकोश में कुछ भी स्टोर कर सकते हैं?
वर्कफ़्लो है:
- कार्यक्रम शुरू करें
- इनपुट बॉक्स के माध्यम से लूप के लिए अस्थायी वस्तुओं का शब्दकोश बनाएं
- इस शब्दकोश का उपयोग बाद में सभी उपयोगकर्ता इनपुट को श्रेणियों के रूप में संग्रहीत करने के लिए करें
- डेस्टिनेशन डॉक्यूमेंट खोलने के लिए एक उप रूटीन (मैसुपेस) पर कॉल करें
- स्रोत एक्सेल wb (अलर्ट) खोलने के लिए एक उप रूटीन को कॉल करें
- स्रोत एक्सेल में श्रेणियों का चयन करने के लिए उपयोगकर्ता को 12 बार (लूप के माध्यम से) प्रेरित करें
- गंतव्य शब्द डॉक में पेस्ट करें (इस बिंदु पर मैं "परवाह नहीं करता हूं, जहां मुझे सिर्फ लानत की बात चिपकानी है)
कृपया किसी भी टिप्पणी को नजरअंदाज करें, यह सिर्फ मेरा स्क्रैच काम है जहां मैंने "अलग रास्ते" की कोशिश की।
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 Admin 2 Standard Documents 1 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 के साथ परेशानी
६) और @ डबमेच ने क्या कहा। एक फ़ंक्शन रूपांतरण एक तार्किक विकल्प होगा।