2016-05-27 6 views
1

Ich habe eine Teil-Lookup-Datei, die die Position von der Teilenummer zurückgibt. Ich habe auch diese Datei erstellen Sie eine Upload-Datei basierend auf dem Standort als bestimmte Standorte verweisen auf ein computergestütztes Speichersystem und ich kann hochladen.Sperren und Entsperren mit VBA

Mein Problem ist Spalte A ist die Teilenummer, B ist ein Steuerelement, das eine "1" bietet, wenn das Teil in der computerisierten Position ist und ausgeblendet wird. Spalte C ist offen für die Zählung des eingehenden Teils. Da Spalte C für Teile außerhalb des computergestützten Systems nicht erforderlich ist, versuche ich einen VBA-Code zu erstellen, der gesperrt wird, wenn Spalte B leer ist und entsperrt, wenn der Wert "1" ist "

Der Code, den ich versucht haben, ist:

private Sub Worksheet_Change (ByVal Ziel als Strecke)

Dim aCell As Range 

Application.EnableEvents = False 

If Not Intersect(Range("B:B"), Target) Is Nothing Then 
    ActiveSheet.Unprotect "MYPASSWORD" 
    For Each aCell In Range("B:B") 
     If Len(Trim(aCell.Value)) = "" Then _ 
     aCell.Offset(, 1).Locked = True Else _ 
     aCell.Offset(, 1).Locked = False 
    Next 
    ActiveSheet.Protect "MYPASSWORD" 
End If 

End Sub

ich mag es wäre zu bekommen, wo, wenn ich die Eingabetaste drücken Der Cursor springt in die Spalte C, wenn der Teil ist im computerisierten System und geht einfach zur nächsten Zeile, wenn es nicht ist.

Antwort

1

Verwenden Sie das Argument UserInterfaceOnly anstelle des Entsperrens und Verriegelns. Dadurch wird die Benutzerschnittstelle gesperrt, sodass ein Benutzer nicht mit dem Blatt interagieren kann, aber jeder Makrocode ausgeführt werden kann, ohne das Arbeitsblatt entsperren zu müssen.

Der einfachste Weg, dies zu tun ist durch eine Schleife in dem Workbook_Open() Ereignisse läuft jedes Blatt einzeln zu sperren:

Private Sub Workbook_Open() 
    For Each ws In ThisWorkbook.Sheets 
     ws.Protect Password:="your password here", UserInterfaceOnly:=True 
    Next 
End Sub