如果单元格A1:C1 =“否”,则行的风险中的所有单元格将被阻止输入

时间:2017-05-23 02:08:37

标签: excel vba excel-vba

任何人都知道如何阻止输入中的单元格(也将其灰显),例如单元格A1:C1 =“否”,那么直到说出F1的行的其余部分将变灰并被阻止输入?我希望在VBA中这样做,但如果有其他更简单的方法,请告诉我!谢谢!

嘀嘀

2 个答案:

答案 0 :(得分:0)

如评论中所提到的,请使用以下子

来使用工作簿更改事件
Sub test()
If Worksheets("Sheet1").Range("A1").Value = "no" And Worksheets("Sheet1").Range("B1").Value = "no" And Worksheets("Sheet1").Range("C1").Value = "no" Then
Worksheets("Sheet1").Range("D1:F1").Interior.Color = RGB(220, 220, 220)
Worksheets("Sheet1").Range("D1:F1").Locked = True
Worksheets("Sheet1").Protect
End If
End Sub

答案 1 :(得分:0)

只是为了展示一种不同的方法:

将它放在工作表代码选项卡中:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not (Intersect(Target, Me.Range("D1:F1")) Is Nothing) And Me.Evaluate("AND(LOWER(A1:C1)=""no"")") Then Me.Range("A1").Select
End Sub

要将它们变灰,最好是条件格式化:

Range:   =$D$1:$F$1
Formula: =AND(LOWER($A$1:$C$1)="no")
  • 使用条件格式允许您根据需要更改单元格而无需更改VBA代码(这也会更快)
  • VBA部分本身,如果A1:C1为" No"则将所选单元格设置为A1。并且选择范围,其还包括D1:F1
  • 的任何单元格
  • 如果您希望LOWER区分大小写,则可以跳过Private Sub Worksheet_Change(ByVal Target As Range) Dim a As Boolean a = Me.Evaluate("AND(LOWER(A1:C1)=""no"")") If a <> Me.Range("D1").Locked Then Me.Unprotect Me.Range("D1:F1").Locked = a Me.Protect End If End Sub

唯一的结果是:如果A1:C1是&#34;没有&#34;您仍然可以范围粘贴到单元格(不是D1:F1中的任何一个),其中还包括已锁定的单元格。
最大的专业人士是:这也适用于共享工作簿(因为不需要锁定/解锁工作表)

修改

如果需要保护细胞,那么这样的事情就可以了:

val spark = SparkSession.builder().master("local").appName("test").getOrCreate()

import spark.implicits._
case class A(id: Long, distance: Double)
val df = List(A(1, 5.0), A(1,3.0), A(1, 7.0), A(1, 4.0), A(2, 1.0), A(2, 3.0), A(2, 4.0), A(2, 7.0))
  .toDF("id", "distance")

val window = Window.partitionBy("id").orderBy("distance")  
val result = df.withColumn("rank", row_number().over(window)).where(col("rank") <= 2 )

result.drop("rank").show()