2012-12-19 9 views
12

दृश्य स्टूडियो में मेरे पास Excel 2010 एड-इन प्रोजेक्ट है। मैं कैसे है कि परियोजना के निम्नलिखित मॉड्यूल बनाने के हो सकते हैं:।विजुअल स्टूडियो एक्सेल में उपयोगकर्ता परिभाषित फ़ंक्शन जोड़ें

enter image description here

मैं जानता हूँ कि मुझे लगता है कि मॉड्यूल के साथ कि कार्यपुस्तिका को बचा सकता है तो मेरी ऐड के साथ उपयोग करें यह अच्छा होगा यदि मैं अपने ऐड-इन हो सकता है हो जाएगा उस मॉड्यूल को बनाएं ...

+2

शायद [यह] (http: // blogs.msdn.com/b/eric_carter/archive/2004/12/01/writing-user-defined-functions-for-excel-in-net.aspx) मदद कर सकता है। –

+0

*** Nooooo! *** इस पथ से नीचे जाने से पहले दो बार सोचें।मैं आपको यूडीएफ दृष्टिकोण का उपयोग करने का आग्रह करता हूं ताकि आपका कोड तर्क ए) महत्वपूर्ण तर्क बदलने वाले एक्सेल उपयोगकर्ताओं से संरक्षित * * एक एडी-इन में और कई कार्यपुस्तिकाओं में डुप्लिकेट नहीं किया जा सकता है c) विश्वसनीय नहीं है अनुमति डी) यूनिट टेस्टेबल ई) एक अद्यतित भाषा और आदि में लिखी गई –

उत्तर

3

मुझे नहीं लगता कि वीएसटीओ एक्सेल यूडीएफ का समर्थन करता है, सामान्य सिफारिश ऑटोमेशन ऐड-इन (सिड के लिंक सुझाव के रूप में) का उपयोग करना है।

एक और विकल्प वीबीए से प्रबंधित वीएसटीओ समारोह को कॉल करना है। एक बार फिर यह अनुशंसित नहीं है लेकिन संभव है।

(लिंक से ट्यूटोरियल का पुनरावृत्ति) यहां वीबीए से प्रबंधित कार्यों को कॉल करने का कोई आसान तरीका है।

अपने कार्यों के साथ एक वर्ग VSTO में

<System.Runtime.InteropServices.ComVisible(True)> _ 
Public Class MyManagedFunctions 
    Public Function GetNumber() As Integer 
     Return 42 
    End Function 
End Class 

तार ऊपर VSTO में

Private Sub ThisWorkbook_Open() Handles Me.Open 
    Me.Application.Run("RegisterCallback", New MyManagedFunctions) 
End Sub 

VBA में कार्यों के लिए प्रबंधित कोड के लिए हुक और एक आवरण बना

VBA करने के लिए अपने कक्षा बनाएं

आपकी स्प्रेडशीट या दस्तावेज़ में वीबीए मॉड्यूल में

Dim managedObject As Object 

Public Sub RegisterCallback(callback As Object) 
    Set managedObject = callback 
End Sub 

Public Function GetNumberFromVSTO() As Integer 
    GetNumberFromVSTO = managedObject.GetNumber() 
End Function 

अब आप एक सेल में GetNumberFromVSTO() दर्ज कर सकते हैं = जब एक्सेल शुरू होता है सेल मूल्य होना चाहिए 42.

http://blogs.msdn.com/b/pstubbs/archive/2004/12/31/344964.aspx

+0

यही मेरे पास है। यह अच्छा होगा अगर मैं मैक्रो सक्षम वर्कबुक (book1.xlsx) प्रकाशित किए बिना प्लग-इन प्रकाशित कर सकता हूं तो मुझे लगता है कि यह सही नहीं है? –

10

यह मॉड्यूल बनाने के लिए संभव है। हालांकि इसके लिए "वीबी परियोजना मॉडल तक पहुंच पर भरोसा" करने के लिए सेटिंग को काम करने के लिए Excel में चुना जाना चाहिए। यह एक त्रुटि फेंकता है कि ट्रस्ट सेटिंग का चयन नहीं होने पर पहुंच अस्वीकार कर दी गई है।

using Excel = Microsoft.Office.Interop.Excel; 
using VB = Microsoft.Vbe.Interop; 

Excel.Application eApp = new Excel.Application(); 

eApp.Visible = true; 
Excel.Workbook eBook = eApp.Workbooks.Add(); 

VB.VBProject eVBProj = (VB.VBProject)eBook.VBProject; 
VB._VBComponent vbModule = eVBProj.VBE.ActiveVBProject.VBComponents.Add(VB.vbext_ComponentType.vbext_ct_StdModule); 

String functionText = "Function MyTest()\n"; 
     functionText += "MsgBox \"Hello World\"\n"; 
     functionText += "End Function"; 

vbModule.CodeModule.AddFromString(functionText); 
+0

आप बुरा हैं :) –

1

एक VSTO ऐड यूडीएफ के नहीं बना सकते, तो आप कार्यों के लिए एक अलग ऐड बनाना होगा। यद्यपि यह एडिन वीएसटीओ एडिन के समान डीएलएल में हो सकता है, लेकिन आप वीएसटीओ और यूडीएफ के बीच विशेष चालबाजी के बिना संवाद नहीं कर सकते हैं।

मेरे पास blog post है। यह आपको एक पूर्ण उदाहरण परियोजना देता है जिसमें वीएसटीओ और यूडीएफ शामिल हैं।

यहां यूडीएफ की मूल संरचना है।

[Guid("3B81B6B7-3AF9-454F-AADF-FAF06E5A98F2")] 
[InterfaceType(ComInterfaceType.InterfaceIsDual)] 
[ComVisible(true)] 
public interface IFunctions 
{ 
    int MYINT(); 
} 

[Guid("F58C591D-A22F-49AD-BC21-A086097DC26B")] 
[ClassInterface(ClassInterfaceType.None)] 
[ComVisible(true)] 
public class Functions : IFunctions 
{ 
    public int MYINT() 
    { 
     return 42; 
    } 
} 
2

आप वास्तव में क्या करना चाहते हैं नेट UDFs, या एक संयुक्त .NET अनुप्रयोग स्तर आदेश और यूडीएफ ऐड तो का उपयोग कर VSTO एक अच्छा समाधान वर्तमान में नहीं है लिखने के लिए है: मैं का उपयोग कर की सिफारिश करेंगे या तो Addin Express (
लागत) या Excel DNA (फ्री)।
इनमें से दोनों आपको .NET XLL UDF एडिन और ऑटोमेशन यूडीएफ एडिन (एक्सएलएल यूडीएफ एडिन्स महत्वपूर्ण प्रदर्शन फायदे प्रदान करते हैं लेकिन एक्सेल ऑब्जेक्ट मॉडल के लिए थोड़ा अधिक प्रतिबंधित पहुंच प्रदान करते हैं)

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