वीबीए एक पॉपअप में दिखाता है कि मुझे उपयोगकर्ता परिभाषित प्रकारों के साथ एक सरणी के माध्यम से पुनरावृत्ति करने की अनुमति नहीं है। मैंने थोड़ा कोड लिखा और आश्चर्य की कि मैं इसके आसपास कैसे काम कर सकता हूं। यहां एक छोटा उदाहरण है जो उस पर ध्यान केंद्रित करता है जिसे मैं करने में सक्षम होना चाहता हूं।उपयोगकर्ता परिभाषित प्रकार सरणी/संग्रह में और प्रत्येक लूप के लिए
Option Explicit
Type Info
source As String
destination As String
End Type
Sub specialCopy()
Dim target As Variant
Dim AllTargets() As Info: AllTargets = SetAllTargets()
For Each target In AllTargets
CopyValues (target)
Next
End Sub
Function SetAllTargets() As Info()
Dim A As Info: A = SetInfo("A1", "B1")
Dim B As Info: B = SetInfo("A2", "B2")
Dim AllTargets() As Info
Set AllTargets = Array(A, B)
End Function
Function SetInfo(source As String, target As String) As Info
SetInfo.source = source
SetInfo.destination = destination
End Function
Sub CopyValues(target As Info)
Range(target.source).Select
Selection.Copy
Range(target.destination).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
मैं अपने AllTargets
सरणी के माध्यम से कैसे पुन: प्रयास कर सकता हूं? चूंकि मैं इसे संकलित करने में असमर्थ हूं क्योंकि यहां एक से अधिक समस्या हो सकती है। मुझे पूरी तरह से यकीन नहीं है कि जिस तरह से मैंने AllTargets
सूची सेट की है वह एक वैध वाक्यविन्यास है।
मैं उदाहरण के कोड में समस्याओं को कम करने के लिए फिर से काम:
Option Explicit
Type Info
source As String
destination As String
End Type
Sub specialCopy()
Dim target As Variant
Dim AllTargets As Collection: Set AllTargets = SetAllTargets()
For Each target In AllTargets
CopyValues (target) '2. unkown if this is possible
Next
End Sub
Function SetAllTargets() As Collection
Dim A As Info: A = SetInfo("A1", "B1")
Dim B As Info: B = SetInfo("A2", "B2")
Set SetAllTargets = New Collection
SetAllTargets.Add (A) '1. problem here when assigning user type
SetAllTargets.Add (B) '1. problem here when assigning user type
End Function
Function SetInfo(source As String, destination As String) As Info
SetInfo.source = source
SetInfo.destination = destination
End Function
Sub CopyValues(target As Info)
Range(target.source).Select
Selection.Copy
Range(target.destination).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
कोड संग्रह करने के लिए सरणी से चला गया - कभी भी कम वहाँ अभी भी उस में मुद्दों है कि अब मैं समाधान नहीं कर सकते हैं ।
मुझे लगता है कि मूल कारण वही रहा: उपयोगकर्ता परिभाषित प्रकारों का उपयोग करना। मैंने एक टिप्पणी के रूप में चिह्नित किया जहां मुझे लगता है कि समस्याएं स्थित हैं।
देर स्वीकृति के लिए खेद है में, यह मुझे कुछ समय लिया चारों ओर हो और यह परीक्षण करने के लिए। एक आकर्षण की तरह काम करता है हालांकि मुझे एहसास नहीं हुआ कि मुझे संपत्ति संपादक में कक्षा का नाम देना था। – Johannes
अच्छा बिंदु। मैंने कक्षा को सम्मिलित करने और इसे पुनर्नामित करने का तरीका शामिल करने के लिए उत्तर संपादित किया। –
कुछ अन्य भाषाओं में सिंटैक्टिक चीनी कहा जाता है। वीबीए वाक्य रचनात्मक कड़वाहट प्रदान करता है। –