Poniższy problem został wywołany niedawno na forum
StackOverflow.Com i można go opisać w następujących kilku słowach:
W jaki sposób zablokować dostęp do zakładek dokumentu jednocześnie umożliwiając edycję pozostałych elementów dokumentu?
Całkiem ciekawe rozwiązanie tego problemu opiera się na wykorzystaniu obiektów ContentControl (CC) i zdarzeń powiązanych z tym obiektami. Co ważne, rozwiązanie to dostępne jest począwszy od wersji 2007 aplikacji MS Word.
Krok 1. Każdą zakładkę w dokumencie musimy umieścić wewnątrz obiektu ContentControl. Jeżeli nie chcemy wykonywać tej operacji ręcznie wystarczy uruchomić proste makro:
1 | Sub Dodawanie_ContentControl_do_Zakladki() |
4 | For Each bookM In ActiveDocument.Bookmarks |
5 | ActiveDocument.ContentControls.add wdContentControlRichText, _ |
Krok 2. Zakładamy, że naszym celem jest uniemożliwienie edycji bez blokowania obiektu ContentControl. W tym celu wykorzystamy zdarzenie powiązane z tego typu obiektami i wymusimy zmianę zaznaczenia w sytuacji gdy użytkownik kliknie wewnątrz obiektu CC:
01 | Private Sub Document_ContentControlOnEnter( ByVal ContentControl As ContentControl) |
03 | If ContentControl.Range.Bookmarks.Count > 0 Then |
05 | MsgBox "Nie powinieneś zmieniać zawartości " & _ |
06 | "tego obszaru i tej zakładki." & _ |
07 | vbNewLine & "Zostaniesz przeniesiony poza obszar edycji" |
11 | newPos = ContentControl.Range. End + 2 |
12 | ActiveDocument.Range(newPos, newPos). Select |
Alternatywnie krok 1 można rozszerzyć o mechanizm blokowania edycji obiektu CC i jednocześnie zrezygnować z obsługi zdarzenia obiektów CC. W tym wypadku zamiast kroków 1 i 2 zastosujemy poniższy rozszerzony kod z kroku 1:
01 | Sub Add_Bookmark_CC_Protected() |
04 | Dim CC As ContentControl |
05 | For Each bookM In ActiveDocument.Bookmarks |
06 | Set CC = ActiveDocument.ContentControls.Add( _ |
07 | wdContentControlRichText, bookM.Range) |
10 | CC.LockContents = True |
Brak komentarzy:
Prześlij komentarz