2010-03-25 11 views
15

पात्रों आप एक VBA समारोह में स्ट्रिंग में उपयोग कर सकते हैं की अधिकतम संख्या 255 है मैं इस समारोहएक वीबीए समारोह में अधिकतम स्ट्रिंग आकार के आसपास हो रही है?

Var1= 1 
Var2= 2 
. 
. 
. 
Var256 =256 

RunMacros= "'Tims_pet_Robot """ & Var1 & """ , """ & Var2 & """ , """ ... """ & Var256 """ '" 
Runat=TimeValue("15:00:00") 
Application.OnTime EarliestTime:=Runat, Procedure:=RunMacros & RunMacros2 ', schedule:=True 

यह एक निश्चित समय पर एक प्रक्रिया चलाता है और इसे करने के लिए चर का एक गुच्छा गुजरता चलाने के लिए कोशिश कर रहा हूँ है । लेकिन स्ट्रिंग बहुत लंबी है।

अद्यतन: अफसोस की बात है कि मुझे यकीन है कि यह घड़ी खिड़की नहीं है। इसके अलावा, यह वास्तव में एक स्ट्रिंग का अधिकतम आकार नहीं है जिसके साथ मैं काम कर रहा हूं। यह का अधिकतम आकार VBA फ़ंक्शन में एक स्ट्रिंग है।

उदाहरण के लिए यह फ़ंक्शन काम करता है।

Sub test() 
Dim RunAt As Date 
Dim RunWhat As String 

RunAt = Now + 0.00001 
RunWhat = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" & _ 
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" & _ 
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 'that makes 254 'a''s 
Application.OnTime EarliestTime:=RunAt, Procedure:="'" & RunWhat & " 12'" 

End Sub 


Sub aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(m As Integer) 
MsgBox ("it works!" & m) 
End Sub 

लेकिन अगर आप को बदलने के लिए 12 123 के लिए यह टूट जाता है उदाहरण

Sub test2() 
Dim RunAt As Date 
Dim RunWhat As String 

RunAt = Now + 0.00001 
RunWhat = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" & _ 
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" & _ 
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 'that makes 254 'a''s 
Application.OnTime EarliestTime:=RunAt, Procedure:="'" & RunWhat & " 123'" 

End Sub 


Sub aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(m As Integer) 
MsgBox ("it works!" & m) 
End Sub 

इस कोड काम नहीं करता, मैं बहुत यकीन है कि यह है, क्योंकि एक VBA समारोह में 255 से अधिक के साथ एक स्ट्रिंग को संभाल नहीं कर सकते हैं वर्ण। भले ही आप Excel में हों और फ़ंक्शन को कॉल करें और इसे एक स्ट्रिंग दें कि 255 वर्ण यह काम नहीं करते हैं।

सेल ए 1 = vlookup ("वास्तव में लंबी स्ट्रिंग", ए 1: जेड 10, 1) में आज़माएं और फिर उस सीमा में वास्तव में लंबी स्ट्रिंग डालें। Vlookup असफल हो जाएगा (इसे खोजने में विफल नहीं है, लेकिन आप वास्तव में ऐसा करने में सक्षम नहीं होंगे)

मुझे भी पता है कि उप नाम की अधिकतम लंबाई है, मैं बस इसके अंतर्गत हूं। क्षमा करें कि यह बहुत बदसूरत लग रहा है।

