मैं एक कस्टम फ़ंक्शन के परिणामों के लिए सेल का डिफ़ॉल्ट मान सेट करना चाहता हूं।

एक बार सेल का मान हो जाने के बाद उसे कभी नहीं बदलना चाहिए।

मैं या तो कैसे कर सकता हूं:

  • परीक्षण करें कि क्या कॉलिंग सेल का कोई मूल्य है? मैंने जो देखा है, यदि आप Application.Caller.Value का परीक्षण करते हैं, तो यह फ़ंक्शन को फिर से कॉल करने वाले सेल का पुनर्मूल्यांकन करता है। मैंने वर्तमान मान को पास करने का प्रयास किया है लेकिन यह सभी गोलाकार =myFunc(A1) हो जाता है।

  • मान सेट होने के बाद तुरंत फ़ंक्शन को हटा दें। मैंने Cell.Value = Cell.Value की कोशिश की है लेकिन यह फिर से फ़ंक्शन को कॉल करता है।

  • सेल को लॉक करें, या इसे read-only बनाएं, किसी प्रकार का जोड़ दें कभी भी मुझे फिर से परिकलित न करें फ़्लैग करें।

समस्या को फिर से बनाने के लिए - कोशिकाओं का एक गुच्छा =NOW() पर सेट करें, फिर एक पल के लिए प्रतीक्षा करें और एक अलग सेल करें और आप देखेंगे कि सभी सेल अभी अपडेट हो रहे हैं, मैं चाहता हूं कि मेरा फ़ंक्शन केवल एक बार चले।

सभी इनपुट कृतज्ञतापूर्वक प्राप्त हुए

1
user2983931 27 सितंबर 2019, 11:14
1
आप उपयोगकर्ता-परिभाषित फ़ंक्शन के माध्यम से वह हासिल नहीं कर पाएंगे जो आप करने का प्रयास कर रहे हैं। आपको Worksheet_Change ईवेंट पर एक नज़र डालनी चाहिए। ये आपको यह जांचने देंगे कि क्या बदले गए सेल में एक विशेष मूल्य है और फिर सेल या किसी अन्य चीज को लॉक कर दें जो आप सेल के साथ करना चाहते हैं।
 – 
riskypenguin
27 सितंबर 2019, 11:24

2 जवाब

अपने सटीक लक्ष्य के बारे में इतना निश्चित नहीं है, लेकिन आप इसे प्रासंगिक वर्कशीट कोड फलक में डालने का प्रयास कर सकते हैं:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.CountLarge > 1 Then Exit Sub

    If InStr(Target.Formula, "MyFunc") > 0 Then ' change "MyFunc" tou your actual function name
        Application.EnableEvents = False
        Application.Calculation = XlCalculation.xlCalculationManual
        Target.Value = Target.Value
        Application.EnableEvents = True
        Application.Calculation = XlCalculation.xlCalculationAutomatic
    End If
End Sub
0
DisplayName 27 सितंबर 2019, 11:25

जेबस, रबर डक के बारे में बात करें।

Public Function SetOnce() As String

Application.Caller.Clear
SetOnce = Rnd(100)

End Function


edit: ok this kind of works, but the function remains

0
user2983931 27 सितंबर 2019, 11:27
क्या यह आपके प्रश्न का समाधान है?
 – 
DisplayName
27 सितंबर 2019, 11:23
अच्छी तरह से यह काम करता है, लेकिन यह फ़ंक्शन छोड़ देता है, हालांकि इसे फिर से कभी नहीं बुलाया जाता है जब तक कि मैं बार में नहीं जाता और वापसी नहीं करता। मैं इसे चिह्नित करने से पहले आपके सुझाव का प्रयास करने जा रहा हूं
 – 
user2983931
27 सितंबर 2019, 11:30