চেক বক্স অবজেক্টের নাম দ্বারা ফাংশন তৈরি করুন ("গতিশীল")


1

আমার একটি শীটে একাধিক চেক বাক্স রয়েছে এবং অন্য একটি শীটে আমার একটি ফর্ম রয়েছে। যখন একটি চেক বাক্স নির্বাচন করা হয়, তারপরে উপযুক্ত সামগ্রীটি ফর্ম শীটে কলাম হিসাবে যুক্ত করা হবে।

আমার কাছে 500 টিরও বেশি চেক বাক্স রয়েছে এজন্য আমি এটি করার একটি সহজ উপায় তৈরি করতে চাই। উদাহরণস্বরূপ আমার কাছে নিম্নলিখিত চেক বাক্স রয়েছে:

  • PROJECT_ID
  • প্রকল্প শিরোনাম
  • প্রকল্পের ধরন
  • প্রোজেক্ট অবস্থা

এই চেক বাক্সগুলির অবজেক্টের নাম শুরু হয় CB_ তাই প্রজেক্ট টাইপ চেক বক্সের অবজেক্টের নাম CB_Project_Type

ক্লিক করার সাথে সাথে আমি এখন প্রতিটি চেক বাক্সের জন্য একটি ফাংশন তৈরি করেছি। উদাহরণস্বরূপ ফাংশনটির নাম হ'ল Sub CB_Project_Type_Click() ফাংশনটি সেই কলামটি বিদ্যমান কিনা তা ফর্ম শীটে যুক্ত করে কিনা তা যাচাই করবে।

সমস্ত চেক বাক্সের জন্য একটি ফাংশন তৈরি করা বোকামি হবে। আমি এটির জন্য একটি গতিশীল পদ্ধতি চাই। এর মতো কিছু: যদি "যদি কোনও" চেক বাক্সটি নির্বাচন করা থাকে তবে ফর্ম শিটের সাথে মিলে যাওয়া নামটি কলাম যুক্ত করতে সেই চেক বাক্সের অবজেক্ট নামটি ব্যবহার করুন।

আমি এখনই যা ব্যবহার করছি তা হ'ল:

Sub CB_Projects_Type_Click()
    CB_List "Projects_Type"
End Sub

Sub CB_List(Name As String)
    If ActiveSheet.Shapes("CB_" & Name).ControlFormat.Value = 1 Then
        For i = 0 To 99
            If IsEmpty(Sheets("English").Range("B1").Offset(0, i)) Then
                Sheets("English").Columns(i + 2).Copy
                Sheets("English").Columns(i + 3).Insert
                Sheets("English").Range("B1").Offset(0, i).Value = Name
                i = 99
            End If
        Next i
    Else
        For i = 0 To 99
            If Sheets("English").Range("B1").Offset(0, i).Value = Name Then
                Sheets("English").Columns(i + 2).Delete
                i = 99
            End If
        Next i
    End If
End Sub

সুতরাং আপনি দেখতে পারেন যে কমপক্ষে আমি চেক বাক্স থেকে কলামটি পেতে একটি একক ফাংশন ব্যবহার করছি, তবে এখনও আমার প্রতিটি চেক বাক্সের জন্য একটি সাব তৈরি করতে হবে। আমি কীভাবে 1 টি চূড়ান্ত ফাংশন ব্যবহার করব যা বস্তুর নাম থেকে ফাংশনটির নাম পাবে?

আমি আশা করি আমি পরিষ্কার ছিলাম।

উত্তর:


0

যাচাই করা আছে তা খুঁজতে আপনার চেকবক্সগুলিতে লুপ করুন।

For Each c in ActiveSheet.CheckBoxes
    If c.Value Then CB_List(c.Name)
Next c

সম্পাদনা: আমি আপনার কোডটি পুনরায় পড়ি এবং আমি বুঝতে পারি যে আপনার সমস্যাটি প্রাথমিকভাবে যা ভাবা হয়েছিল তার চেয়ে একটু জটিল। আপনার প্রয়োজনীয় ডেটা যুক্ত করতে এবং আপনার প্রয়োজন হয় না এমন ডেটা মুছে ফেলার জন্য আমার মনে হয় আপনার প্রতিবার আপনার সমস্ত চেকবক্সগুলি লুপ করা দরকার। আপনি ক্লিক করতে পারেন এমন একটি বোতাম তৈরি করতে পারেন এবং এরকম কিছু করতে পারেন:

Sub Button1_click()
    Dim c as Checkbox
    For Each c in ActiveSheet.CheckBoxes
        CB_List(c.Name)
    Next c
End Sub

অথবা আপনার করতে হতে পারে:

Sub Button1_click()
    Dim c as OLEObject
    For Each c in ActiveSheet.OLEObjects
        CB_List(c.Name)
    Next c
End Sub

এবং এই লাইনটি পরিবর্তন করুন:

ActiveSheet.Shapes("CB_" & Name).ControlFormat.Value = 1

এটি:

ActiveSheet.Shapes(Name).ControlFormat.Value = 1

কাইল, এটি বলেছে আপনার মন্তব্যে মন্তব্য করার জন্য আমার 50 টি খ্যাতি দরকার তাই আমি কীভাবে সঠিকভাবে জবাব দিতে পারি তা সত্যিই আমি জানি না ... আপনি যা লিখেছিলেন তা চেষ্টা করেছিলাম তবে আমি এই ত্রুটিটি পেয়েছি: "ত্রুটি সংকলন: অবৈধ বাইরের পদ্ধতি" তারপরে আমি চেষ্টা করেছি
সিটিকে

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