< návrat zpět

MS Excel


Téma: Logování změn v souboru rss

Zaslal/a 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: zip55303_logovani.zip (166kB, staženo 0x)
Zaslat odpověď >

#055304
elninoslov
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
#055305
avatar
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
#055313
avatar
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: zip55313_log.zip (172kB, staženo 3x)
citovat
#055317
avatar
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

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse

rozpis zápasů hráčů pro utkání dvou týmů

Anonym • 25.5. 11:54

Hromadné přepsání

elninoslov • 24.5. 10:29

Hromadné přepsání

Nomi • 24.5. 8:32

Index - každý rok začít od 1 Power Query

Alfan • 23.5. 9:17

nepřímý odkaz

elninoslov • 23.5. 0:00

nepřímý odkaz

bordov • 22.5. 18:35

vrácené hodnoty

Anonym • 22.5. 15:46