কাস্টম সূত্র আপডেট হচ্ছে না


5

আমি নীচের কাস্টম ফাংশনটি তৈরি করতে এই গাইডটি অনুসরণ করেছি যা আমার স্প্রেডশিটে একটি নির্দিষ্ট রঙের কক্ষের সংখ্যা গণনা করে:

Function ColorFunction(rColor As Range, rRange As Range, Optional SUM As Boolean)
Dim rCell As Range
Dim lCol As Long
Dim vResult
lCol = rColor.Interior.ColorIndex
    If SUM = True Then
       For Each rCell In rRange
        If rCell.Interior.ColorIndex = lCol Then
                vResult = WorksheetFunction.SUM(rCell) + vResult
        End If
       Next rCell
    Else
        For Each rCell In rRange
        If rCell.Interior.ColorIndex = lCol Then
                vResult = 1 + vResult
        End If
       Next rCell
End If
ColorFunction = vResult
End Function

এটি সূক্ষ্মভাবে কাজ করে এবং যদি আমি সূত্র বারে সবুজ টিকটি ক্লিক করি তবে আমি অন্য একটি ঘর রঙ করার পরে স্বয়ংক্রিয়ভাবে আপডেট হবে না তা প্রত্যাশিত ফলাফল দেয়। আমি স্প্রেডশিটে অন্য যে কোনও জায়গায় ম্যানুয়ালি কোনও রঙিন রঙ করেছি প্রতিবার স্বয়ংক্রিয়ভাবে গণনা আপডেট করার জন্য কীভাবে সেট করব?

অতিরিক্ত তথ্য: আমি ম্যাকের উপরে এক্সেল ব্যবহার করছি এবং আমি সেটিংসে যাচাই করেছি এবং স্বয়ংক্রিয়ভাবে গণনা চালু করা হবে।

উত্তর:


5

এক্সেল কেবলমাত্র ইউডিএফগুলির পুনরায় গণনা করে যখন তাদের ইনপুট পরিবর্তন হয়

আপনি একটি ব্যবহারকারী-সংজ্ঞায়িত ফাংশন (ইউডিএফ) তৈরি করেছেন। এক্সেল কেবলমাত্র একটি ইউডিএফ কোড চালায় যখন ঘর (গুলি) যে ফাংশন পরিবর্তনে ইনপুট হিসাবে পরিবেশন করে।

উদাহরণস্বরূপ, ধরুন আমার কাছে এই ইউডিএফ রয়েছে:

Public Function MyFunction(Target As Range)
MsgBox "The target cell's address is " &  Target.Address
End Function

এবং আমার কার্যপত্রকের A1 কক্ষে আমি সূত্রটি সহ ঘরটি উল্লেখ করি:

=MyFunction(A2)

আমার ওয়ার্কবুকের স্বাভাবিক ব্যবহারের সময়, আমার ইউডিএফ কোডটি কেবল তখনই কল করা হবে যখন এ 2 এর সূত্র দ্বারা রেফারেন্স করা ঘর A2 বা অন্য কোনও কক্ষের বিষয়বস্তুতে পরিবর্তন হয়েছে।

সলিউশন

আপনি এই আচরণটি বিভিন্ন উপায়ে কাজ করতে পারেন:

  1. ফোর্স এক্সেল ম্যানুয়াল পুনঃগণনা করার ওয়ার্কবুক মধ্যে সূত্রের সব এমনকি যদি তারা না গত হিসাব যেহেতু দ্বারা পরিবর্তিত হয়েছে টিপে Ctrl + + Alt+ + F9Windows এ এবং (আমি Mac এ অনুমান) Cmd+ + Alt+ + F9। যদি এটি কাজ না করে আপনি Shiftপুনরায় গণনা করার আগে অতিরিক্ত যা নির্ভরশীল সূত্রগুলি পরীক্ষা করে তা যুক্ত করার চেষ্টা করতে পারেন ।
  2. আপনার ইউডিএফ দ্বারা রেফারেন্স হওয়া কোনও একটি কক্ষে একটি উদ্বায়ী ফাংশন অন্তর্ভুক্ত করুন। অতিরিক্ত প্যারামিটার গ্রহণ করতে আপনার ভিবিএ ফাংশনের সংজ্ঞা সংশোধন করে এটি করুন:

    Public Function MyFunction(Target As Range, Optional VolatileParameter As Variant)

    তারপরে কোনও উদ্বায়ী ফাংশনের ফলাফল যেমন ইউডিএফ-তে পাস করার জন্য আপনার ইউডিএফকে রেফারেন্সিং কক্ষে সম্পাদনা করুন Now():

    =MyFunction(A2,Now())

    নেট ফলাফলটি হ'ল এক্সেল আপনার ইউডিএফ-এর রেফারেন্স সম্বলিত কক্ষটিকে বিবেচনা করবে এবং প্রতিবার ওয়ার্কশিটটি পরিবর্তন করার সময় পুনরুদ্ধার করা প্রয়োজন কারণ এটি একটি অস্থির ফাংশনকে উল্লেখ করে।

  3. ইউডিএফ সমন্বিত কক্ষটি সম্পাদনা করুন। কেবলমাত্র ঘরে প্রবেশ করে তারপরে পরিবর্তন না করে এন্টার টিপুন কোনও আপডেট ট্রিগার করার জন্য পর্যাপ্ত হওয়া উচিত।

  4. ম্যাক্রো বোতামটি তৈরি করুন যা নিম্নলিখিত কোডটির লাইন চালায় :

    Application.CalculateFull
  5. আপনার ওয়ার্কবুকের খোলা ইভেন্টে নিম্নলিখিত কোডটি রাখুন:

    ActiveWorkbook.ForceFullCalculation = True

    এটি পুনরায় গণনার প্রয়োজন বলে বিশ্বাস না করেই এক্সেল সর্বদা সমস্ত সূত্র পুনরায় গণনা করতে বাধ্য করে। এক্সেল পুনরায় চালু না হওয়া পর্যন্ত এই সেটিং কার্যকর থাকবে in


কেন এক্সেল সর্বদা আমার ইউডিএফ পুনরায় গণনা করে না?

এক্সেল যখন একটি স্বয়ংক্রিয় পুনঃ গণনা সম্পাদন করে, তখন এটি কার্য পুস্তকের প্রতিটি সূত্র পুনরায় গণনা করে না। পরিবর্তে এটি কেবলমাত্র সেই কোষগুলিকেই আপডেট করে যা সূত্রে সর্বাধিক সংশোধিত কক্ষের উল্লেখ করে। এই পদ্ধতিটি কেবলমাত্র বিশাল সংখ্যাগরিষ্ঠদের জন্য একই ফলাফল নিয়ে আসতে পুরো ওয়ার্কবুক জুড়ে অগণিতভাবে অনেক গণনা সম্পাদনের দীর্ঘতর প্রক্রিয়া এড়িয়ে চলে।

একটি ইউডিএফের সাথে, ওয়ার্কবুকের একমাত্র উল্লেখগুলি যা এক্সেলের গণনা ইঞ্জিন সচেতন সেগুলি হ'ল ফাংশনের ইনপুটগুলিতে চিহ্নিত। এক্সেল ইউডিএফ-এর মধ্যে ভিবিএ কোড পরীক্ষা করতে পারে না এবং ফাংশনের আউটপুটকে প্রভাবিত করতে পারে এমন অন্যান্য ঘরগুলি সনাক্ত করতে পারে না। ফাংশনের লেখক ওয়ার্কবুকের যে কোনও সংখ্যক পরিবর্তনের উপর ভিত্তি করে বিভিন্ন ফলাফল ফেরত দেওয়ার জন্য ফাংশনটি তৈরি করতে পারেন, তবে এক্সেল জানে এমন একমাত্র কোষ এই ফাংশনের ফলাফল পরিবর্তন করবে বলে ঘোষিত ইনপুট। সুতরাং, ইউডিএফ পুনর্নির্মাণ করা দরকার কিনা তা সিদ্ধান্ত নেওয়ার সময় এই কক্ষগুলির পরিবর্তনগুলি কেবলমাত্র এক্সেলই মনোযোগ দেয়।


2

আমি যখন ইউটিএফ-র ইনপুট হিসাবে ব্যবহৃত লিঙ্কযুক্ত কক্ষগুলি প্রভাবিত না করতাম তখনও যখন কোনও অ্যাক্টিভেক্স টেক্সটবক্স পরিবর্তন করা হয় তখন সমস্ত ব্যবহারকারীর সংজ্ঞায়িত ফাংশনগুলি আপডেট করার আশায় আমি এটিকে আঘাত করেছি। দুর্ঘটনাক্রমে আমি আবিষ্কার করেছি যে ফাংশন কলটিতে যে কোনও অপ্রত্যক্ষ সেল রেফারেন্স সহ এটি যখনই প্রদর্শিত হতে পারে (মনে হয়) অন্য কোনও ঘর সম্পাদিত হয়। সম্ভবত এটি হ'ল কারণ যখন কোনও অপ্রত্যক্ষ পরিবর্তক ব্যবহার করা হয় তখন এক্সেলটির অশোধিত হওয়ার বিষয়ে কী বিশ্বাস করা যায় সে সম্পর্কে কম গ্যারান্টি রয়েছে। এটি টুইস্টি ইম্পারসনেটরের দ্বিতীয় উত্তরের অনুরূপ তবে আপনার ভিবিএ কোড এবং সূত্রগুলিতে কম ক্রাফ্ট যুক্ত করে (যতক্ষণ ফাংশনে কমপক্ষে একটি পরিসর ব্যবহৃত হয়)।

