Saya memiliki UserForm yang menampilkan konten teks dari berbagai sel dalam lembar kerja aktif dan memiliki TextBox untuk memungkinkan pengguna memasukkan informasi baru.

UF diperbarui secara otomatis setiap kali pengguna memilih sel/rentang baru melalui acara Workbook_SheetSelectionChange.

Di akhir prosedur Pembaruan UF (sub publik dalam modul kode UF) saya menggunakan TextBoxName.SetFocus (bersama dengan .SelStart = .TextLenght) untuk mengatur fokus pada kotak teks, siap bagi pengguna untuk mulai mengetik.

Sekarang prosedur pembaruan ini juga berjalan ketika UF diaktifkan melalui acara UserForm_Activate.

Inilah masalah saya

Ketika UF diaktifkan, fokus berhasil diatur pada TextBox , dengan kursor terlihat di akhir teks, dan apa pun yang saya ketik dimasukkan ke dalam TextBox seperti yang diharapkan.

TETAPI, jika saya mengklik sel baru, yang menjalankan prosedur pembaruan yang sama kecuali dari acara Workbook_SheetSelectionChange, sesuatu yang aneh terjadi. Fokusnya secara teknis ada di TextBox, tapi kursornya tidak terlihat. Spasi, Enter, dan Backspace semuanya berfungsi seperti yang diharapkan, namun tombol huruf dan angka tidak. Yaitu. Saya dapat menghapus teks atau mengetuk enter untuk menambahkan baris baru, tetapi jika saya mengetuk tombol angka/huruf lainnya, tidak ada yang terjadi, sampai saya menggunakan mouse untuk mengklik Kotak Teks lagi.

Saya telah mencoba memindahkan prosedur dari modul UF, menggunakan .SetFocus di tempat yang berbeda, termasuk setelah Workbook_SheetSelectionChange memanggil prosedur pembaruan, tetapi tidak ada yang berhasil.

Apa lagi yang bisa saya coba?

Terima kasih sebelumnya!

1
Vincent Courtemanche 5 Maret 2019, 23:32

1 menjawab

Jawaban Terbaik

Membuat kotak teks kooperatif lagi

Beberapa proses (jendela) dapat menghalangi .SetFocus untuk menampilkan efek penuh, seperti jendela MsgBox yang ditampilkan selama validasi kotak teks atau bahkan menyelesaikan prosedur pembaruan yang dimunculkan oleh peristiwa Workbook_SelectionChange saat mengklik sel lembar kerja seperti dalam kasus Anda. Meskipun Anda secara eksplisit menetapkan fokus atau lebih tepatnya karena kontrol secara internal tidak kehilangan fokus (menyelesaikan), jadi fokus kontrol tidak akan/tidak dapat diatur ulang karena Userform "sudah" memilikinya.

Untuk mengatasi situasi yang tidak memuaskan Anda bisa

  1. alihkan dan alihkan properti .Enabled atau sebagai alternatif
  2. secara eksplisit kehilangan fokus melalui kontrol lain yang menerima fokus (termasuk juga tombol perintah atau bingkai) dan menyetel ulang fokus lagi.

Tautan terkait

Untuk mendapatkan lebih banyak wawasan, saya sarankan untuk melihat penjelasan yang diberikan di Pesan validasi entri kotak teks pada bentuk pengguna tanpa mode mengganggu pemilihan teks

Terima kasih CommonSense

1
T.M. 6 Maret 2019, 18:46