Excel VBA menghitung ulang pada semua lembar kerja saat terbuka dan tab berubah

0

Saya memiliki 13 lembar kerja dengan 12 lembar untuk setiap bulan. Ada sel di masing-masing 12 lembar dengan nama bulan.

Saya telah mendapatkan skrip VBA untuk menguji apakah bulan saat ini cocok dengan sel dan untuk mengubah warna tab yang sesuai, tetapi membutuhkan perhitungan di lembar untuk memperbarui.

Private Sub Worksheet_Change(ByVal Target As Range)
If Format(Date, "MMMM") = Range("E3").Value Then
    Me.Tab.ColorIndex = 10
Else
    Me.Tab.ColorIndex = xlColorIndexNone
End If
End Sub

Jika saya berhenti memperbarui lembar bulan lalu dan pindah ke lembar berikutnya, kedua tab akan disorot karena lembar sebelumnya tidak diperbarui. Saya hanya ingin lembar kerja bulan ini disorot.

Apakah ada cara untuk menghitung ulang semua lembar pada buku kerja terbuka dan perubahan tab?

gavsiu
sumber

Jawaban:

0

Dalam ThisWorkbookmodul cukup masukkan

Option Explicit

Private Sub Workbook_Open()
    Dim mySheet As Worksheet
    For Each mySheet In ThisWorkbook.Sheets
        If mySheet.Cells(3, 5).Value = Format(Date, "MMMM") Then
            mySheet.Tab.ColorIndex = 10
        Else: mySheet.Tab.ColorIndex = xlColorIndexNone
        End If
    Next
End Sub

Sekarang tidak perlu menghitung apa pun dan hanya akan memeriksa semua lembar setiap kali dibuka.

Raystafarian
sumber
0

Iya. Di VB Editor, masuk ke objek ThisWorkbook. Di bagian atas jendela kode, Anda akan melihat kotak dropdown yang bertuliskan "(Umum)" atau "Buku Kerja". Jika tertulis "(Umum)", buka dropdown dan pilih "Buku Kerja". Ini mungkin memasukkan sub baru untuk Anda segera; jika ya, hapus saja itu.

Sekarang, di kanan atas, Anda memiliki dropdown lain yang mungkin mengatakan "Buka". Gunakan dropdown untuk memilih "Buka", lalu pilih lagi "Pilih Aktifkan". Ini harus memasukkan dua subrutin baru ke jendela kode Anda - Workbook_Opendan Sheet_Activate. Perhatikan bahwa Anda ingin membuat ini dengan menggunakan dropdown, tidak hanya dengan mengetikkan nama - mereka mungkin tidak berfungsi dengan baik jika Anda cukup mengetiknya.

Anda sekarang dapat memasukkan kode apa pun yang Anda inginkan ke dalam subs ini, dan kode tersebut akan mengeksekusi ketika mendeteksi acara yang dimaksud (yaitu membuka buku kerja atau memilih lembar kerja apa pun). Struktur persis yang Anda minta akan terlihat seperti ini:

Private Sub Workbook_Open()
    Application.Calculate
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Application.Calculate
End Sub

Saya tidak mengatakan itu cara paling efisien untuk melakukan ini, tetapi itu harus menjawab pertanyaan Anda.

Werrf
sumber
Apa cara paling efisien? Saya tidak keberatan membaca jika Anda hanya ingin menautkannya.
gavsiu
Juga sepertinya tidak menyelesaikan masalah saya. Saya masih harus mengedit sel di lembar agar tab warna dapat berubah.
gavsiu