अद्यतन 2: इसलिए मैंने चर को एक शीट पर प्रिंट करना समाप्त कर दिया और शीट से उन्हें पढ़ने के लिए ऑनटाइम द्वारा फ़ंक्शन को प्राप्त किया। :(

+3

[जोएल स्पॉल्स्की से] (http://www.joelonsoftware.com/articles/fog0000000319.html) (जिसने प्रारंभिक एक्सेल विकास में से अधिकांश का नेतृत्व किया): "एक्सेल आंतरिक रूप से पास्कल स्ट्रिंग का उपयोग करता है, यही कारण है कि कई जगहों पर तार एक्सेल 255 बाइट तक सीमित है, और यह भी एक कारण है कि एक्सेल तेज तेज है। " यह शायद आपके द्वारा उल्लिखित वीएलूकअप मुद्दे पर लागू होता है, हालांकि जैसा कि अन्य ने कहा है, वीबीए की ऐसी कोई सीमा नहीं है। – mwolfe02

+3

आप एक 'स्ट्रिंग (number_of_repeats, char_to_repeat) का उपयोग कर सकते' 'बजाय aaaaaaaaaaaaaaaaaaaaaaaaaaa की मक्खी पर एक स्ट्रिंग बनाने के लिए ...' –

उत्तर

10

यह काम करता है और 255 से अधिक से पता चलता संदेश बॉक्स में अक्षर।

Sub TestStrLength() 
    Dim s As String 
    Dim i As Integer 

    s = "" 
    For i = 1 To 500 
     s = s & "1234567890" 
    Next i 

    MsgBox s 
End Sub 

संदेश बॉक्स 1023 अक्षरों तक स्ट्रिंग ट्रंकेटस, लेकिन स्वयं स्ट्रिंग बहुत बड़ा हो सकता।

मैं यह भी अनुशंसा करता हूं कि संख्याओं के साथ निश्चित चर नामों का उपयोग करने के बजाय (उदा। Var1, Var2, Var3, ... Var255) कि आप एक सरणी का उपयोग करते हैं। यह बहुत कम घोषणा और उपयोग करने में आसान है - loops।

Sub StrArray() 
Dim var(256) As Integer 
Dim i As Integer 
Dim s As String 

For i = 1 To 256 
    var(i) = i 
Next i 

s = "Tims_pet_Robot" 
For i = 1 To 256 
    s = s & " """ & var(i) & """" 
Next i 

    SecondSub (s) 
End Sub 

Sub SecondSub(s As String) 
    MsgBox "String length = " & Len(s) 
End Sub 

इस अपडेट किया गया पता चलता है कि एक स्ट्रिंग से अधिक समय तक 255 वर्ण और एक पैरामीटर कि जिस तरह से एक के रूप में सबरूटीन/समारोह में इस्तेमाल किया जा सकता है:

यहाँ एक उदाहरण है। इससे पता चलता है कि स्ट्रिंग लंबाई 1443 वर्ण है। वीबीए में वास्तविक सीमा 2 जीबी प्रति स्ट्रिंग है।

शायद आपके द्वारा उपयोग किए जा रहे एपीआई के साथ एक समस्या है और इसकी स्ट्रिंग (जैसे निश्चित लंबाई स्ट्रिंग) की सीमा है। मुद्दा वीबीए के साथ नहीं है।

ठीक है, मुझे लगता है कि समस्या विशेष रूप से एप्लिकेशन के साथ है। ओनटाइम विधि स्वयं। यह Excel कार्यों की तरह व्यवहार कर रहा है जिसमें वे केवल तारों को स्वीकार करते हैं जो लंबाई में 255 वर्ण तक हैं। वीबीए प्रक्रियाओं और कार्यों के बावजूद मैंने यह सीमा नहीं दिखाई है। शायद तब यह सीमा किसी भी अंतर्निहित एक्सेल ऑब्जेक्ट विधि के लिए लगाई गई है।


अद्यतन:
...longer than 255 characters...

+1

प्रतिक्रिया के लिए धन्यवाद। तुम सही हो। वीबीए में कार्य 2 जीबी तक तारों को संभाल सकते हैं! धन्यवाद। लेकिन जैसा कि आपको एहसास हुआ कि मेरी वास्तविक समस्या एप्लिकेशन के साथ है। ओनटाइम विधि एक्सेल फ़ंक्शन की तरह व्यवहार कर रही है, जिसमें यह केवल 255 के आकार की स्ट्रिंग को संभाल सकता है। मुझे लगता है कि मुझे यह स्वीकार करना चाहिए कि मुझे काम करना होगा यह सीमा? मैं उम्मीद कर रहा था कि इसके चारों ओर कुछ रास्ता था। – Ommit

9

क्या आपको यकीन है This forum thread चलता है कि यह अपनी घड़ी खिड़की हो सकता है एक MsgBox को स्ट्रिंग outputting की कोशिश करो, जो 1024 वर्णों की एक अधिकतम प्रदर्शित कर सकते हैं:।

MsgBox RunMacros 
+3

255 वस्तुओं/पात्रों घड़ी खिड़की के लिए अधिकतम है। मैं अतीत में एक ही समस्या w/संग्रह संग्रह में भाग गया। – Fink

+0

कोई पासा नहीं। यह घड़ी खिड़की नहीं है। त्रुटि ऑनटाइम फ़ंक्शन के साथ है। अद्यतन देखें। टिप्पणी के लिए धन्यवाद हालांकि – Ommit

10

मैं यहाँ कुछ चूक गए हों को ...longer than 256 characters... बदल गया है, लेकिन क्यों तुम सिर्फ वांछित आकार के साथ अपने स्ट्रिंग की घोषणा नहीं कर सकते हैं? उदाहरण के लिए, मेरे वीबीए कोड में मैं अक्सर कुछ उपयोग करता हूं:

Dim AString As String * 1024 

जो 1k स्ट्रिंग प्रदान करता है। जाहिर है, आप Excel की बड़ी सीमाओं और उपलब्ध स्मृति इत्यादि के भीतर जो भी घोषणा पसंद करते हैं उसका उपयोग कर सकते हैं

कुछ मामलों में यह थोड़ा अक्षम हो सकता है, और आप शायद ट्रिम (एएसटींग) का उपयोग करना चाहते हैं जैसे कि किसी भी को रोकना अनावश्यक पीछे की ओर रिक्त स्थान। फिर भी, यह आसानी से 256 वर्णों से अधिक है।

1

यह परीक्षण दिखाता है कि वीबीए में स्ट्रिंग कम से कम 10^8 वर्ण लंबी हो सकती है। लेकिन अगर आप इसे 10^9 में बदल देते हैं तो आप असफल हो जाएंगे।

Sub TestForStringLengthVBA() 
    Dim text As String 
    text = Space(10^8) & "Hello world" 
    Debug.Print Len(text) 
    text = Right(text, 5) 
    Debug.Print text 
End Sub 

तो इंटरमीडिएट विंडो संपादक या संदेशबॉक्स आउटपुट द्वारा गुमराह न करें।

+0

मैं पुष्टि कर सकता हूं कि तत्काल विंडो (डीबग.प्रिंट myvariable के साथ) का उपयोग करते हुए घड़ियां विंडो 252 वर्णों पर एक स्ट्रिंग चर के प्रदर्शन को छोटा कर देगी, 252 वर्ण प्रदर्शित करेगी। यद्यपि ओपी की समस्या घड़ियां खिड़की से असंबंधित हो सकती है, लेकिन इस छेड़छाड़ ने मुझे बहुत बर्बाद प्रयास (साथ ही लैंडिंग!) के रास्ते को भी भेजा है, इसलिए मैंने सोचा कि मैं इसमें घुसपैठ करूँगा। इस तरह की एक var को टंकण करना किसी नए व्यक्ति के लिए भ्रमित हो सकता है वीबीए के लिए और यह समस्या को कहीं और बता सकता है जहां यह वास्तव में घड़ियाँ यूआई का एक quirk है। –