Marek Małecki

Marek Małecki Technolog/Laborant

Temat: Blokowanie pliku

Witam, chciałbym zablokować plik .xls. Mam na myśli ze po upływie 2dni program poprosi o hasło lub całkiem się zablokuje i na to nie będzie miała wpływu zmiana daty w komputerze. Jest to możliwe !?
Są programy które blokują w taki sposób pojedyncze pliki !?
Andy L.

Andy L. ITM, VUB

Temat: Blokowanie pliku

Słowa kluczowe: excel, vba, lock, workbook, after, two , days
google.com
Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: Blokowanie pliku

Dodam że jeśli robisz demo to musisz opracować sobie metodę zapisu danych daty pierwszego uruchomienia skoroszytu, która będzie elementem porównawczym odliczania.
Możesz to zrobić w pliku o ile sprawdzisz że nie jest uruchomiony do odczytu lub szyfrując w rejestrze systemowym HCU, po drugie musisz sprawdzić czy odpalony zostanie z makrami (metoda odkrycia arkuszy).
Radosław Dumania

Radosław Dumania Senior Master Data
Analyst

Temat: Blokowanie pliku

ja bym zrobil to troche inaczej (znowu). Zapis ma na pewno kilka niescislosci, ale juz nie moge siedziec nad nim dluzej. Aha, no I automatyczne workbook.protect slabo sie daje ujarzmic w vba wg mnie:

Private Sub Workbook_Open()

Dim wb As Workbook
Set wb = ThisWorkbook
Dim o_date As Date
Dim c_date As Date

o_date = wb.Worksheets("Sheet1").Range("b2").Value
c_date = DateValue(Date)

If c_date - o_date > 2 Then

pass = InputBox("podaj haslo", "haslo podaj")

If pass <> wb.Worksheets("Sheet1").Range("b1").Value Then
MsgBox ("Haslo jest nieprawidlowe, nastapi zamkniecie programu")
wb.Close
End If
End If
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim wb As Workbook
Set wb = ThisWorkbook

wb.Worksheets("Sheet1").Range("b2").Value = DateValue(Date)

End SubTen post został edytowany przez Autora dnia 18.08.16 o godzinie 13:56
Marek Małecki

Marek Małecki Technolog/Laborant

Temat: Blokowanie pliku

Oskar Shon, mi chodzi bardziej o proste rozwiązania mamy 21wiek. Jeśli projektuje arkusz i chce wysłać go do sprawdzenia to muszę ten plik zablokować by ktoś go nie umieścił np. w internecie. I to czego szukam powinno być tak powszechne jak powietrze.

Radosław Dumania: Próbowałem coś zmieniać w kodzie ale nic pożytecznego mi nie wyszło. Tego typu rozwiązanie mnie interesuje, proste okno z hasłem które pojawia się po okresie 7 dni :))

Znalazłem też prosty licznik bez haseł ale jak uruchamiam moduł to visual informuje o problemie .. "Invalid procedure name"

Dim StartTime As Double
StartTime = Timer
Dim i As Integer
Do Until False

'if 5 seconds have elapsed, exit loop
If CInt(Timer - StartTime) > 5 Then Exit Do

Loop
MsgBox "Finished after " & CInt(Timer - StartTime) & " seconds"

Ludzie pogłówkujcie trochę jeśli możecie a będziemy mieli gotowe rozwiązanie dla wszystkich.Ten post został edytowany przez Autora dnia 19.08.16 o godzinie 09:23
Radosław Dumania

Radosław Dumania Senior Master Data
Analyst

Temat: Blokowanie pliku

Obawiam sie ze nie ma prostego rozwiazania w tym wypadku:
albo skorzystac mozesz ze standardowej metody .protect obiektu workbook albo z niej rezygnujesz I piszesz wlasny kod vba wywolywany na event workbook.open

z tego co zdazylem sie nauczyc wczoraj na Twoim przykladzie, metoda .protect jest wywolywana zawsze przy otwarciu pliku (okienko do wpisania hasla) , ale jeszcze przed uruchomieniem obslugi makr. Stad tez nie ma mozliwosci dalszego zdefiniowana kiedy okienko z haslem ma sie pojawic , a kiedy nie.

Pozostaje wiec wlasny skrypt (cos mojego pokroju)

P.S "Invalid name" - a na pewno masz poprawna nazwe procedury?

Sub test()
'Twoj kod
end sub
Andy L.

Andy L. ITM, VUB

Temat: Blokowanie pliku

