2014-05-02 7 views
48

अद्यतन करने के लिए एक्सेल में एक यूडीएफ का उपयोग करना वास्तव में कोई प्रश्न नहीं है, लेकिन टिप्पणियों के लिए इसे पोस्ट करना क्योंकि मुझे पहले इस दृष्टिकोण को याद नहीं है। मैं पिछले जवाब पर एक टिप्पणी का जवाब दे रहा था, और कुछ ऐसा करने की कोशिश की जिसे मैंने पहले नहीं किया था: परिणाम दिलचस्प था इसलिए मैं इसे अपने स्वयं के उत्तर के साथ एक अकेले प्रश्न के रूप में पोस्ट करूंगा।वर्कशीट

"मेरे उपयोगकर्ता परिभाषित फ़ंक्शन के साथ क्या गलत है" के आधार पर SO (और कई अन्य मंच) पर कई प्रश्न हैं, जहां उत्तर "आप एक यूडीएफ से वर्कशीट अपडेट नहीं कर सकते" - इस प्रतिबंध को यहां बताई:

Description of limitations of custom functions in Excel

कुछ तरीकों जो इस जैसे काबू पाने के लिए वर्णित किया गया है रहे हैं यहां देखें (https://sites.google.com/site/e90e50/excel-formula-to-change-the-value-of-another-cell) लेकिन मुझे नहीं लगता कि मेरा सटीक दृष्टिकोण उनमें से है।

यह भी देखें: changing cell comments from a UDF

+1

बहुत दिलचस्प ....... जब मैं पीले लाल से जाने की कोशिश की मैं दुर्घटना एक्सेल हो गया है !! –

उत्तर

46

एक प्रतिक्रिया पोस्ट कर रहा है तो मैं अपने खुद के "सवाल" एक उत्तर के होने के रूप में चिह्नित कर सकते हैं।

मैंने अन्य कामकाज देखा है, लेकिन यह आसान लगता है और मुझे आश्चर्य है कि यह बिल्कुल काम करता है।

Sub ChangeIt(c1 As Range, c2 As Range) 
    c1.Value = c2.Value 
    c1.Interior.Color = IIf(c1.Value > 10, vbRed, vbYellow) 
End Sub 


'######## run as a UDF, this actually changes the sheet ############## 
' changing value in c2 updates c1... 
Function SetIt(src, dest) 

    dest.Parent.Evaluate "Changeit(" & dest.Address(False, False) & "," _ 
         & src.Address(False, False) & ")" 

    SetIt = "Changed sheet!" 'or whatever return value is useful... 

End Function 

यदि आपके पास साझा करना चाहते हैं तो इसके लिए दिलचस्प एप्लिकेशन हैं, तो कृपया अतिरिक्त उत्तर पोस्ट करें।

नोट: किसी भी प्रकार के वास्तविक "उत्पादन" एप्लिकेशन में अनचाहे।

+4

क्या किसी को पता है * क्यों * यह काम करता है? मेरा मतलब गंभीरता से है, यह जादू है। – RubberDuck

+0

मैंने इसे Win 7 HB, Excel 2003 पर परीक्षण किया है, मान ठीक हो गए हैं, लेकिन रंग स्वरूपण काम नहीं करता है .. इसके अलावा एक और काम है - उत्तर का भाग 2 देखें [http://stackoverflow.com /a/23232311/2165759 ](http://stackoverflow.com/a/23232311/2165759) – omegastripes

+0

विन 7 64-बिट पर एक्सेल 2010 32-बिट - काम किया! .. एक बार, फिर पुनर्मूल्यांकन करते समय दुर्घटनाग्रस्त हो गया। – AFischbein

10

MSDN KB गलत है।

यह

उपयोगकर्ता-निर्धारित समारोह किसी कार्यपत्रक कक्ष में एक सूत्र के द्वारा कहा जाता है Microsoft Excel के वातावरण को बदल नहीं सकते हैं। इसका मतलब यह है कि इस तरह के एक समारोह के निम्न में से कोई ऐसा नहीं कर सकते:

  1. सम्मिलित करने, हटाने या प्रारूप कोशिकाओं स्प्रेडशीट पर।
  2. किसी अन्य सेल का मान बदलें।
  3. कार्यपुस्तिका में चादरें ले जाएं, नाम बदलें, हटाएं या जोड़ें।
  4. किसी भी पर्यावरण विकल्प, जैसे गणना मोड या स्क्रीन दृश्यों को बदलें।
  5. कार्यपुस्तिका में नाम जोड़ें
  6. गुण सेट करें या अधिकांश विधियां निष्पादित करें।

नीचे दिए गए कोड में आप अंक 1, 2,4 और 5 आसानी से प्राप्त कर सकते हैं।

Function SetIt(RefCell) 
    RefCell.Parent.Evaluate "SetColor(" & RefCell.Address(False, False) & ")" 
    RefCell.Parent.Evaluate "SetValue(" & RefCell.Address(False, False) & ")" 
    RefCell.Parent.Evaluate "AddName(" & RefCell.Address(False, False) & ")" 

    MsgBox Application.EnableEvents 
    RefCell.Parent.Evaluate "ChangeEvents(" & RefCell.Address(False, False) & ")" 
    MsgBox Application.EnableEvents 

    SetIt = "" 
End Function 

'~~> Format cells on the spreadsheet. 
Sub SetColor(RefCell As Range) 
    RefCell.Interior.ColorIndex = 3 '<~~ Change color to red 
End Sub 

'~~> Change another cell's value. 
Sub SetValue(RefCell As Range) 
    RefCell.Offset(, 1).Value = "Sid" 
End Sub 

'~~> Add names to a workbook. 
Sub AddName(RefCell As Range) 
    RefCell.Name = "Sid" 
End Sub 

'~~> Change events 
Sub ChangeEvents(RefCell As Range) 
    Application.EnableEvents = False 
End Sub 

![enter image description here

+1

सिर्फ बहस के लिए - क्या यह तर्क दिया जा सकता है कि केबी सही है, क्योंकि यूडीएफ एक सब का मूल्यांकन/कॉल कर रहा है, जो वास्तव में बदल रहा है ...? –

+0

बहस के लिए तत्काल: पी केबी को स्पष्ट रूप से कहना चाहिए कि 'कंबल स्टेटमेंट जारी करने के बजाए उपरोक्त/नीचे उप-कॉलिंग का उपयोग करके ऊपर/नीचे हासिल किया जा सकता है' कि ऐसा कोई कार्य निम्न में से कोई भी कार्य नहीं कर सकता है। ... '@MacroMan –

+3

अच्छी वापसी;) जाहिर है कि एमएस के लोग इसके लिए तैयार नहीं थे। मैं ऐसी चीजों के लिए 'vba-voodoo' का एक नया टैग भी प्रस्तावित कर रहा हूं –

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