Wpis z mikrobloga

#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 ()
  • 11
@zdzisekmalina Tu masz kod:

--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 " &
  • 0
@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ł...
@zdzisekmalina

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 Workbook
Open()

SetAttr "[sciezka]", vbNormal

Dim uName As String
uName = Environ("username")
Call FillLog(uName)
End Sub
@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...