Marek E.:
Ludzie pogłówkujcie trochę jeśli możecie a będziemy mieli gotowe rozwiązanie dla wszystkich.

Świetne! WY pogłowkujcie a MY będziemy mieli. Aż serce rośnie :)))

Poza tym cokolwiek wymyślisz może zostać zlikwidowane w kilkanaście sekund i dostęp do danych zawartych w pliku będzie otwarty szeroko jak wrota stodoły.
Radosław Dumania

Radosław Dumania Senior Master Data
Analyst

Temat: Blokowanie pliku

Andy L.:
Poza tym cokolwiek wymyślisz może zostać zlikwidowane w kilkanaście sekund i dostęp do danych zawartych w pliku będzie otwarty szeroko jak wrota stodoły.

Tyż prawda.
Marek Małecki

Marek Małecki Technolog/Laborant

Temat: Blokowanie pliku

Andy Levi Ok rozumiem też masz racje wiec posiadam pewien pomysł ale potrzebuje do tego dodatkowych informacji . Czy jest możliwe zliczanie bez względne sekund?!

Wiadomo jak to się odbywa, 0 - 60 i wartość wraca znów do zera tylko ja potrzebuje komórkę która będzie dodawać kolejne pentle. Kojarzy ktoś jak powinna wyglądać formuła, rozumiecie o co mi chodzi ?!
Andy L.

Andy L. ITM, VUB

Temat: Blokowanie pliku

Przeczytaj post Oskara i postaraj się go zrozumieć.
Marek Małecki

Marek Małecki Technolog/Laborant

Temat: Blokowanie pliku

Opcja stopera też byłaby pomocna tylko exel nie posiada takiej, jest tylko TERAZ() ..Można taką opcje stopera gdzieś z internetu ściągnąć !?
Radosław Dumania

Radosław Dumania Senior Master Data
Analyst

Temat: Blokowanie pliku

Dosc duzo tego typu rzeczy w internecine mozna znalezc, np:

http://stackoverflow.com/questions/20880645/stopwatch-...
Radosław Dumania

Radosław Dumania Senior Master Data
Analyst

Temat: Blokowanie pliku

Zmodyfikowalem swoj pierwszy kod teraz (usunalem before close event - robil problem bezsensowe)

Okazal sie na tyle skuteczny, ze mialem problem z otwarciem pliku przez dluzsza chwile :)

'wb.Save - mozesz odkomentowac jesli bedziesz potrzebowal

Mozna by jeszcze ustawic petle na trzy proby wpisania hasla, ale chce juz isc do domu.

Umiescilem kod w "module" ThisWorkbook"



Private Sub Workbook_Open()

Dim wb As Workbook
Set wb = ThisWorkbook

Dim o_date As Date
Dim c_date As Date

o_date = wb.Worksheets("Sheet1").Range("b2").Value
c_date = DateValue(Date)

If c_date - o_date > 7 Then

pass = InputBox("podaj haslo", "haslo podaj")

If pass <> wb.Worksheets("Sheet1").Range("b1").Value Or pass = "" Then
MsgBox ("Haslo jest nieprawidlowe, nastapi zamkniecie programu")
wb.Close savechanges:=False

Else

wb.Worksheets("Sheet1").Range("b2").Value = DateValue(Date)
'wb.Save

End If
End If
End Sub


Ten post został edytowany przez Autora dnia 19.08.16 o godzinie 19:16
Marek Małecki

Marek Małecki Technolog/Laborant

Temat: Blokowanie pliku

Ok wprowadziłem twój kod i musiałem poprawić z Sheet1 na Arkusz1 bo Visual podświetlał na żółto składnie(Debug). Po uruchomieniu faktycznie jest okno do wpisania hasła ale cokolwiek wpisze lub nie po zatwierdzeniu OK arkusz automatycznie wyłącza się . Naprawdę nie mam wiedzy na temat Visuala i ciężko mi cokolwiek wydedukować dlaczego tak się dzieje:(

Oczywiście żadna zmiana daty systemowej nie wpływa na plik!?
Bo to musi być coś w rodzaju bomby, 7 dni a po tym okresie kompletnie nie do otwarcia, jedynie nowa kopia oryginału wydana przez autora może być przedłużeniem takiej licencji.

Private Sub Workbook_Open()
Dim wb As Workbook
Set wb = ThisWorkbook
Dim o_date As Date
Dim c_date As Date

o_date = wb.Worksheets("Arkusz1").Range("b2").Value
c_date = DateValue(Date)

If c_date - o_date > 7 Then

pass = InputBox("podaj haslo", "haslo podaj")

If pass <> wb.Worksheets("Arkusz1").Range("b1").Value Or pass = "" Then
MsgBox ("Haslo jest nieprawidlowe, nastapi zamkniecie programu")
wb.Close savechanges:=False

Else

wb.Worksheets("Arkusz1").Range("b2").Value = DateValue(Date)
'wb.Save
End If
End If
End SubTen post został edytowany przez Autora dnia 19.08.16 o godzinie 21:51
Radosław Dumania

Radosław Dumania Senior Master Data
Analyst

Temat: Blokowanie pliku

bo najpierw w komórce B1 trzeba ustawić haslo :)
Marek Małecki

