Onay kutusu nesne adına göre işlev yarat (“Dinamik olarak”)


1

Bir sayfada birden fazla onay kutum var ve başka bir sayfada da formum var. Bir onay kutusu seçildiğinde, uygun içerik form sayfasında bir sütun olarak eklenir.

500'den fazla onay kutum var, bu yüzden bunu yapmanın kolay bir yolunu oluşturmak istiyorum. Örneğin, aşağıdaki onay kutularına sahibim:

  • PROJECT_ID
  • Proje Başlığı
  • Proje tipi
  • Proje durumu

Bu onay kutularının CB_ nesne adı, Project_Type nesnesinin adı onay kutusuyla başlar CB_Project_Type.

Şimdi tıklandığında her onay kutusu için bir işlev yarattım. Örneğin, işlev ismi şudur: Sub CB_Project_Type_Click() İşlev, bu sütunun var olup olmadığını kontrol eder ve onu form sayfasına ekler.

Tüm onay kutuları için bir işlev oluşturmak aptalca olacaktır. Bunun için dinamik bir yöntem istiyorum. Bunun gibi bir şey: "HERHANGİ BİR" onay kutusu seçildiyse, form sayfasına eşleşen bir adı olan sütunu eklemek için bu onay kutusu nesne adını kullanın.

Şu an kullandığım şey şudur:

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

Öyleyse, en azından onay kutusundan bu sütunu almak için tek bir işlev kullandığımı görebilirsiniz, ancak yine de her onay kutusu için bir Sub oluşturmanız gerekir. İşlev ismini nesne isminden alacak bir nihai işlevi nasıl kullanabilirim?

Umarım temizimdir.

Yanıtlar:


0

İşaretli olanları bulmak için onay kutularında dolaşın.

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

Düzenleme: Kodunuzu okudum ve sorunun başlangıçta düşündüğümden biraz daha karmaşık olduğunu anladım. İhtiyacınız olan verileri eklemek ve ihtiyacınız olmayan verileri silmek için, her seferinde tüm onay kutularını dolaşmanız gerektiğini düşünüyorum. Kullanıcının tıkladığı ve böyle bir şey yaptığı bir düğme yapabilirsiniz:

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

Veya yapmanız gerekebilir:

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

Ve bu çizgiyi değiştirin:

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

buna:

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

Kyle, Yorumunuzu yorumlamak için 50 itibara ihtiyacım olduğunu söylüyor, bu yüzden doğru şekilde nasıl cevap vereceğimi bilmiyorum ... Yazdıklarını denedim ama bu hatayı alıyorum: "Derleme hatası: Geçersiz dış prosedür" Sonra denedim c'yi bir onay kutusu olarak tanımlayın, ancak bu yardımcı olmadı ...
SedoSan

@SedoSan düzenlemeye bakın. Bu hata basitçe, kodu bir Alt veya İşlevin içine koymanız gerektiği anlamına gelir.
Kyle
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.