在一个单元格中输入数据后锁定特定的单元格组

时间:2017-08-04 15:08:31

标签: excel vba excel-vba

一旦在一个单元格中输入数据,我需要使用VBA代码来锁定一组特定的单元格。上下文:用户将沿着一行输入用户名,传递等。行中的某些单元格被锁定,有些单元格被解锁以便他们需要输入数据,但是一旦他们在最后一个单元格中回答了他们的数据,我想要该行中所有以前未锁定的单元格都要锁定。

我无法在不经常更新和反复锁定单元格的情况下使其工作。这就是我现在所拥有的。

import pandas as pd
df = pd.DataFrame({'Class_1': [0.98, 0.93, 0.95], 'Class_2': [0.48, 0.43, 0.45],  'Class_3': [0.78, 0.73, 0.75]}, index = ['precision', 'recall', 'fscore'])
display(df)
import seaborn as sns
import matplotlib.pyplot as plt
sns.stripplot(data = data)
plt.show()

2 个答案:

答案 0 :(得分:1)

如果您希望工作簿在“O22”不为空时自动锁定该范围,那么这就是您需要的代码

Private Sub Worksheet_Change(ByVal Target As Range)
    'Check if O22 has changed before running rest of code
    If Not Intersect(Target, Range("O22")) Is Nothing Then
        'If the final column isn't empty then
        If Range("O22") <> vbNullString Then
            'Unprotect the sheet
            Me.Unprotect
            'Lock the target cells
            Me.Range("F22,G22,J22,K22,L22,O22").Locked = False
            'Reprotect the sheet
            Me.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        End If
    End If
End Sub

一般来说,在VBA中你应该避免使用“选择”或“激活”而是引用这些对象,请参阅this question.

很难准确判断工作簿的结构,但如果将此代码复制到“工作表”代码模块中,那么它应该适用于相关工作表,如果您需要它可以在更多的工作簿级别上工作那么请详细说明需要什么。

答案 1 :(得分:0)

听起来像你想要更像这样的东西(注意它也在不同的事件中)

Private Sub Worksheet_Change(ByVal Target As Range)

  If Target.Column = 20 Then
    Range("F22,G22,J22,K22,L22,O22").Locked = True
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
  End If

End Sub

20更改为您希望代码在其更改时运行的列。