Tambahkan / Kurangi tombol Excel VBA

4

Berikut adalah contoh proyek saya di gambar ini

masukkan deskripsi gambar di sini

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.

Corkrum
sumber
Jadi apa yang kamu mau? Sesuatu yang menunjukkan dengan tepat setiap sel atau sesuatu yang bekerja dengan sel yang aktif?
Raystafarian
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, +1
Dave
Pada dasarnya Raystafarian I diberi dua opsi itu. Keduanya bukan yang saya cari. Saya ingin Kode VBA generik untuk membuat tombol yang akan menambah dan mengurangi dari sel tengah. Saya tahu ada kode VBA yang akan menambah / mengurangi dari Sel Spesifik. Saya akan menambahkan gambar mungkin itu akan membantu. Maaf saya baru di situs ini, dan semi-baru di Excel.
Corkrum

Jawaban:

4

Alasan bahwa solusi Anda tidak berfungsi adalah karena nilai lembar kerja ActiveCelltidak 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_D3dan 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:

  1. Application.Caller memberi Anda nama pemanggil, dalam hal ini nama tombol
  2. Kami mengambil nama sel target dari akhir, dengan melewatkan empat karakter pertama
  3. Kami mencari tahu apakah kami menambah atau mengurangi berdasarkan tiga karakter pertama
  4. 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_D3dan 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:
masukkan deskripsi gambar di sini

Akhirnya, hal di atas juga bisa digunakan untuk beberapa sheet, karena sub digunakan ActiveSheetuntuk 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: masukkan deskripsi gambar di sini

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:

  1. Nama sub itu penting - ia memberi tahu Excel untuk menjalankan sub Anda setiap kali pengguna mengklik sel apa pun
  2. The Targetparameter sel yang diklik oleh pengguna ,, tetapi bisa menjadi drag-pilihan juga. Kami pertama-tama memeriksa bahwa ukurannya tepat 1, dan keluar jika tidak.
  3. Selanjutnya kita periksa nilainya untuk a +atau -nilainya. Perhatikan bahwa kita tidak perlu memeriksa tanda kutip.
  4. Kami kemudian menggunakan Offsetperintah untuk menemukan sel ke kiri atau kanan, tergantung pada apakah kita berurusan dengan sel awal +atau -memulai
  5. 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 Subgaris di bagian atas.

Catatan kecil: Worksheet_SelectionChangeadalah apa yang akan Anda gunakan jika Anda bekerja di makro lembar: masukkan deskripsi gambar di sini

Jika Anda bekerja di ThisWorkbookmodul, 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 .

Geoff
sumber
Tidak masalah - apakah itu menyelesaikan masalah?
Geoff
Belum, saya masih mencoba mencari tahu. Saya mengikuti keduanya dari atas instruksi turun. Semuanya terlihat sama tetapi yang pertama menjalankan kesalahan, dan yang lainnya saya tidak yakin bagaimana membuat sel bisa diklik. Jadi saya beruntung di kedua lol.
Corkrum
Dengan yang kedua, Anda tidak perlu membuat sel bisa diklik sama sekali; keajaiban dalam nama sub ( Worksheet_SelectionChange), yang menyebabkan sub untuk memecat setiap kali setiap sel diklik. Kapal selam itu hanya mengabaikan sel-selnya yang tidak tertarik.
Geoff
Ini jelas merupakan solusi yang akan saya gunakan (perubahan pilihan "hacky"). Ini berarti Anda dapat menempatkan nama yang dapat dikoleksi, plus dan minus di mana pun Anda inginkan dan itu akan berhasil. Dan Anda tidak perlu dipusingkan dengan kontrol formulir.
Jonny Wright
Lihat hasil edit kecil saya - Anda mungkin ingin memasukkan kode Anda ThisWorkbook, dalam hal ini yang Anda gunakan Workbook_SheetSelectionChange. Ini memberi Anda penanganan klik global.
Geoff