我無法鎖定我的工作表,因爲我需要訪問某些單元來運行宏。強制用戶只選擇一個特定單元
我想要一個當用戶試圖選擇任何其他單元格時選擇單元格(F1)的宏。
我需要這樣一個宏,我想:
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
我無法鎖定我的工作表,因爲我需要訪問某些單元來運行宏。強制用戶只選擇一個特定單元
我想要一個當用戶試圖選擇任何其他單元格時選擇單元格(F1)的宏。
我需要這樣一個宏,我想:
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
把工作表模塊中的代碼:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call Cells(1, 6).Select
End Sub
他希望「每當用戶嘗試選擇任何其他單元格時,選擇該單元格的宏(F1)」。無論如何,我認爲不改變任何單元格是不可能的(除非你使用VBA,但我想用戶不會使用VBA)。 – mielk
這應該這樣做+1,但用戶將能夠粘貼100個值(遍佈整個地方) –
你們有沒有看看我發現的這個bug(http://bit.ly/1KXjeuf)?謝謝。 –
像其他人寫的,是更好地取消保護片,播放您的宏和保護工作表,但如果您認爲禁用所有單元格,減去您識別的單元格是最好的方法,則可以使用此代碼:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Range("F10")) Is Nothing Then 'use your free cell
do
Else
Application.Undo
MsgBox "you can modify only the cell(F10)" 'Just to inform what is the cell editable
Range("F10").Select
End If
Application.EnableEvents = True
End Sub
你們有沒有看看我發現的這個bug(http://bit.ly/1KXjeuf)?謝謝。 –
以下是2種選擇:
。
1.在不保護片 - 每片模塊中的自定義 「解鎖」 細胞(實施例 「C3」)
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
With Target
If .Column <> 3 Or .Row <> 3 Or .CountLarge > 1 Then Application.Undo
End With
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
With Target
If .Column <> 3 Or .Row <> 3 Or .CountLarge > 1 Then Cells(3, 3).Select
End With
Application.EnableEvents = True
End Sub
。
2.保護片 - 的ThisWorkbook模塊中
Private Sub Workbook_Open()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
protectWS ws
Next
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
protectWS Sh
End Sub
Public Function protectWS(Optional ByRef ws As Worksheet = Nothing) As Boolean
If ws Is Nothing Then Set ws = Application.ActiveSheet
If Not isWSProtected(ws) Then
ws.Protect Password:=vbNullString, _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True, _
UserInterfaceOnly:=True, _
AllowFormattingCells:=False, _
AllowFormattingColumns:=False, _
AllowFormattingRows:=False, _
AllowInsertingColumns:=False, _
AllowInsertingRows:=False, _
AllowInsertingHyperlinks:=False, _
AllowDeletingColumns:=False, _
AllowDeletingRows:=False, _
AllowSorting:=False, _
AllowFiltering:=False, _
AllowUsingPivotTables:=False
End If
End Function
Private Function isWSProtected(Optional ByRef ws As Worksheet = Nothing) As Boolean
isWSProtected = ws.ProtectContents Or _
ws.ProtectDrawingObjects Or _
ws.ProtectScenarios
End Function
選項1迫使用戶到小區C3
選項2使用空密碼,並允許VBA執行(UserInterfaceOnly
)
你知道你可以取消保護,保護內VBA材料了嗎?鎖定你的工作表可能更容易,並在執行宏時解鎖! ;) – R3uK
好吧,我知道,但是在我訪問這張表的代碼中有很多次,我不得不多次鎖定和解鎖它。 –
你可以保護範圍,只需要打開你需要的範圍。 http://stackoverflow.com/questions/7763205/lock-certain-cells-in-a-range – MatthewD