Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Excel VBA - Wyłączenie chrony udostępnionego arkusza z poziomu VBA

myszowaty23 20 Feb 2016 10:14 6516 8
  • #1
    myszowaty23
    Level 14  
    Witam! Nie mogę poradzić sobie z wyłączaniem na chwilę (na czas dodawania wpisu) ochrony arkusza excel, który został udostępniony.

    Mam 4 komórki do których klient wpisuje dane. Poniżej tych komórek jest tabela. Tabela jest zablokowana. Po wpisaniu swoich danych klient klika przycisk DODAJ następuje wyłączenie ochrony arkusza w kodzie VBA, skopiowanie danych z wypełnionych komórek do tabeli, następnie arkusz znowu jest blokowany.
    Wszystko działa pięknie, ładnie do chwili aż nie zapiszę pliku jako udostępniony dla wielu użytkowników (plik ma być na serwerze). Wówczas makro "DODAJ" jest blokowane gdyż "zawiera informacje poufne" tj. hasło

    Gdzieś wyczytałem radę aby hasło wczytać z pliku txt. Próbowałem ale nie wiem jak i czy można w kodzie:

    Worksheets("arkusz1").Protect "hasło", userinterfaceonly:=True

    Słowo hasło zastąpić zmienną zawierającą ciąg znaków wczytany właśnie z pliku txt.
  • Helpful post
    #2
    JRV
    VBA, Excel specialist
    4 komórki do których klient wpisuje dane, nie zaptaszkowac dla ochrony.
    Worksheets("arkusz1").Protect "hasło", userinterfaceonly:=True
    Zrob to recznie(odpal makro), nastepnie plik jako udostępniony dla wielu użytkowników.
    Tabela jest zablokowana, dla makro NIE.

    Worksheets("arkusz1").Protect "hasło", userinterfaceonly:=True - to umiesc w Workbook_Open
  • #4
    JRV
    VBA, Excel specialist
    I ktory bedzie widac hasło jeśli makra nie będą dostępne?

    Dodano po 1 [minuty]:

    W Twojej firmie są wszyscy hakerzy?

    Dodano po 10 [minuty]:

    Zrob jak post #2, lub chrań ręcznie z haslem
    przed powszechnego dostępu zostawić tylko takie makro
    Private Sub Workbook_Open()
    ActiveSheet.Protect UserInterfaceOnly:=True
    End Sub
  • #5
    myszowaty23
    Level 14  
    JRV wrote:
    I ktory bedzie widac hasło jeśli makra nie będą dostępne?

    Dodano po 1 [minuty]:

    W Twojej firmie są wszyscy hakerzy?

    Dodano po 10 [minuty]:

    Zrob jak post #2, lub chrań ręcznie z haslem
    przed powszechnego dostępu zostawić tylko takie makro
    Private Sub Workbook_Open()
    ActiveSheet.Protect UserInterfaceOnly:=True
    End Sub



    Całość działa dość fajnie dopóki właśnie nie udostępniam pliku. Każdy użytkownik będzie mógł dodać wpis ale po naciśnięciu przycisku "DODAJ" nie będzie mógł go poprawić ani skasować. Plik obecnie mam chroniony ręcznie. Jego odblokowanie następuje po wywołaniu makra "DODAJ" wpis się kopiuje we właściwe miejsce i arkusz znowu jest chroniony. Jednak po udostępnieniu makro "DODAJ" "wysypuje się" na linii gdzie podaję hasło zdejmujące ochronę arkusza. Inne makra działają normalnie. Wypróbuję Twoje makro i zobaczę czy będę mógł udostępnić plik normalnie. Dam znać jak skończę.
  • Helpful post
    #6
    JRV
    VBA, Excel specialist
    Niech makro "DODAJ" nie odblokowuje,

    makro
    Private Sub Workbook_Open()
    ActiveSheet.Protect UserInterfaceOnly:=True
    End Sub
    udostępnia zablokowane TYLKO dla makro
  • Helpful post
    #8
    JRV
    VBA, Excel specialist
    Quote:
    If haslo = "1234" Then 'sprawdza poprawność hasła
    Tutaj 'haslo' jest zmienna, ma wartosc "1234",
    Quote:
    Worksheets("arkusz1").Protect "haslo", userinterfaceonly:=True 'odblokowuje ochrone arkusza

    tu haslo naprosto ma wartosc "haslo"

    Dodano po 8 [minuty]:

    Private Sub Workbook_Open() 
    Worksheets("arkusz1").Protect UserInterfaceOnly:=True 
    End Sub 
    
    Ten kod ma byc w kodzie skoroszytu, nie modulu

    myszowaty23 wrote:
    Sub Dodaj()
    Worksheets("arkusz1").Protect "haslo", userinterfaceonly:=True 'wyłącza ochrona na czas dodania wpisu

    Usun tu liniju('wyłączanie ochrony, ponadto wyłączanie ochrony to jest .Unprotect
  • #9
    myszowaty23
    Level 14  
    JRV wrote:
    Quote:
    If haslo = "1234" Then 'sprawdza poprawność hasła
    Tutaj 'haslo' jest zmienna, ma wartosc "1234",
    Quote:
    Worksheets("arkusz1").Protect "haslo", userinterfaceonly:=True 'odblokowuje ochrone arkusza

    tu haslo naprosto ma wartosc "haslo"


    To moje niedopatrzenie, na potrzeby publikacji kodu na forum ciąg znaków będącym hasłem zmieniłem z właściwego na "hasło".
    Zmienna globalna "haslo"="1234" służy do MSgBox'a. Nie chroni arkusza a jedynie dostęp do dwóch makr.

    Dziękuję za rady. Spróbuję troszkę później gdyż teraz niestety praca fizyczna mnie czeka.

    Kurcze, albo coś źle robię albo nie działa. Skasowałem swoje, dodałem Twój kod. Udostępniam skoroszyt. Zamykam i otwieram ponownie i już nie działa. Do póki nie zamknę to makra działają lecz po zamknięciu i ponownym uruchomieniu wyskakuje błąd 1004 mówiący " komórka lub wartość która próbujesz zmienić ma tryb chroniony.... wyłącz ochronę...."


    Dalej z tym walczę. Efekt jest taki, że działa wszystko prawidłowo do póki nie zamknę i ponownie otworzę plik excela. Próbowałem Twoim sposobem oraz jakimiś innymi z internetu. Nigdy nie uczułem się VBA. To co napisałem opiera się o informacje zaczerpnięte z forów.
    W udostępnionym pliku makra działają o ile nie mam włączonej ochrony na komórki. Po włączeniu ochrony i udostępnieniu arkusza dla wielu użytkowników raz wyskakuje błąd 1004, raz informacja, że komórka którą próbuję zmienić jest zablokowana a innym razem, że formuła Unprotect nie jest dostępna w klasie Worksheet.
    Kompletnie nie wiem jak powiązać te trzy rzeczy tj. ochronę komórek, makra i udostępnienie pliku.