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
dan SUB_D3
, misalnya untuk menambah / mengurangi nilai dalam D3.
Pertama, buat subrutin untuk melakukan pekerjaan di VBA:
Sub AdjustValue()
Dim btnName As String
Dim targetCell As String
Dim addAmount As Integer
btnName = Application.Caller
targetCell = Mid(btnName, 5, Len(btnName))
addAmount = IIf(Left(btnName, 3) = "ADD", 1, -1)
ActiveSheet.Range(targetCell).Value = _
ActiveSheet.Range(targetCell).Value + addAmount
End Sub
Hancurkan:
- Application.Caller memberi Anda nama pemanggil, dalam hal ini nama tombol
- Kami mengambil nama sel target dari akhir, dengan melewatkan empat karakter pertama
- Kami mencari tahu apakah kami menambah atau mengurangi berdasarkan tiga karakter pertama
- Kami menggunakan nama sel target untuk memperbarui sel lembar kerja
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
dan SUB_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:
Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim numCell As Range
If Target.Count <> 1 Then Exit Sub
If Target.Value = "+" Then
Set numCell = Target.Offset(0, -1)
numCell.Select
numCell.Value = numCell.Value + 1
ElseIf Target.Value = "-" Then
Set numCell = Target.Offset(0, 1)
numCell.Select
numCell.Value = numCell.Value - 1
End If
End Sub
Hancurkan:
- Nama sub itu penting - ia memberi tahu Excel untuk menjalankan sub Anda setiap kali pengguna mengklik sel apa pun
- The
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.
- Selanjutnya kita periksa nilainya untuk a
+
atau -
nilainya. Perhatikan bahwa kita tidak perlu memeriksa tanda kutip.
- Kami kemudian menggunakan
Offset
perintah untuk menemukan sel ke kiri atau kanan, tergantung pada apakah kita berurusan dengan sel awal +
atau -
memulai
- Setelah kami memiliki nomor sel, kami memilihnya terlebih dahulu, lalu mengubah nilainya naik atau turun
Alasan 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 meletakkan Exit 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:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'Code goes in here
End Sub
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 .