Saya punya lembar dengan Data. Saya ingin menghitung perbedaan antara tanggal sekarang dan tanggal yang ada di sel C3:C10. Dan hasilnya disimpan di sel D3:D10.

Bagian itu saya dapatkan sejauh ini.

Tetapi jika seseorang memanipulasi nilai dalam sel hasil maka VBA harus menghitung ulang sel tersebut dan memperbaiki hasilnya.

Private Sub Worksheet_Change(ByVal Target As Range)
    For Zeile = 3 To 10
        Sheets("Tabelle2").Cells(Zeile, "D") = WorksheetFunction.YearFrac(Sheets("Tabelle2").Cells(Zeile, "C"), Date)
        If Sheets("Tabelle2").Cells(Zeile, "C") = 0 Then
           Sheets("Tabelle2").Cells(Zeile, "D") = ""
        End If
    Next Zeile
End Sub
0
Credo_Moi 28 Mei 2021, 20:44

1 menjawab

Jawaban Terbaik

Hal pertama yang harus dilakukan adalah memeriksa apakah perubahan telah dibuat di C3:C10, Anda dapat menggunakan Intersect untuk itu.

Maka Anda harus menonaktifkan acara untuk menghentikan pemicu kode itu sendiri, gunakan Application.EnableEvents = False untuk itu.

Loop berikutnya melalui Target jika lebih dari satu sel telah diubah dan lakukan tindakan/perhitungan yang diperlukan.

Terakhir, aktifkan kembali acara menggunakan Application.EnableEvents = True

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Dim cell As Range
Dim Zeile As Long

    Set rng = Intersect(Target, Range("C3:C10"))

    If Not rng Is Nothing Then

        Application.EnableEvents = False

        For Each cell In rng.Cells
            Zeile = cell.Row
            If Cells(Zeile, "C") <> 0 Then
                Cells(Zeile, "D") = Application.YearFrac(Cells(Zeile, "C").Value, Date)
            Else
                Cells(Zeile, "D") = ""
            End If

        Next cell
        
        Application.EnableEvents = True

    End If
    
End Sub

Jika Anda ingin kode dipicu jika nilai diubah dalam C3:C10 atau D3:D10 ubah ini,

Set rng = Intersect(Target, Range("C3:C10"))

Untuk ini.

Set rng = Intersect(Target, Range("C3:D10"))

Anda juga dapat mengubah alamat jangkauan di sana jika Anda ingin baris selanjutnya dengan mengubah 10.

1
norie 28 Mei 2021, 19:11