2008-12-26 17 views
5

मैं एक एक्सेल मॉड्यूल प्रोग्राम करने की कोशिश कर रहा हूं जहां यह गतिशील रूप से डिज़ाइन समय पर बनाए गए फॉर्म में नई ऑब्जेक्ट्स में कोड डालने का प्रयास करता है।मैकफी ने वीबीए मॉड्यूल से कोड हटा दिया

मैं इस कोड का उपयोग कर रहा हूं जहां "कोड" में वास्तविक कोड के साथ एक स्ट्रिंग है जो DstrFiles ऑब्जेक्ट में जाना चाहिए।

Dim DstrFiles As Object 
Set DstrFiles = ThisWorkbook.VBProject.VBComponents("DistributeFiles") 

With DstrFiles.CodeModule 
    .InsertLines .CountOfLines + 1, Code 
End With 

मेरे समस्या इस को हल करने के लिए एक रास्ता है, जब मैं .InsertLines का उपयोग, McAfee मेरी मॉड्यूल से पूरे कोड को हटा है?

Form1.Controls.Add("Forms.Label.1", "Label1", True) 

तब मैं .InsertLines का उपयोग लेबल के साथ जाने के लिए कुछ कोड बनाने के लिए:

सबसे पहले मैं के साथ लेबल बना।

उदाहरण के लिए, मैं चाहता हूं कि लेबल पर पृष्ठभूमि रंग लाल हो जाए, जब कोई उस पर क्लिक करता है। "InsertLines "के साथ इसे पूरा करना बहुत आसान रहा है।

इस के आसपास काम करने का एक बदसूरत तरीका पृष्ठभूमि में तैयार होने से पहले कोड का एक गुच्छा बनाना है और फिर फ्लाई पर बनाए जाने वाले लेबल की मात्रा को सीमित करना है। - मुझे उम्मीद है कि यह उस पर नहीं आएगा।

मैं चारों ओर घूम रहा हूं, और यह मैकफी के साथ एक ज्ञात समस्या प्रतीत होता है।

क्या किसी को गतिशील उपयोगकर्ता फ़ॉर्म बनाने का कोई तरीका पता है जो नए लेबल या बटन को जोड़ सकता है जो Contrls के साथ जोड़े गए हैं। विधि जोड़ें?

+0

यहां एक चर्चा है जो मदद कर सकती है: http://www.vbforums.com/showthread.php?t=358444 – Fionnuala

उत्तर

7

आपको कोड लिखकर नए लेबल उत्पन्न नहीं करना चाहिए जो नियंत्रण बनाता है।

आपको नए लेबल बनाने के लिए नियंत्रण संग्रह पर एक विधि का उपयोग करना चाहिए।

उदाहरण के लिए:

UserForm1.Controls.Add("Forms.Label.1", "foo", True) 

आप WithEvents का उपयोग घटनाओं प्राप्त करने के लिए कर सकते हैं।

उदाहरण के लिए, UserForm1 में,

Public WithEvents a As MSForms.Label 

Private Sub a_Click() 

    MsgBox "label clicked" 

End Sub 

Private Sub CommandButton1_Click() 

    Set a = UserForm1.Controls.Add("Forms.Label.1", "foo", True) 
    a.Visible = True 
    a.Caption = "Hi There" 

End Sub 

आप नए जोड़े गए नियंत्रण की एक गतिशील सरणी बनाना चाहते हैं, तो आप एक छोटे से आवरण वर्ग बनाने की आवश्यकता होगी। Sample code for that is here.

+0

यह मेरे लिए वास्तव में पर्याप्त नहीं है। लेबल के साथ जाने के लिए मुझे कुछ कोड चाहिए।जब आप लेबल पर क्लिक करते हैं तो कुछ होना चाहिए। – Christian

+0

मैंने एक उदाहरण जोड़ा है कि –

+0

@ क्रिस्टियन कैसे करें: जोएल स्पॉस्की ने एक्सेल के लिए वीबीए/मैक्रो क्षमता का आविष्कार किया :) http://www.joelonsoftware.com/items/2007/04/25.html –

1

यदि संभव हो तो मैं कोड की गतिशील पीढ़ी के खिलाफ अनुशंसा करूंगा (एक स्व-संशोधित प्रोग्राम की तरह गंध?)।

आपकी विशिष्ट समस्या को जानने के बिना कहना मुश्किल हो सकता है लेकिन मुझे लगता है कि आवश्यक पैरामीटर के साथ फ़ंक्शन का उपयोग करके बेहतर समाधान है।

1

आप मैकफी के इस संस्करण को काम करने में सक्षम हो सकते हैं। लेकिन डेटा-फाइलों का अगला संस्करण, या कोई अन्य मैलवेयर अवरोधक आपको किसी भी तरह से अवरुद्ध कर सकता है।

तो आप विकास मशीन पर चलाने के लिए इस तरह के कोड बना सकते हैं, लेकिन यह ग्राहकों को वितरित किए जाने पर कभी भी (या केवल अस्थायी) काम नहीं करेगा।

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