#excel #vba Potrzebna pomoc z excelem i vba. Mam plik na dysku sieciowym i potrzebuję stworzyć log wszystkich osób, które do danego pliku weszły (nawet bez nanoszenia jakichkolwiek zmian). Udało mi się znaleźć makro:
Private Sub WorkbookOpen() Dim nrPlikuWyj
On Error Resume Next
nrPlikuWyj = FreeFile Open "C:\Logi.txt" For Append Shared As #nrplikuwyj Write #nrplikuwyj, "Plik " & ThisWorkbook.Name & " został otworzony " & Now ; " przez " & Application.UserName Close #nrplikuwyj End Sub
które zapisuje rejestr wejść do pliku Logi.txt na dysku C. Wszystko fajnie, ale pojawiają się dwa problemy: 1) zapisuje wejście TYLKO autora pliku 2) każda inna osoba niż autor pliku, otwiera go z automatu jako "tylko do odczytu"
podejrzewam, że te dwie rzeczy są ze sobą powiązane i tryb "read-only" powoduje to, że makro nie uruchamia się automatycznie...
Ktoś ma jakiś pomysł, jak to naprawić? Od razu zaznaczam, że jestem totalnym laikiem w kwestii makr (╥﹏╥)
@zdzisekmalina Co do pkt 2 to mozesz to zmienic w ustawieniach pliku. Wchodzisz w Ustawienia -> Centrum zaufania -> Ustawienia Centrum zaufania -> Ustawinia Makra i zmieniasz opcje 4 - wlacz wszystkie makra
@dr_Cyban: no właśnie mam ustawione "włącz wszystkie makra", a i tak inni go mają do odczytu :( I nie wiem co robię źle, ale nie działa mi twoje makro...
@zdzisekmalina nie ma znaczenia co wrzucisz w VBA bo plik otwarty tylko do odczytu nie uruchamia makr. Albo wymusisz na użytkowniku włączenie makr albo zrobisz drugiego excela, który będzie na bieżąco monitorował stan pierwszego excela i zapisywał kto go otworzył...
@dr_Cyban: nie rozwinąłem wypowiedzi... działa, ale tylko wtedy, gdy ja go otworzę. zapisuję plik na dysku sieciowym, otwiera go ktoś inny i otwiera mu się jako "read-only", a ma ustawione włączanie makr
@dr_Cyban: ok, dzięki za pomoc. wszystko jest ok z twoim makrem :) problem leży po mojej stronie - zabezpieczenia w firmie powodują, że pliki z makrami, zapisywane na dyskach sieciowych,a nie są mojego autorstwa, otwierane są jako read-only i nic się z tym nie da zrobić. Potrzebne są uprawnienia administratora...
@fledgeling dostep do pliku txt poprzez komende Open moze zawierac 5 mozliwosci dostepu: Input, Output, Random, Append, Binary. W naszym przypadku wybralismy Append, co powoduje dopisanie tresci na koncu pliku. Wiecej na ten temat: http://www.profsr.com/vb/vbless08.htm
Potrzebna pomoc z excelem i vba. Mam plik na dysku sieciowym i potrzebuję stworzyć log wszystkich osób, które do danego pliku weszły (nawet bez nanoszenia jakichkolwiek zmian).
Udało mi się znaleźć makro:
Private Sub WorkbookOpen()
Dim nrPlikuWyj
On Error Resume Next
nrPlikuWyj = FreeFile
Open "C:\Logi.txt" For Append Shared As #nrplikuwyj
Write #nrplikuwyj,
"Plik " & ThisWorkbook.Name &
" został otworzony " & Now
; " przez " & Application.UserName
Close #nrplikuwyj
End Sub
które zapisuje rejestr wejść do pliku Logi.txt na dysku C. Wszystko fajnie, ale pojawiają się dwa problemy:
1) zapisuje wejście TYLKO autora pliku
2) każda inna osoba niż autor pliku, otwiera go z automatu jako "tylko do odczytu"
podejrzewam, że te dwie rzeczy są ze sobą powiązane i tryb "read-only" powoduje to, że makro nie uruchamia się automatycznie...
Ktoś ma jakiś pomysł, jak to naprawić? Od razu zaznaczam, że jestem totalnym laikiem w kwestii makr (╥﹏╥)
--Ten wklej w obiekt skoroszytu (ThisWorkbook w Microsoft Windows Objects):
Option Explicit
Private Sub WorkbookOpen()
Dim uName As String
uName = Environ("username")
Call FillLog(uName)
End Sub
--a ten w nowy modul (prawym Insert Module)
Option Explicit
Sub FillLog(uName)
Dim nrPlikuWyj
On Error Resume Next
nrPlikuWyj = FreeFile
Open "C:\Logi.txt" For Append Shared As #nrplikuwyj
Write #nrplikuwyj,
"Plik " & ThisWorkbook.Name &
" zostal otworzony " &
I nie wiem co robię źle, ale nie działa mi twoje makro...
Albo wymusisz na użytkowniku włączenie makr albo zrobisz drugiego excela, który będzie na bieżąco monitorował stan pierwszego excela i zapisywał kto go otworzył...
wpisz to pod komenda WorkbookOpen()
SetAttr " [sciezka i nazwa pliku np. "C:\Users\Desktop\Book1.xlsm"] ", vbNormal
przy otwarciu pliku zmieni atrybut ReadOnly
czyli powinno wygladac tak:
Option Explicit
Private Sub WorkbookOpen()
SetAttr "[sciezka]", vbNormal
Dim uName As String
uName = Environ("username")
Call FillLog(uName)
End Sub
@dr_Cyban: ten fragment powoduje, że dopisywana jest kolejna linijka?
czyli będzie
Adam
Beata
Celina?
i jak otworzy Zenon, to też się dopisze na koniec, a nie nadpisze pierwszy wiersz?
W naszym przypadku wybralismy Append, co powoduje dopisanie tresci na koncu pliku.
Wiecej na ten temat: http://www.profsr.com/vb/vbless08.htm