vba excellocking所有单元格

我有一个包含几个vba子例程的woorkbook。 其中一个例程在用户选中checkbox之后对工作表进行更改。 问题是,代码运行后,所有单元格都被locking,即使未在“格式”单元格 – >“保护”菜单中标记为被locking。 但是,如果我调出VBE并执行代码msgbox Range(“C24”)。locking,解锁的单元格可以再次编辑。

代码如下:

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 eo 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的代码。 保护是必要的,因为一些单元格被locking。

 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。 您可以通过使用解除保护方法将locking属性设置为false或任何工作簿来解锁任何范围:

 Sub UnlockingCells() ActiveSheet.Range("A1:G37").Locked = False ActiveSheet.Unprotect End Sub