kzen.dev
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 mikebarrera
mikebarrera
Question

Klik kotak centang Excel VBA dan ubah acara yang sama?

Saya memiliki 5 kotak centang untuk mengatur beberapa opsi untuk makro, salah satunya adalah kotak centang Pilih/Batalkan Semua. Saya ingin membuat sesuatu yang mirip dengan apa yang ada di kotak surat berbasis web ketika Anda memilih email untuk dihapus atau ditandai sebagai sudah dibaca, dll. Ketika saya mencentang kotak centang Pilih/Batalkan Semua, saya mengubah nilai kotak centang lainnya menjadi benar dan sebaliknya ketika saya menghapus centangnya. Tidak apa-apa.

Masalahnya muncul ketika saya juga ingin memvalidasi bahwa jika semuanya tidak dicentang dan satu per satu saya mencentang kotak centang lainnya, jika pada akhirnya saya mencentang semua, maka kotak centang Select/Unselect All berubah menjadi centang. Begitu juga sebaliknya, artinya jika semuanya dicentang dan kemudian saya hapus centang salah satu dari empat yang lain, maka kotak centang "Semua" saya ubah menjadi false (tidak dicentang).

Tetapi tampaknya bahkan ketika saya hanya menetapkan nilai, misalnya Option1Checkbox.value = True, dalam event SelectAllCheckbox_Click, ini memicu event Option1Checkbox_Click dan Option1Checkbox_Change.

Bukankah seharusnya itu hanya memicu event Change karena saya tidak benar-benar mengklik kotak centang itu?

Yang terjadi adalah saya mencentang SelectAll, sehingga mengubah Option1 menjadi dicentang, tetapi dengan melakukan ini, Option1 juga memicu peristiwa klik sehingga menghapus centang yang memicu peristiwa klik lagi dan kemudian menghapus centang lagi pada kotak centang Semua yang pada akhirnya membuat semuanya tidak dicentang, seperti di awal. Semoga bagian ini cukup jelas.

Bagaimana saya bisa menghindari perilaku ini? Bagaimana cara memastikan hanya event Change yang dipicu dan bukan event Click?

Adakah yang pernah memiliki pengaturan kotak centang seperti itu dan mengalami masalah serupa? Atau bagaimana Anda bisa melakukan hal ini tanpa perilaku yang saya alami?

Kotak centang tidak berada pada formulir tetapi hanya pada lembar kerja. Mereka adalah kontrol ActiveX. Dan apa yang saya miliki tidak rumit:

Private Sub SelectAll_Click()
    Option1Checkbox.Value = SelectAll.Value
    Option2Checkbox.Value = SelectAll.Value
    Option3Checkbox.Value = SelectAll.Value
    Option4Checkbox.Value = SelectAll.Value
End Sub

Kemudian kotak centang opsi klik acara terlihat seperti ini:

Private Sub Option1Checkbox_Click()
    If Option1Checkbox.Value = True And Option2Checkbox.Value = True And Option3Checkbox.Value = True And Option4Checkbox.Value = True Then
        SelectAll.Value = True
    Else
        SelectAll.Value = False
    End If
End Sub

Ini cukup sederhana, masalah terbesar yang saya lihat adalah pemanggilan ke peristiwa klik ketika kotak centang tidak benar-benar diklik.

Terima kasih atas bantuan Anda.

4 2013-08-08T11:28:26+00:00 3
Pemrograman
vba
excel
events
click
checkbox
Pertanyaan ini memiliki :value jawaban dalam bahasa Inggris, untuk membacanya masuk ke akun Anda.
 SeanC
SeanC
8 Agustus 2013 в 5:37
2013-08-08T17:37:24+00:00
Lebih
Sumber
Sunting
#21411332

Saya akan mendefinisikan variabel lokal (yang didefinisikan di luar sub) dan mengatur/memeriksa bahwa

Option Explicit
Dim ImChangingStuff As Boolean

Private Sub SelectAll_Click()
    ImChangingStuff = True
    Option1Checkbox.Value = SelectAll.Value
    Option2Checkbox.Value = SelectAll.Value
    Option3Checkbox.Value = SelectAll.Value
    Option4Checkbox.Value = SelectAll.Value
    ImChangingStuff = False
End Sub

maka rutinitas klik Anda akan terlihat seperti ini:

Private Sub Option1Checkbox_Click()
    If ImChangingStuff Then Exit Sub
    If Option1Checkbox.Value = True And Option2Checkbox.Value = True And Option3Checkbox.Value = True And Option4Checkbox.Value = True Then
        SelectAll.Value = True
    Else
        SelectAll.Value = False
    End If
End Sub
2
0
Kecerdasan buatan untuk mengurai produk dari halaman mana pun
productapi.dev
 user5910731
user5910731
10 Februari 2016 в 9:37
2016-02-10T21:37:31+00:00
Lebih
Sumber
Sunting
#21411333

Untuk mengatasi masalah ini,

  1. Di formulir pengguna utama Anda (dalam contoh ini disebut Mainform) tambahkan kode ini:

    Private Sub Mainform_Inisialisasi() stateCheckbox = True End Sub

  2. Buat sebuah modul untuk menyimpan variabel global Anda (mis. globalVariables), dan tambahkan yang berikut ini, yang akan menyimpan status kotak centang:

    Public stateCheckbox sebagai Boolean

  3. Pada event _click pada kotak centang Anda, bungkus kode Anda seperti ini:

    if stateCheckbox = false then { apa pun kode Anda } Jika tidak: stateCheckbox = false end if

Elbert Villarreal
Elbert Villarreal
Jawaban edit 10 Februari 2016 в 10:14
1
0
Kecerdasan buatan untuk mengurai produk dari halaman mana pun
productapi.dev
 RestitutorOrbis
RestitutorOrbis
8 Agustus 2013 в 12:01
2013-08-08T12:01:08+00:00
Lebih
Sumber
Sunting
#21411331

Saya akan menulis sub pengecekan jika Option1 hingga Option4 semuanya dicentang dalam pernyataan If. Dalam pernyataan if kedua, saya akan memeriksa apakah semuanya salah:

Sub Are_O1_to_O4_All_Checked ()
  If Option1Checkbox.Value = True And _ 
     Option2Checkbox.Value = True And _
     Option3Checkbox.Value = True And _
     Option4Checkbox.Value = True Then
        Option5Checkbox.Value  = True      ' select/unselect checkbox
  End If

  If Option1Checkbox.Value = False And _ 
     Option2Checkbox.Value = False And _
     Option3Checkbox.Value = False And _
     Option4Checkbox.Value =  False Then
        Option5Checkbox.Value  = False      ' select/unselect checkbox
  End If

Akhir Sub

Kemudian saya akan memanggil sub ini di akhir setiap event OnClick untuk kotak centang.

0
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Анна Литвиненко
Terdaftar 2 hari yang lalu
2
Inessa bu
Terdaftar 1 bulan yang lalu
3
Denis Babushkin
Terdaftar 1 bulan yang lalu
4
asakuno asakuno
Terdaftar 1 bulan yang lalu
5
aldo salerno
Terdaftar 2 bulan yang lalu
Kecerdasan buatan untuk mengurai produk dari halaman mana pun
productapi.dev
ID
JA
© kzen.dev 2023
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi