• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Excel Log Tutma

Katılım
8 Eylül 2008
Mesajlar
950
Excel Vers. ve Dili
2016 İngilizce
Merhabalar

Elimde aşağıdaki gibi bir kod düzeneği mevcuttur. Excel dosyamda birden fazla sheet var ve Log adında bir sheet mevcut. diğer sheetlerde herhangi bir hücrede bir değişiklik yaptığım zaman log sayfasında aşağıdaki veriler işleniyor.

Sorum şu: E sütununa gelmesi gereken değişiklik yapmadan önceki eski veri gelmiyor. bunun gelmesini istiyorum. Bilgi ve yardımlarınızı rica ederim


A sütununda değişiklik tarihi,
B sütununda değişiklik saati
C sütununda değişiklik yaptığım hücrenin hangi sheette olduğuna dair o sheetin adı yansımakta
D sütununda değişiklik yapılmış hücrenin adresi
E sütununda aslında değişiklik yapılmış hücredeki eski değerin gelmesi gerekiyor. ama bu eski değer yansımıyor.
F sütununa değişiklik yaptığım hücrenin yeni değeri neyse o geliyor. yani ne yazmışsan o hücreye o veriyi getiriyor
G sütununda ise PC yi açan kişinin username bilgisi geliyor


Bu kod Log sayfasına ait kod bölümüne yazılan kod
Kod:
Public eski_deger$

bu kod ise ThisWorkbook kod alanına yazılan kod
Kod:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Text <> eski_deger And Sh.Name <> "log" Then
        With ThisWorkbook.Sheets("log")
            satir = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            .Cells(satir, 1) = Format(Now, "dd.mm.yyyy")
            .Cells(satir, 2) = Format(Now, "hh:mm")
            .Cells(satir, 3) = Sh.Name
            .Hyperlinks.Add .Cells(satir, 3), "", "=" & .Cells(satir, 3) & "!" & Target.Address(0, 0)
            .Cells(satir, 4) = Target.Address(0, 0)
            .Hyperlinks.Add .Cells(satir, 4), "", "=" & .Cells(satir, 3) & "!" & .Cells(satir, 4)
            .Cells(satir, 5) = eski_deger
            .Cells(satir, 6) = Target.Text
            .Cells(satir, 7) = Environ("UserName")
        End With
    End If
End Sub
 
Log Sayfasındaki kodu da ThisWorkbook kod alanına yazın.
 
onuda denedim. hatta başka modüle altınada yazdım. log sayfasından kaldırdım. ama yine de o hücredeki eski değerin karşılığını getirmedi. :(
 
aşağıdaki kod herhalde işinizi görür.
Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
eski_değer = target
End Sub
yanlış düzeltmeyi sildim. yukardaki kod yetiyor.
 
Son düzenleme:
dediğiniz kod düzeneklerini hangisini nereye yazacağım. benim kod düzeneğimde olacak değişiklik ne olacak tam anlayamadım. aşağıdaki şekilde düzenledim fakat bu sefer log sheetine hiç bir değişiklik yansımıyor.

Bu kodu log sayfası kod düzeneğine yazdım
Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
eski_değer = target
End Sub


bu kod ise thisworkbook kod düzeneğinde yazdım
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Text <> eski_deger And Sh.Name <> "log" Then
        With ThisWorkbook.Sheets("log")
            satir = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            .Cells(satir, 1) = Format(Now, "dd.mm.yyyy")
            .Cells(satir, 2) = Format(Now, "hh:mm")
            .Cells(satir, 3) = Sh.Name
            .Hyperlinks.Add .Cells(satir, 3), "", "=" & .Cells(satir, 3) & "!" & Target.Address(0, 0)
            .Cells(satir, 4) = Target.Address(0, 0)
            .Hyperlinks.Add .Cells(satir, 4), "", "=" & .Cells(satir, 3) & "!" & .Cells(satir, 4)
            .Cells(satir, 5) = eski_deger
            .Cells(satir, 6) = Target.Text
            .Cells(satir, 7) = Environ("UserName")
        End With
    End If
End Sub
 
Kusura bakma biraz acele ettim. log sayfasının dışındaki logunun tutulmasını istediğin sayfaların kod sayfasına yapıştırın.
Kod:
Dim eski_deger$
Private Sub Worksheet_Change(ByVal Target As Range)
        Set sayfa = ThisWorkbook.Sheets("log")
        With sayfa
            satir = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            .Cells(satir, 1) = Format(Now, "dd.mm.yyyy")
            .Cells(satir, 2) = Format(Now, "hh:mm")
            .Cells(satir, 3) = ActiveSheet.Name
            .Hyperlinks.Add .Cells(satir, 3), "", "=" & .Cells(satir, 3) & "!" & Target.Address(0, 0)
            .Cells(satir, 4) = Target.Address(0, 0)
            .Hyperlinks.Add .Cells(satir, 4), "", "=" & .Cells(satir, 3) & "!" & .Cells(satir, 4)
            .Cells(satir, 5) = eski_deger
            .Cells(satir, 6) = Target.Text
            .Cells(satir, 7) = Environ("UserName")
        End With
  
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
eski_deger = Target
End Sub
 
log sayfası dışında her sayfanın log unu tutuyor. Thisworkbook modülüne yapıştırın.
Kod:
Dim eski

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name <> "log" Then
        Set sayfa = ThisWorkbook.Sheets("log")
        With sayfa
            satir = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            .Cells(satir, 1) = Format(Now, "dd.mm.yyyy")
            .Cells(satir, 2) = Format(Now, "hh:mm")
            .Cells(satir, 3) = Sh.Name
            .Hyperlinks.Add .Cells(satir, 3), "", "=" & .Cells(satir, 3) & "!" & Target.Address(0, 0)
            .Cells(satir, 4) = Target.Address(0, 0)
            .Hyperlinks.Add .Cells(satir, 4), "", "=" & .Cells(satir, 3) & "!" & .Cells(satir, 4)
            .Cells(satir, 5) = eski
            .Cells(satir, 6) = Target.Text
            .Cells(satir, 7) = Environ("UserName")
        End With
        End If
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
eski = Target
End Sub
 
Üstadım tamam bu kod istediğim sonucu verdi emeğine bilgine sağlık çok teşekkür ederim
 
Geri
Üst