Marek Małecki Technolog/Laborant

Temat: Blokowanie pliku

Ok ustawiłem komórki jak w linku, najzwyczajniej zapisałem całość z obsługą mark.
W1 jest z formułą TERAZ() wiec jeśli zmienię datę systemową to komórka się uaktualni. Tak też zrobiłem, arkusz otworzyłem lecz nie wyskoczyło okno z hasłem. Chyba że znów robię coś źle..

zapodaj.net/c4e6c1af34e2d.png.htmlTen post został edytowany przez Autora dnia 20.08.16 o godzinie 12:08
Radosław Dumania

Radosław Dumania Senior Master Data
Analyst

Temat: Blokowanie pliku

Jeśli w komórce wstawisz formule Teraz to za każdym razem będzie tam obecna dzisiajsza data wraz z godzina. Wewnatrz VBA jest natomiast sprawdzana sama data.

Jesli chcesz to możesz zmodyfikować w kodzie ten fragment:

o_date = wb.Worksheets("Sheet1").Range("b2").Value

na

o_date = datevalue( wb.Worksheets("Sheet1").Range("b2").Value)

wtedy będzie hulac.

ALE nie do końca :D bo:

Formula Today odswieza się w momencie kiedy komorka jest edytowana. Czyli niekoniecznie wtedy kiedy tego zapragniesz. Również w momencie otwarcia pliku jest automatycznie przeliczana. W rezultacie możesz nie zostać nigdy zapytany o haslo. (wg Twoich wytycznych ma to się zdarzyć tylko jeśli plik nie był otwierany dluzej niż 7 dni)

Jak zauważysz w dalszej części mojego kodu, po każdym udanym zalogowaniu do pliku data zmieniana jest w tej komórce na aktualna. Wydaje się mi ze to jest bezpieczniejszy sposób do zastosowania. Bez zadnej funkcji excelowej , na żądanie. Jak VOD.
Marek Małecki

Marek Małecki Technolog/Laborant

Temat: Blokowanie pliku

Wprowadziłem poprawki i zobaczymy jak to wyjdzie w rzeczywistości...
Marek Małecki

Marek Małecki Technolog/Laborant

Temat: Blokowanie pliku

Znalazłem jeszcze taką formułę tylko jest problem bo po 2x wpisania błędnego hasła arkusz zostaje otwarty, nie mam siły już do tego...
Tak samo jak wpisze się daty naprzemiennie w komórki to tez pojawia sie inf. o hasło. Boże co za planeta!! :D

Aha! i jeszcze jedna kwestia, po co mi hasła jak po otwarciu jest dostęp do kodu!? ;/// Ten kod powinien być dostępny tylko dla autora!

Private Sub Workbook_Open()
Dim v1 As Date
Dim v2 As Date
Dim password As String
v1 = 2016 - 8 - 22
v2 = Date
If v2 > v1 Then
password = InputBox("enter password")
Else
MsgBox ("Opening file")
End If
If password = "123" Then
MsgBox ("Welcome!")
Else
MsgBox ("Incorrect password!")
password = InputBox("Enter password again")
End If
End SubTen post został edytowany przez Autora dnia 22.08.16 o godzinie 10:04
Andy L.

Andy L. ITM, VUB

Temat: Blokowanie pliku

Poiwnieneś "zahasłować" VBA Project. Wtedy teoretycznie kod nie będzie dostępny dla uzytkownika.
Ale, jak juz pisałem, wszelkiego rodzaju hasła mogą zostać zdjęte w ciągu kilku sekund i dane oraz kod vba będą dostępne dla każdego.Ten post został edytowany przez Autora dnia 22.08.16 o godzinie 11:07



Wyślij zaproszenie do