我有一個包含幾個vba子例程的woorkbook。其中一個例程在用戶選中複選框後對工作表進行更改。問題是,代碼運行後,所有單元格都被鎖定,即使未在「格式」單元格 - >「保護」菜單中標記爲鎖定。但是,如果我調出VBE並執行代碼msgbox Range(「C24」)。鎖定,解鎖的單元格可以再次編輯。vba excel鎖定所有單元格
的代碼如下:
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破解。 任何人都可以發現錯誤的代碼並提出更正?
我添加了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
這可能是一些錯誤?
您能分享'Call protectWindow'的代碼嗎? –
添加了代碼@SiddharthRout –