[英]vba excel locks all cells
我有一本woorkbook,其中包含幾個vba子例程。 在用戶選中復選框后,其中一種例程會更改工作表。 問題在於,代碼運行后,所有單元格都被鎖定,即使未在“格式化單元格”->“保護”菜單中將其標記為已鎖定。 但是,如果我調出VBE並執行代碼msgbox Range(“ C24”)。Locked,則解鎖的單元格可以再次編輯。
代碼如下:
Sub cbAcertos_Click()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Formulário")
Call unProtectWindow
If Me.cbAcrescimo Then
'Caso tenhamos acrescentado o valor de acréscimo por refeição do AEV
If Me.cbAcertos Then
'E seja necessário efectuar algum acerto
Application.ScreenUpdating = False
'Desligamos a actualização do ecrã
With Range("F30")
.ClearContents
.Value = "Valor Acertos:"
.Borders.LineStyle = xlNone
End With
'Inserimos as etiquetas de texto
With Range("G30")
.Formula = ""
.NumberFormat = "$#,##0.00;[Red]$#,##0.00"
.Borders.LineStyle = xlNone
End With
'Preparamos a célula que receberá o valor do acerto
With Range("F31")
.Value = "Sub-Total:"
.Borders.LineStyle = xlNone
End With
'Mais uma etiqueta
With Range("G31")
.Formula = "=G29+G30"
.FormulaHidden = True
.Borders.LineStyle = xlNone
End With
'Preparamos a célula que efectua o cálculo da soma dos valores
'com o valor de acerto a efectuar
With Range("F32")
.Value = "Total (IVA):"
.Borders(xlEdgeTop).LineStyle = xlDouble
.Borders(xlEdgeTop).ColorIndex = 1
End With
'Etiqueta da célula com o total
'acrescido de IVA
With Range("G32")
.Formula = "=IF(Escola=""Dr. João Rocha - Pai"", G31, G31*1.23)"
.FormulaHidden = True
.NumberFormat = "$#,##0.00;[Red]$#,##0.00"
.Borders(xlEdgeTop).LineStyle = xlDouble
.Borders(xlEdgeTop).ColorIndex = 1
End With
'Preparamos a célula que efectua
'o cálculo do valor acrescido de IVA
Application.ScreenUpdating = True
'Activamos a actualização do ecrã
ElseIf Not Me.cbAcertos Then
'Caso não tenhamos de efectuar acertos
Application.ScreenUpdating = False
'Desligamos a actualização do ecrã
With Range("F30")
.Value = "Total (IVA):"
.Borders(xlEdgeTop).LineStyle = xlDouble
.Borders(xlEdgeTop).ColorIndex = 1
End With
'Preparamos a etiqueta do total
'acrescido de IVA
With Range("F31")
.ClearContents
End With
'Limpeza de células não actualizadas
With Range("G30")
.Formula = "=IF(Escola=""Dr. João Rocha - Pai"", G29, G29*1.23)"
.Borders(xlEdgeTop).LineStyle = xlDouble
.Borders(xlEdgeTop).ColorIndex = 1
End With
'Preparamos a célula que efectua, agora,
'o cálculo do total acrescido de IVA
With Range("G31")
.Formula = ""
End With
'Mais limpezas
With Range("F32")
.Value = ""
.Borders.LineStyle = xlNone
End With
With Range("G32")
.Formula = ""
.FormulaHidden = False
.NumberFormat = xlNone
.Borders.LineStyle = xlNone
End With
Application.ScreenUpdating = True
End If
Else
'Caso não tenhamos de acrescentar o acréscimo do AEV
If Me.cbAcertos Then
'Desligamos a actualização do ecrã
Application.ScreenUpdating = False
'Acrescentamos o texto
With Range("F28")
.Value = "Valor Acerto:"
End With
'Limpamos e desbloqueamos a célula que recebe o valor do acerto
With Range("G28")
.ClearContents
End With
'Acrescentamos a célula que recebe a soma
'entre o valor das refeições e o valor do acerto
With Range("F29")
.Value = "Sub-Total:"
.FormulaHidden = True
End With
With Range("G29")
.Formula = "=G27+G28"
End With
'Acrescentamos a célula que recebe o valor total
'acrescido de IVA
With Range("F30")
.Font.Size = 10
.Font.Bold = True
.HorizontalAlignment = xlRight
.VerticalAlignment = xlCenter
.Value = "Total (IVA):"
End With
'Acrescentamos o cálculo do IVA caso
'não sejam refeições do AEV
With Range("G30")
.FormulaHidden = True
.Font.Size = 10
.Formula = "=IF(Escola=""Dr. João Rocha - Pai"", G29, G29*1.23)"
.NumberFormat = "$#,##0.00;[Red]$#,##0.00"
End With
'Acrescentamos a border dupla para indicar a soma
Range("F30:G30").Borders(xlEdgeTop).LineStyle = xlDouble
Range("F30:G30").Borders(xlEdgeTop).ColorIndex = 1
'Activamos a actualização do ecrã
Application.ScreenUpdating = True
MsgBox Range("C24").Locked
ElseIf Not Me.cbAcertos Then
'Caso não existam acertos desactivamos o ecrã
Application.ScreenUpdating = False
'Alteramos o conteúdo da célula para indicar
'o total acrescido de IVA
With Range("F28")
.Value = "Total (IVA):"
End With
'Limpamos o conteúdo nas restantes células
With Range("F29")
.ClearContents
End With
'Alteramos a formula existente
With Range("G28")
.Formula = "=IF(Escola=""Dr. João Rocha - Pai"", G27, G27*1.23)"
End With
'Mais limpezas
With Range("G29")
.Formula = ""
End With
With Range("F30")
.ClearContents
End With
With Range("G30")
.Formula = ""
End With
With Range("F30:G30")
.Borders.LineStyle = xlNone
End With
'Activamos a actualização do ecrã
Application.ScreenUpdating = True
End If
End If
Call protectWindow
End Sub
這不應該發生,並且用戶應該能夠始終在沒有MsgBox hack的情況下編輯未鎖定的單元格。 誰能發現代碼錯誤並提出更正建議?
我正在添加用於protectWindow和unProtectWindow的代碼。 由於某些單元被鎖定,因此必須進行保護。
Sub protectWindow()
Dim wb As Workbook
Dim ws As Worksheet
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Formulário")
wb.Protect pwd, Structure:=True, Windows:=True
With ws
.Protect pwd
.EnableSelection = xlUnlockedCells
End With
End Sub
Sub unProtectWindow()
With ThisWorkbook
.Unprotect pwd
.Worksheets("Formulário").Unprotect pwd
End With
End Sub
這可能是一個錯誤嗎?
您希望您的牢房保持解鎖狀態,對嗎? 如果是這樣,那么您不應該在Sub的末尾調用protectWindow。 您可以通過將其Locked屬性設置為false來解鎖任何范圍,也可以使用Unprotect方法來解鎖任何工作簿:
Sub UnlockingCells()
ActiveSheet.Range("A1:G37").Locked = False
ActiveSheet.Unprotect
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.