Berikut adalah contoh proyek saya di gambar ini
Saya suka mengoleksi, jadi saya membuat lembar inventaris di Excel.
Saya ingin membuat cara saya bisa mengklik tombol dan itu mempengaruhi sel berikutnya, atau sebelumnya
Sebagai contoh:
Sel C3 akan memiliki Addtombol, Sel D3 akan memiliki jumlah salinan yang saya miliki tentang item itu, dan Sel E3 akan memiliki Subtracttombol. Dengan mengklik tombol di C3, itu akan menambahkan satu lagi ke nomor di Sel D3. Jika Anda mengklik tombol di C1, itu akan mengurangi dari Sel D3. Tampaknya cukup lurus ke depan.
Berikut ini kondisinya:
Saya memiliki sekitar 200 item per lembar seperti 20 lembar (tidak ada dalam contoh). Saya ingin beberapa cara agar saya dapat menambahkan makro ke semua tombol tanpa harus membuat makro khusus baru untuk setiap tombol. Saya juga tidak ingin itu bekerja dengan sel yang dipilih. Itu perlu mempengaruhi sel ke kanan untuk tombol add dan sel ke kiri untuk tombol kurangi.
Saya mencari jawaban di mana-mana, dan saya mendekati solusi.
Ini adalah hal yang paling dekat yang bisa saya temukan tetapi bukan itu yang saya cari.
Sub AddOne()
ActiveCell.Value = ActiveCell.Value + 1
End Sub
Sub SubtractOne()
ActiveCell.Value = ActiveCell.Value - 1
End Sub
Saya harap ini masuk akal dan terima kasih atas waktu Anda.
I have like 200 items per sheet on like 20 sheets
- jadi, berapa banyak item yang Anda miliki pada berapa banyak lembar? Secara umum, pertanyaan pertama yang bagus, +1Jawaban:
Alasan bahwa solusi Anda tidak berfungsi adalah karena nilai lembar kerja
ActiveCell
tidak berubah ketika pengguna mengklik tombol - mereka mengklik tombol, bukan sel.Ada beberapa cara untuk mengatasi ini. Entah Anda dapat membuat banyak tombol dan memiliki satu sub generik untuk melakukan pekerjaan, atau Anda dapat menjebak acara perubahan sel dan menanggapinya. Yang pertama akan menjadi pengalaman pengguna yang jauh lebih baik tetapi lebih banyak pekerjaan untuk diatur pada awalnya.
Metode 1: Tombol
Metode ini menggunakan nama tombol untuk melakukan tindakan yang sesuai, pada sel yang sesuai. Sebagai gambaran umum, buat semua tombol Anda, dan mintalah masing-masing memanggil sub VBA generik yang sama, yang pada gilirannya akan mencari tahu tombol mana yang memanggilnya, dan melakukan operasi yang sesuai.
Mari kita asumsikan Anda akan memanggil hal-hal seperti tombol Anda
ADD_D3
danSUB_D3
, misalnya untuk menambah / mengurangi nilai dalam D3.Pertama, buat subrutin untuk melakukan pekerjaan di VBA:
Hancurkan:
Selanjutnya, buat tombol Anda; tambahkan tombol Kontrol Formulir ke spreadsheet Anda untuk masing-masing +dan -tombol yang Anda butuhkan.
Untuk masing-masing, berikan nama sistematis berdasarkan sel yang harus ditargetkan, seperti dijelaskan di atas. Misalnya dalam tangkapan layar Anda di atas, Anda dapat memberi nama dua tombol pertama
ADD_D3
danSUB_D3
.Untuk mengganti nama tombol, klik kanan untuk memilihnya, lalu di kotak alamat di kiri atas lembar kerja timpa nama (mis. Tombol 1) dengan nama baru Anda:
Akhirnya, hal di atas juga bisa digunakan untuk beberapa sheet, karena sub digunakan
ActiveSheet
untuk mengakses sel.Metode 2: Ubah Seleksi
Ini jauh lebih mudah untuk diatur, tetapi agak sedikit meretas. Pertama-tama, atur lembar Anda dengan simbol plus dan minus di setiap sel, warnai sesuka Anda ingin membuatnya tampak seperti tombol. Sebagai contoh:
Perhatikan bahwa Anda harus menggunakan kutipan tunggal (') untuk meletakkan simbol ke dalam sel sebagai teks, misalnya
'-
dan'+
(ini terlihat di bilah rumus di bagian atas contoh).Lalu, buat satu rutinitas untuk merespons salah satu sel yang dipilih:
Hancurkan:
Target
parameter sel yang diklik oleh pengguna ,, tetapi bisa menjadi drag-pilihan juga. Kami pertama-tama memeriksa bahwa ukurannya tepat 1, dan keluar jika tidak.+
atau-
nilainya. Perhatikan bahwa kita tidak perlu memeriksa tanda kutip.Offset
perintah untuk menemukan sel ke kiri atau kanan, tergantung pada apakah kita berurusan dengan sel awal+
atau-
memulaiAlasan kami memilih sel nomor adalah bahwa ia bergerak pemilihan off the
+
atau-
sel, sehingga Anda dapat klik lagi. Jika Anda ingin mengerjakan sel-sel itu, Anda perlu menonaktifkan sub ini sementara, misalnya dengan meletakkanExit Sub
garis di bagian atas.Catatan kecil:
Worksheet_SelectionChange
adalah apa yang akan Anda gunakan jika Anda bekerja di makro lembar:Jika Anda bekerja di
ThisWorkbook
modul, Anda akan ingin menggunakan sub perubahan pemilihan global:Kode yang sama harus berfungsi - dan dalam hal ini akan bekerja pada setiap lembar di buku kerja Anda.
Contoh spreadsheet menunjukkan kedua contoh di sini .
sumber
Worksheet_SelectionChange
), yang menyebabkan sub untuk memecat setiap kali setiap sel diklik. Kapal selam itu hanya mengabaikan sel-selnya yang tidak tertarik.ThisWorkbook
, dalam hal ini yang Anda gunakanWorkbook_SheetSelectionChange
. Ini memberi Anda penanganan klik global.