2014-06-11 11 views
6

मैं के रूप में मैं नीचे प्रश्न का उत्तर नहीं मिल सकता है googling पर बुरा हो सकता है: जब तक हम सभी जानते हैं कि यह MsgBox उपयोग करने के लिए आसान है "हैलो दुनिया" मुद्रित करने के लिएप्रिंट एक वेरिएबल का नाम

Sub TEST() 
Dim sthstring as string 
sthstring = "Hello World" 
end sub 

, क्या वेरिएबल के नाम को मुद्रित करना संभव है (इस मामले में, "sthstring") और कैसे?

संपादित करें: के साथ जवाब के रूप में उपलब्ध न कराएं:,

Dim someotherstring as string 
someotherstring = "sthstring" 

के रूप में मैं चर के 'नाम' मुद्रित करने के लिए एक रास्ता खोजने के लिए होती धन्यवाद

+1

आप पहले से ही चर 'sthstring' कहा जाता है पता है, तुम क्यों कि इसके नाम से पता लगाने के लिए एक और तरीका है की जरूरत है? नाम ठीक है। प्रश्न के लिए –

+0

धन्यवाद ग्रेग। मुझे पता है कि यह समझ में नहीं आता है और विकल्प हैं, लेकिन मैं यह जानना चाहूंगा कि चर के नाम को प्रिंट करना स्वयं कर योग्य है या नहीं। – Alex

+1

आपके प्रश्न के लिए और भी कुछ होना चाहिए, मुझे लगता है कि आपने अपनी स्थिति को बहुत सरल बना दिया है। क्या आप विस्तार से समझा सकते हैं कि आप क्या करने की कोशिश कर रहे हैं? –

उत्तर

4

देखें टिप्पणियाँ मुझे लगता है कि आपको यह उत्तर उपयोगी लग सकती पढ़ने के बाद।

VBA Microsoft Visual Basic for Applications Extensibility 5.3 अनुदान आप पहुँच VBE वस्तु को प्रतिबिंब @Monty जंगली की तरह पहले ही उल्लेख किया गया है, लेकिन जोड़ने संदर्भ समर्थन नहीं करता। फिर आप अपने वीबीए प्रोजेक्ट में ऑब्जेक्ट मॉड्यूल को फिर से चालू कर सकते हैं और String प्रारूप में मॉड्यूल के लिए संपूर्ण कोड पुनर्प्राप्त कर सकते हैं।

पर विचार करें निम्नलिखित (में चिपका एक नई कार्यपुस्तिका के Module1)

Sub Main() 

    Dim code As String 
    code = GetCodeModule("Module1") 

    Debug.Print code 

End Sub 

Private Function GetCodeModule(ByVal codeModuleName As String) As String 
    Dim VBProj As VBIDE.VBProject 
    Dim VBComp As VBIDE.VBComponent 
    Dim CodeMod As VBIDE.CodeModule 

    Set VBProj = ThisWorkbook.VBProject 
    Set VBComp = VBProj.VBComponents(codeModuleName) 
    Set CodeMod = VBComp.CodeModule 

    GetCodeModule = CodeMod.Lines(1, CodeMod.CountOfLines) 
End Function 

आपका code चर अब सटीक कोड में है कि अपने Module1 आप जाँच कर सकते हैं संग्रहीत करता है कि तत्काल खिड़की ctrl खोलने के द्वारा + जी

आप लिखने/स्ट्रिंग घटकों चर नाम और मान को पुनः प्राप्त करने एकत्रित न करने के लिए एक Find समारोह में किसी प्रकार का उपयोग कर सकते हैं, लेकिन मैं यह कर के रूप में यह काफी मुश्किल प्राप्त कर सकते हैं की सिफारिश नहीं होगा।

+0

ऐसा लगता है कि मैं अपने मौजूदा कोड को वास्तव में "संशोधित" करने के लिए इसका उपयोग कर सकता हूं, जैसे कि संपादक में लाइनों को जोड़ने/घटाना। यह और मजेदार हो रहा है। – Alex

+0

@Alex के रास्ते से धन्यवाद, यह सब कोड है जो कोड को संग्रहीत करना चाहता है, अगर आप कोड को संशोधित करना चाहते हैं (हालांकि अनुशंसित नहीं है) तो आपको एक 'कोडमोड' वैरिएबल –

+0

के लिए एक चर और संदर्भ की आवश्यकता है धन्यवाद! पूरी तरह समझने से पहले मैं निश्चित रूप से सुरक्षित खेलूँगा कि यह क्या है। – Alex

1

कि संभावना असंभव है, के रूप में परिवर्तनीय नाम डेटा के लिए पॉइंटर्स हैं। आपके पास कई वैरिएबल हो सकते हैं जो सभी एक ही ऑब्जेक्ट को इंगित करते हैं (हालांकि वीबीए में मुझे विश्वास नहीं है कि तारों को ऑब्जेक्ट्स के रूप में माना जाता है ताकि यह संभव नहीं होगा, बायरफ फ़ंक्शन कॉल के अपवाद के साथ)।

+0

स्पष्टीकरण के लिए धन्यवाद हारून – Alex

3

यह करना मुश्किल है, क्योंकि वीबीए में प्रतिबिंब नहीं है, यानी सीधे खुद का संदर्भ नहीं दे सकता है।

हालांकि;

चूंकि एक टिप्पणी में आप उल्लेख करते हैं कि आप कोड को संदर्भित करना चाहते हैं, तो आप उपकरण/संदर्भ संवाद में Microsoft Visual Basic for Applications Extensibility 5.3 का संदर्भ देकर ऐसा कर सकते हैं। यह आपको वीबीए कोड का संदर्भ देने की क्षमता देता है, और वहां से आप कोड लिख सकते हैं जो खुद को प्रिंट करता है।

+0

धन्यवाद मॉन्टी, मैं कुछ समय वीबीए एक्सटेंसिबिलिटी 5.3 में देखूंगा, जो कि हो सकता है मुझे क्विन के समान ही चाहिए। इस पहले सुझाव देने के लिए – Alex

+0

+1। यद्यपि आपको वास्तव में VBIDE तक पहुंचने के संदर्भ को सेट करने की आवश्यकता नहीं है। – brettdj

5

आप एक कदम आगे जा सकते हैं जो बस कोड तक पहुंच रहा है।

Pearson से

  • के लिए उत्कृष्ट कोड अपडेट पता चलता है कि अनुप्रयोग Extensibility 5.3 के लिए माइक्रोसॉफ्ट विजुअल बेसिक के संदर्भ की स्थापना नहीं है VBIDE पहुँचने के लिए एक पूर्व-अपेक्षा
  • वास्तव में किसी भी Dim XX As String में पार्स आउट किसी भी codemodule और रिपोर्ट यह

नमूना उत्पादन

मंद sthstring के रूप में स्ट्रिंग (Module1 में: रेखा: 2)
मंद strSub स्ट्रिंग के रूप में (Module2 पर: रेखा: 2)
मंद FindWhat स्ट्रिंग के रूप में (Module2 पर: पंक्ति: 11)
मंद ProcName

कोड

Sub GetVariable() 
Dim strSub As String 
strSub = "As String" 
Call SearchCodeModule(strSub) 
End Sub 
स्ट्रिंग (: लाइन 9 Module3 पर) के रूप में
Function SearchCodeModule(ByVal strSub) 
     Dim VBProj As Object 
     Dim VBComp As Object 
     Dim CodeMod As Object 
     Dim FindWhat As String 
     Dim SL As Long ' start line 
     Dim EL As Long ' end line 
     Dim SC As Long ' start column 
     Dim EC As Long ' end column 
     Dim Found As Boolean 
 Set VBProj = ActiveWorkbook.VBProject 
     For Each VBComp In VBProj.VBComponents 
     Set CodeMod = VBComp.CodeModule 

     With CodeMod 
      SL = 1 
      EL = .CountOfLines 
      SC = 1 
      EC = 255 
      Found = .Find(target:=strSub, StartLine:=SL, StartColumn:=SC, _ 
       EndLine:=EL, EndColumn:=EC, _ 
       wholeword:=False, MatchCase:=False, patternsearch:=False) 
      Do Until Found = False 
       If Left$(Trim(.Lines(SL, 1)), 3) = "Dim" Then Debug.Print Trim(.Lines(SL, 1) & " (" & CStr(VBComp.Name) & " at: Line: " & CStr(SL)) & ")" 
       EL = .CountOfLines 
       SC = EC + 1 
       EC = 255 
       Found = .Find(target:=strSub, StartLine:=SL, StartColumn:=SC, _ 
        EndLine:=EL, EndColumn:=EC, _ 
        wholeword:=True, MatchCase:=False, patternsearch:=False) 
      Loop 
     End With 
     Next VBComp 
    End Function 
+0

धन्यवाद! एप्लीकेशन एक्सटेंसिबिलिटी 5.3 के लिए एमएस को जानना अच्छा है, यह एकमात्र तरीका नहीं है। हालांकि मैं कोड में "कॉलम" के उपयोग को स्पष्ट करना चाहता हूं - क्या वीबी संपादक वास्तव में स्प्रेडशीट के रूप में पंक्तियों और स्तंभों में विभाजित है? – Alex

संबंधित मुद्दे