< návrat zpět
MS Excel
Téma: Logování změn v souboru
Zaslal/a CMM-Team 11.8.2023 14:23
Dobrý den, vytvořil jsem si sešit, ve kterém chci pomocí VBA logovat veškeré změny ve vybraných sloupcích. Kód se spustí, avšak vlastní logování neproběhne. Tušíte kde je chyba ?
Sešit v příloze, kód níže:
Dim previousValue As Variant
Dim logPath As String
Dim logFileName As String
Private Sub Workbook_Open()
logPath = ThisWorkbook.Path
logFileName = "log.xlsm"
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim changedColumns As String
Dim userName As String
Dim cellAddress As String
Dim originalValue As Variant
Dim newValue As Variant
Dim changeTime As Date
If Dir(logPath & "\" & logFileName) <> "" Then
If Not Intersect(Target, Me.Range("A:A,C:C,E:E,G:G,I:I")) Is Nothing Then
changedColumns = "A,C,E,G,I"
userName = Environ("USERNAME")
cellAddress = Target.Address
originalValue = previousValue
newValue = Target.Value
changeTime = Now
Dim logWorkbook As Workbook
Set logWorkbook = Workbooks.Open(logPath & "\" & logFileName)
Dim logSheet As Worksheet
Set logSheet = logWorkbook.Sheets("Log")
logSheet.Cells(logSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = userName
logSheet.Cells(logSheet.Rows.Count, 1).End(xlUp).Offset(0, 1).Value = changedColumns
logSheet.Cells(logSheet.Rows.Count, 1).End(xlUp).Offset(0, 2).Value = cellAddress
logSheet.Cells(logSheet.Rows.Count, 1).End(xlUp).Offset(0, 3).Value = originalValue
logSheet.Cells(logSheet.Rows.Count, 1).End(xlUp).Offset(0, 4).Value = newValue
logSheet.Cells(logSheet.Rows.Count, 1).End(xlUp).Offset(0, 5).Value = changeTime
logWorkbook.Close SaveChanges:=True
End If
previousValue = Target.Value
Else
MsgBox "Soubor log.xlsm nebyl nalezen ve stejné složce.", vbExclamation
End If
End Sub
Příloha: 55303_logovani.zip (166kB, staženo 1x)
elninoslov(11.8.2023 15:36)#055304 Celý koncept logovania zmien do iného Excel súboru je čisto nereálny. Pri každej zmene bunky sa otvára súbor, vkladajú hodnoty (ešte aj to nešťastným spôsobom po jednej), súbor sa uloží a zavrie. Môžete mať akokoľvek rýchly PC, toto bude v sekundách pri každej zmene. Navyše nepočítate s reálnou možnosťou zmeny viacerých buniek naraz.
Schodnejšie by bolo rýchle ukladanie do TXT súborov. A tie by sa hromadne načítali cez PQ v kontrolnom súbore.
EDIT:
Napadlo ma ešte, jedine, že by sa vytvorila nová skrytá inštancia Excelu, a ten kontrolný súbor by bol v nej otvorený, potom by bolo logovanie rýchle. Ale ten kontrolný súbor by sa potom nedal otvoriť, pokým by nebolo nejako vyvolané jeho skryté zatvorenie (nap. ukončením pôvodného zošitu, alebo tlačítkom, a apod.)
citovat
CMM-Team(12.8.2023 11:23)#055305 Děkuji za možné návrhy řešení, obávám se však, že toto je již nad moje síly. S PQ jsem zatím nepřišel do styku.
citovat
CMM-Team(17.8.2023 9:51)#055313 Tak mi to nedalo a zkusil jsem to řešit ještě přes VBA.
Opustil jsem myšlenku cíleného logování a nyní loguji veškeré změny. Loguje se po 10 změněných záznamech. Logování již nyní běží bezvadně, jediné co mi trochu vadí je probliknutí obrazovky při zápisu dat do logu. Dokážete někdo kód upravit tak, aby zápis probíhal na pozadí bez potřeby otevření sešitu ?
Oba soubory přikládám přílohou.
Příloha: 55313_log.zip (172kB, staženo 5x) citovat
JoKe(19.8.2023 16:09)#055317 a není jednodušší zapnout "Sledování změn" ?
a jednou za čas si změny zobrazit (na samostatném listu)
a případně překopírovat do jiného souboru.
(Samozřejmě pokud to používaná verze Excelu umožňuje.)
citovat