উদাহরণ: এই ফাংশনটি সর্বদা 'A2' এর মানটি ফিরিয়ে আনতে হবে

Public Function test(some_arg)
test = Sheets("Sheet1").Range("A2").Value
End Function

আপনি যদি এটিকে কল করেন তবে =test(B1)এটি আপডেট হবে না যখনই A2 ​​পরিবর্তন হয় আপনি যদি এটি কল করেন এটি =test(INDIRECT(ADDRESS(ROW(B1),COLUMN(B1)))কার্যকরী সমতুল্য, এবং যখনই A2 ​​পরিবর্তন হবে আপডেট হবে।

=test(INDIRECT("B1")) এছাড়াও কাজ করবে এবং এই উদাহরণটি বোঝার জন্য পরিষ্কার হতে পারে তবে "বি 1" একটি স্ট্রিং কারণ আপনি নতুন মানগুলিতে সূত্রটি অনুলিপি করতে পারবেন না।


1

ফর্ম্যাট পরিবর্তনগুলি (যার মধ্যে রঙ পরিবর্তনগুলি অন্তর্ভুক্ত ) এক্সেলগুলিতে পুনর্বার গণনার মতো ঘটনা বিবেচিত হয় না। এটি ব্যবহারকারীর সংজ্ঞায়িত ফাংশনগুলির সাথে সম্পর্কিত নয়। অতএব, যে কোনও বিন্যাসের পরিবর্তন পুনর্বিবেচনার ফলস্বরূপ নয়।

এটি স্বেচ্ছাসেবী নয়, তবে কিছুটা বোঝা যায়, কারণ সাধারণত ফর্ম্যাট পরিবর্তনগুলি অন্য কোনও কিছুকে প্রভাবিত করে না, সুতরাং একটি পুনর্নির্মাণ - যা ব্যয়বহুল - নষ্ট হবে। যেহেতু এক্সেল এখন ভিবি'কে ফর্ম্যাট তথ্য ব্যবহার করতে এবং এটিতে প্রতিক্রিয়া জানাতে অনুমতি দেয়, এটি এটি আপনার হয়ে যেমন সমস্যা হয়ে উঠতে পারে।

আপনি সমস্ত কক্ষের জন্য ওনচেঞ্জ ফাংশন সেট করতে এবং সেখানে পুনরায় গণনা ট্রিগার করতে সক্ষম হতে পারেন তবে ফর্ম্যাট পরিবর্তনের ফলে এই ফাংশনটি সবেমাত্র প্রকাশিত হতে পারে না (আমি কখনই চেষ্টা করি নি)।


এক্সেল কীভাবে ইউডিএফগুলি পুনরায় গণনা করে তার সাথে ওপি-র সমস্যাটি রয়েছে। আপনি যখন ঠিক আছেন যে কোনও ফর্ম্যাটিং পরিবর্তন পুনর্বারণাকে ট্রিগার করে না, তবে এটি ঠিক নয় যে কেবল কোনও পুনর্নির্মাণই তার ইউডিএফ আপডেট করবে। এই সমস্যাটি সঠিকভাবে সমাধানের জন্য এই পার্থক্যটি বোঝা অত্যন্ত গুরুত্বপূর্ণ।
টুইস্টি ইম্পারসনেটর

1

এগুলির কোনওটিই আমার পক্ষে কাজ করেনি। আমি দেখতে পেয়েছি যে আমি আমার ইউডিএফ গণনা করতে পারি তার একমাত্র উপায় হ'ল নীচের কোডটি ওয়ার্কশিট.অ্যাক্টিভেট ইভেন্টের সাথে যুক্ত করা এবং খোলা জায়গায় অন্য শীটে ফোকাসটি নির্দেশ করা। তারপরে আমি যখন ট্যাবটিতে ক্লিক করি তখন এটি মূল শিটটিতে কাজ করে।

Application.CalculateFullRebuild 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.