2012-04-17 9 views
11

używam następujący kod, aby zablokować treść niektórych komórkachVBA Excel - Jak zablokować konkretne komórki ale umożliwiają filtrowanie i sortowanie

Sub LockCell(ws As Worksheet, strCellRng As String) 
    With ws 
    .Unprotect 
    .Cells.Locked = False 
    .Range(strCellRng).Locked = True 
    .Protect Contents:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows:=True, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True, DrawingObjects:=True 
    End With 
End Sub 

to działa dobrze blokowania treści tych konkretnych kolumn. Problem polega na tym, że pracując nad samym arkuszem kalkulacyjnym, użytkownicy nie mogą sortować ani filtrować ani stosować obramowań do komórek, ponieważ te elementy menu programu Excel są wyłączone. Myślałem, że AllowSorting:=True, AllowFiltering:=True i DrawingObjects:=True pozwoliłoby że ten sam sposób AllowFormattingColumns:=True i AllowFormattingRows:=True dozwolone skalowania.

Z góry dziękujemy za pomoc.

Pozdrawiam, Ronald

+1

Sugeruję ponowne przeczytanie pomocy programu Excel z 'Worksheet Proptect', szczególnie w odniesieniu do parametrów _Allow_ chronionych _workheets_ i locked _cells_. AllowSorting: "Każda komórka w zakresie sortowania musi być odblokowana lub niechroniona" AllowFiltering: "Użytkownicy mogą zmieniać kryteria filtrowania, ale nie mogą włączać ani wyłączać automatycznego filtra" –

+0

Dzięki, to jest smutne, ponieważ muszę mieć możliwość zablokowania niektórych treść, ale zezwól użytkownikowi na sortowanie i filtrowanie. Jakieś pomysły? –

+0

1.) upewnij się, że twój zasięg nie pokrywa się z innymi zakresami. 2.) odblokuj wszystkie komórki w arkuszu przed zastosowaniem blokady do zasięgu. 3.) "Komórki przeznaczone do filtrowania muszą zostać odblokowane, gdy arkusz jest chroniony." ... więc po prostu nie włączaj tych "komórek filtrujących" jako części zablokowanego zakresu. https://msdn.microsoft.com/en-us/library/office/ff839866.aspx –

Odpowiedz

5

Był to poważny problem dla mnie i znalazłem poniższy link ze stosunkowo prostą odpowiedź. Dzięki Voyager!

Zauważ, że nazwałem zakres chciałem innym móc sortować

  • chroń arkusza
  • Go do „Protection” --- „Zezwalaj użytkownikom na edycję zakresów” (jeśli Excel 2007 " recenzja”tab)
  • Add«Nowy»zakres
  • Wybierz zakres, który ma umożliwić użytkownikom sortowanie
  • Kliknij«Chroń arkusz»
  • Tym razem * nie pozwalają użytkownikom wybrać "zablokowane komórki" **
  • OK

http://answers.yahoo.com/question/index?qid=20090419000032AAs5VRR

7

Istnieje wiele osób z tej trudnej sytuacji. Przeważającą odpowiedzią jest to, że nie można zabezpieczyć zawartości przed edycją, jednocześnie umożliwiając nieskrępowane sortowanie. Dostępne są następujące opcje:

1) Pozostawić edycji i sortowania :(

2) Zastosować ochronę i tworzenie przycisków z kodem do sortowania przy użyciu VBA. Istnieją inne posty wyjaśniające, jak to zrobić. Myślę, że istnieją dwa sposoby, albo (1) uzyskać kod do usunięcia ochrony arkusza, zastosowanie sortowania, a następnie ponownie zabezpieczyć arkusz, lub (2) mają zabezpieczony arkusz używając UserInterfaceOnly:=True.

3) odpowiedź Lorie która nie pozwala użytkownikom wybrać komórki (https://stackoverflow.com/a/15390698/269953)

4) Jednym z rozwiązań, które nie widziałem omówione jest przy użyciu VBA, aby zapewnić pewną podstawową ochronę. Na przykład wykryj i przywróć zmiany za pomocą Worksheet_Change. Jednak nie jest to idealne rozwiązanie.

