2017-05-16 1 views
0

Excel 2010 - Ich habe ein Arbeitsblatt mit der Bezeichnung "DATA1" und in diesem Beispiel wurde die gesamte Arbeitsmappe für die Benutzer nur bestimmte Zellen geschützt. Obwohl ich Spalten ("L: N") habe, die Duplikate bei Nicht gesperrt entfernen möchten, entfernt der Code keine Duplikate. Die Methode zum Aufheben des Schutzes der gesamten Arbeitsmappe und zum erneuten Schützen ist bei allen Aktionen, die der Code durchlaufen muss, keine praktikable Option. Hinweis: Wenn der Administrator die gesamte Datei ungeschützt hat, wird der Code einwandfrei ausgeführt.Excel VBA entfernen Duplikate, wenn Arbeitsmappe geschützt, obwohl Zellen nicht gesperrt sind

es mit dieser Fehlermeldung auf dem folgenden Code hängt - „Laufzeitfehler‚1004‘: Anwendung definiert oder Objekt definiert Fehler:

ActiveSheet.Range("L1:N200").RemoveDuplicates Columns:=Array(1, 2, 3), _ 
    Header:=xlYes 

Nachdem das gesamte Blatt Entriegeln, dachte sogar die gesamte Arbeitsmappe geschützt ist, stoppt er nun in der ersten Zeile des Codes:

Sheets("DATA1").Range("List_FTE_Names").ClearContents 

Hier ist mein Code:

Sub mcr_FTE_Names() 

'Clear contents in the FTE Names columns for a clean slate 
Sheets("DATA1").Range("List_FTE_Names").ClearContents 

'Copy FTE Names columns from Labor Forecast Detail 
Sheets("Labor Forecast Detail").Range("List_FTE_Names_Forecast").Copy 

'Paste Special Values of data just copied 
Sheets("DATA1").Range("List_FTE_Names").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
Application.CutCopyMode = False 

'Remove Duplicates 
Sheets("DATA1").Range("List_FTE_Names").RemoveDuplicates Columns:=Array(1, 2, 3), _ 
    Header:=xlYes 

'Sort Alphabetically 
ActiveWorkbook.Worksheets("DATA1").Sort.SortFields.Clear 
ActiveWorkbook.Worksheets("DATA1").Sort.SortFields.Add Key:=Range("L2:L800") _ 
    , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
ActiveWorkbook.Worksheets("DATA1").Sort.SortFields.Add Key:=Range("M2:M800") _ 
    , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
ActiveWorkbook.Worksheets("DATA1").Sort.SortFields.Add Key:=Range("N2:N800") _ 
    , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
With ActiveWorkbook.Worksheets("DATA1").Sort 
    .SetRange Range("List_FTE_Names") 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 

End With 

MsgBox "Your Resources have been consolidated and alphabetized," & vbNewLine & "you will now proceed back to the Home page." 
Sheets("Home").Select 
Range("A1").Select 

End Sub 

Alle Gedanken und/oder Richtung würde am meisten geschätzt werden. Vielen Dank für Ihre Suche.

Hier ist meine ProtectAll_Admin() Code, wenn es hilft:

Sub ProtectAll_ADMIN() 
Dim ws As Worksheet 
Dim pWord1 As String 
Dim pWord2 As String 

For Each ws In Worksheets 
    If ws.ProtectContents Then 
     MsgBox ActiveWorkbook.Name & " is already protected.", vbCritical 
     Exit Sub 
    End If 
Next ws 

' To Hide all rows and columns for editing 
Call mcr_HideRowsColumns_ADMIN 

pWord1 = InputBox("Please Enter the password") 
If pWord1 = "" Then Exit Sub 

pWord2 = InputBox("Please re-enter the password") 
If pWord2 = "" Then Exit Sub 

'Make certain passwords are identical 
If InStr(1, pWord2, pWord1, 0) = 0 Or InStr(1, pWord1, pWord2, 0) = 0 Then 
    MsgBox "You entered different passwords. No action taken!" 
    Exit Sub 
End If 

    For Each ws In Worksheets 
    ws.Protect Password:=pWord1 
    'ws.Protect UserInterfaceOnly:=True 
    ws.Protect AllowFiltering:=True 
Next 

MsgBox "All Sheets have been Protected" & vbNewLine & "and the File is ready for the PM." 

End Sub 
+0

Ich bin mir nicht sicher, ob workbook.protect die Zellen blockiert. Ich dachte, es verhindere nur, dass neue Blätter hinzugefügt oder verschoben werden. Sind Sie sicher, dass ein bestimmtes Blatt nicht geschützt ist? –

+0

@JohnMuggins - Der Code zum Schutz der Arbeitsmappe ist für jedes ws In Worksheets ws.Protect Passwort: = pWord1 ws.Protect AllowFiltering: = True Allerdings habe ich viele entsperrte Zellen für die Manager in der Zeit für ihre eingeben FTEs. Ich kann sogar die oben genannten Zellen bearbeiten, weil sie freigeschaltet sind. Es verblüfft mich unglaublich. Ich möchte keine Problemumgehung erstellen, die für den Manager oder den Administrator abscheulich ist. –

+0

Im geschützten Blatt sind viele Optionen wie Datenüberprüfung, Filter, Entfernen von Duplikaten usw. deaktiviert. In Ihrem VBA-Code können Sie Blätter ("DATA1"). Passwortschutz: = "pWord1" und Blätter ("DATA1"). Passwort schützen : = „pWord1“ – Unknown

Antwort

1

Vielleicht versuchen, die Userinterfaceonly-Methode zu verwenden, wenn die Arbeitsblätter geschützt sind. dh

for each ws in workbook 
    ws.Protect UserInterfaceOnly:=True 
next ws 

Dieser Code sperrt es nur für die Benutzer, aber nicht VBA. Sie müssen sich nicht darum kümmern, die Blätter in Ihrem vba-Code zu schützen oder zu entfernen.

+0

Ich habe hinzugefügt, dass ws.Protect UserInterfaceOnly: = True und das brachte mich in eine Endlosschleife von mir in der System-Message-Box zu Unprotect fragen. –

+0

Ich habe das wirklich zusammengereiht und es funktioniert tatsächlich John, Danke! Für jede ws In Worksheets ws.Protect Passwort: = pWord1, AllowFiltering: = True, UserInterfaceOnly: = True –

+0

Ich lernte diesen Trick von Cpearson vor vielen Jahren. Sehr hilfreich. Aber ja, der Code, den ich geschrieben habe, verlangte, dass alle Arbeitsblätter zuerst ungeschützt waren, bevor der Code ausgeführt wurde. Sie könnten einfach eine Zeile "ws.unprotect" direkt über dem "ws.protect userinterfaceonly: = True" hinzufügen, um die Fehler zu vermeiden. –

Verwandte Themen