Saya secara dinamis membuat tombol opsi pada formulir di Microsoft Word. Saya secara terprogram menetapkan tombol opsi baru sebagai sub melalui kode di bawah ini, tetapi saya tidak dapat menemukan cara menetapkan satu kelas ke banyak tombol. Apakah ini mungkin?

Kode di bawah ini berfungsi, tetapi hanya memunculkan kotak pesan pada tombol terakhir. Saya pikir apa yang dilakukan kode saya adalah menugaskan kembali kelas ini ke tombol terbaru setiap kali, daripada menambahkan tombol ke kelas itu jika itu masuk akal? Bagaimana cara saya melakukannya sebaliknya begitu banyak tombol yang memanggil acara Focus_btn_Click?

Kelas Saya (disebut "clsSectorbtn"):

Public WithEvents Focus_btn As MSForms.OptionButton
Sub Focus_btn_Click()
    Msgbox "Test"
End Sub

Kode dalam formulir saya:

Dim SectorBtn As New clsSectorBtn    
Sub Create_Radios(Radio_Array)
    Dim RadioArray (0 to 2) As String
    RadioArray(0) = "optionbutton1"
    RadioArray(1) = "optionbutton2"
    RadioArray(2) = "optionbutton3"
    Set Fm = UserForm1("Frame1")

    For x = 0 To UBound(Radio_Array)
        Set opt = Fm.Object.Controls.Add("Forms.OptionButton.1")
        opt.Caption = Radio_Array(x)
        Set SectorBtn.Focus_btn = opt
    Next x
End Sub
0
stephen.webb 6 Agustus 2019, 21:02

1 menjawab

Jawaban Terbaik

Anda memerlukan koleksi global untuk menampung instance clsSectorbtn, dan lebih mudah menggunakan fungsi "pabrik" untuk membangun setiap instance.

Saya akan melakukan sesuatu seperti ini:

Dim colBtn As Collection    

Sub Create_Radios(Radio_Array)
    Dim RadioArray (0 to 2) As String
    RadioArray(0) = "optionbutton1"
    RadioArray(1) = "optionbutton2"
    RadioArray(2) = "optionbutton3"
    Set Fm = UserForm1("Frame1")

    Set colBtn = New collection
    For x = 0 To UBound(Radio_Array)
        Set opt = Fm.Object.Controls.Add("Forms.OptionButton.1")
        opt.Caption = Radio_Array(x)
        colBtn.Add OptObject(opt)
    Next x
End Sub

'create an instance of clsSectorbtn and assign an option button to it
Function OptObject(opt) As clsSectorbtn
    Dim rv as New clsSectorbtn
    Set rv.Focus_btn = opt
    Set OptObject = rv
End Function
1
Tim Williams 6 Agustus 2019, 19:00