Ochrona Arkusza a Makro

Użytkowanie arkusza kalkulacyjnego
Yuppies
Posty: 2
Rejestracja: sob mar 18, 2017 7:13 pm

Ochrona Arkusza a Makro

Post autor: Yuppies »

Witam

Mam w arkuszu zastosowane makro, które ma za zadanie zapisywać automatycznie datę wpisu w komórce obok:

Kod: Zaznacz cały

Sub Dzisiejsza_Data
   Dim lCol as Long, lRow as Long
   arkSrc = Thiscomponent.Sheets.GetByName("Arkusz1")
   call GetFocusedCell(ThisComponent, lCol, lRow)

   If lCol = 2 And lRow > 2 then
     If arkSrc.getCellByPosition(lCol,lRow).string <> "" then
      	arkSrc.getCellByPosition(lCol - 1, lRow).string = Now()
     Else
     	arkSrc.getCellByPosition(lCol - 1, lRow).string = ""
     End if
   End if

End Sub

Sub GetFocusedCell(oDoc as Object, lCol as Long, lRow as Long) 
  Dim as1 
  Dim sDum as String 
  as1  = Split(oDoc.currentController.ViewData, ";") 
  sDum = as1(oDoc.currentSelection.RangeAddress.Sheet+3) 
  as1  = Split(sDum, "/") 
  lCol = CLng(as1(0)) 
  lRow = CLng(as1(1)) 
End Sub
I przygotowałem już cały arkusz tak jak chcę aby docelowo działał ale podczas włączania ochrony arkusza, komórki w których jest data przestają działać - przestaje działać makro - a zaczyna po zdjęciu ochrony.
Jak sobie z tym poradzić ?

Zaznaczam że nie jestem autorem makra i mam dość podstawową wiedzę z arkuszy kalkulacyjnych.
Będę wdzięczny za pomoc.
OpenOffice 4.1.3 na Windows 10
Awatar użytkownika
Jermor
Posty: 2257
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Ochrona Arkusza a Makro

Post autor: Jermor »

W arkuszu wszystkie komórki mają standardowo przypisany status "chronione". Musisz zatem komórkom do których będą (czy mogą być) wprowadzane dane w arkuszu chronionym wyłączyć ten status "Formatuj komórki - Ochrona komórek".
O ile normalne formuły wykonują się w komórkach chronionych, to wykonywanie na nich makr wstawiających coś do nich jest traktowane tak jak wpisywanie z klawiatury a więc zabronione.
Innym rozwiązaniem jest uzupełnienie makra o sekwencję zdejmująca ochronę arkusza przed właściwym makrem i sekwencję włączającą tę ochronę po wykonaniu makra. Napisałem kiedyś sobie takie dwie procedury. Parametrem dla nich jest nazwa arkusza. W zmiennej haslo2 wstaw własne hasło ochrony.

Kod: Zaznacz cały

sub ochrona_tak (nArk as string)
rem ----------------------------------------------------------------------
rem Włącz ochronę arkusza
Dim ark as object
Dim haslo2 As String
haslo2 = "Tu wstaw hasło"

ark=ThisComponent.sheets.getByName(nArk)
ark.protect(haslo2)
end sub

sub ochrona_nie (nArk as string)
rem ----------------------------------------------------------------------
rem Wyłącz ochronę arkusza
Dim ark as object
Dim haslo2 As String
haslo2 = "Tu wstaw hasło"

ark=ThisComponent.sheets.getByName(nArk)
ark.unprotect(haslo2)
end sub
Może się przydać.
Wywołanie np tak:

Kod: Zaznacz cały

call ochrona_nie ("Nazwa_arkusza")
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Yuppies
Posty: 2
Rejestracja: sob mar 18, 2017 7:13 pm

Re: Ochrona Arkusza a Makro

Post autor: Yuppies »

Próbowałem wstawić ochrona nie przed i ochrona tak po tym makrze co podawałem wcześniej ale wyskakuje błąd składni Basic - jak pisałem nie znam się na tym za bardzo będę wdzięczny za dokładniejsze instrukcje :) thx
OpenOffice 4.1.3 na Windows 10
Awatar użytkownika
Jermor
Posty: 2257
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Ochrona Arkusza a Makro

Post autor: Jermor »

Dopiero teraz zauważyłem, że deklaracja "dim ark as object" była powtórzona w obu modułach. Poprawiłem to w listingu podanym powyżej.
Argument hasło musi wystąpić. Jeśli arkusz nie jest chroniony hasłem należy je podać jako "" (dwa cudzysłowy)
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Awatar użytkownika
Jermor
Posty: 2257
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Ochrona Arkusza a Makro

Post autor: Jermor »

Piszesz, że nie za bardzo się znasz na makrach. To może jeszcze taka uwaga:
Wywołania wstawiasz tak:

Kod: Zaznacz cały

 If lCol = 2 And lRow > 2 then
     call ochrona_nie("Arkusz1")
     If arkSrc.getCellByPosition(lCol,lRow).string <> "" then
         arkSrc.getCellByPosition(lCol - 1, lRow).string = Now()
     Else
        arkSrc.getCellByPosition(lCol - 1, lRow).string = ""
     End if
     call ochrona_tak("Arkusz1")
End if
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
ODPOWIEDZ