5) Można zachować arkusz chroniony, gdy użytkownik wybiera dane i bezbronny, gdy użytkownik ma nagłówek został wybrany. To pozostawia wiele sposobów Użytkownicy mogą zepsuć dane jednocześnie powodując pewne problemy z użytecznością, ale przynajmniej zmniejsza szanse na brzydkie współpracowników bezmyślnie podejmowania niechcianych zmian.

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If (Target.row = HEADER_ROW) Then 
     wsMainTable.Unprotect Password:=PROTECTION_PASSWORD 
    Else 
     wsMainTable.Protect Password:=PROTECTION_PASSWORD, UserInterfaceOnly:=True 
    End If 
End Sub 
1

Oto artykuł, który wyjaśnia problem i rozwiązanie, dużo bardziej szczegółowo:

Sorting Locked Cells in Protected Worksheets

rzeczą do zrozumienia jest to, że celem komórek blokujących jest zapobiec ich zmianie, a sortowanie trwale zmienia wartości komórek. Możesz napisać makro, ale o wiele lepszym rozwiązaniem jest użycie opcji "Zezwalaj użytkownikom na edycję zakresów". Dzięki temu komórki mogą być edytowalne, więc sortowanie może działać, ale ponieważ komórki są nadal technicznie zablokowane, możesz uniemożliwić użytkownikom ich wybór.

2

Po prostu wymyśliłem trudny sposób, aby uzyskać prawie taką samą funkcjonalność. Zamiast chronić arkusz w normalny sposób, użyj procedury obsługi zdarzeń, aby cofnąć wszystko, co użytkownik próbuje zrobić.

Dodaj poniższe linie do modułu arkusza za:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Locked = True Then 
     Application.EnableEvents = False 
     Application.Undo 
     Application.EnableEvents = True 
    End If 
End Sub 

Jeżeli użytkownik robi nic, aby zmienić komórkę, która jest zablokowana, akcja będzie się natychmiast cofnąć. Tymczasowe wyłączanie zdarzeń powoduje, że samo cofanie nie powoduje uruchomienia tego zdarzenia, co powoduje nieskończoną pętlę.

Sortowanie i filtrowanie nie powoduje zdarzenia Zmiana, więc funkcje te pozostają włączone.

Należy zauważyć, że to rozwiązanie zapobiega zmianie lub usuwaniu zawartości komórki, ale nie zapobiega zmianie formatów. Zdeterminowany użytkownik może ominąć to poprzez ustawienie komórek, które mają zostać odblokowane.

+0

Dokładnie tego, czego szukałem - to fajna sztuczka do użycia flagi 'locked'.To powinna być odpowiedź: –

0

Jeśli autofiltering jest częścią operacji podprogramu, można użyć

BioSum.Unprotect "letmein" 

'<Your function here> 

BioSum.Cells(1, 1).Activate 
BioSum.Protect "letmein" 

na chwilę wyłączyć ochronę arkusza, filtrowanie komórek, a następnie ponowne zabezpieczenie.

-1

W programie Excel 2007 odblokuj komórki, do których chcesz wprowadzić dane. Przejdź do przeglądu

> Protect Sheet 
> Select Locked Cells (already selected) 
> Select unlocked Cells (already selected) 
> (and either) select Sort (or) Auto Filter 

Nie VB wymagane

+1

Pytanie brzmiało, jak wykonać tę akcję za pomocą VBA. Twoja odpowiedź jest błędna – Dragos

0

Wiem, że to bardzo stary, ale pojawia się zawsze, gdy google ten problem. Możesz wyłączyć ochronę, jak podano w powyższych komórkach, a następnie dodać sprawdzanie poprawności danych do niezabezpieczonych komórek, aby odwołać się do czegoś oburzającego jak "423fdgfdsg3254fer", a następnie, jeśli użytkownicy spróbują edytować te komórki, nie będą mogli tego zrobić, ale sortujesz i filtrowanie będzie teraz działało.

Powiązane problemy