【发布时间】:2021-07-07 11:10:20
【问题描述】:
这是我到目前为止编写的代码,它只是不停地走,我想把它做成一个块(如果可能的话)以使其更易于管理。
代码的目的是在某个单元格中不存在任何已知名称时擦除某些单元格。如果存在 Namen,我还有其他基于每个名称的单独代码,这些代码将特定数据粘贴到特定单元格中:
Sub Eraser()
If Range("E4").Value <> "Name1" And Range("E4").Value <> "Name2" And Range("E4").Value <> "Name3" And Range("E4").Value <> "Name4" And Range("E4").Value <> "Name5" And Range("E4").Value <> "Name6" And Range("E4").Value <> "Name7" And Range("E4").Value <> "Name8" And Range("E4").Value <> "Name9" And Range("E4").Value <> "Name10" And Range("E4").Value <> "Name11" And Range("E4").Value <> "Name12" And Range("E4").Value <> "Name13" Then
Range("W4").Value = ""
End If
End Sub
我尝试过类似的东西
Sub Eraser()
If Range("E4").Value <> "Name1" & _
Range("E4").Value <> "Name2" & _
Range("E4").Value <> "Name3" & _
Range("E4").Value <> "Name4" & _
Range("E4").Value <> "Name5" & _
Range("E4").Value <> "Name6" & _
Range("E4").Value <> "Name7" & _
Range("E4").Value <> "Name8" & _
Range("E4").Value <> "Name9" & _
Range("E4").Value <> "Name10" & _
Range("E4").Value <> "Name11" & _
Range("E4").Value <> "Name12" & _
Range("E4").Value <> "Name13" Then
Range("W4").Value = ""
End If
End Sub
和
Sub Eraser()
If Range("E4").Value <> "Name1" & _
And Range("E4").Value <> "Name2" & _
And Range("E4").Value <> "Name3" & _
And Range("E4").Value <> "Name4" & _
'And et cetera'
仅供参考,代码在单行时完美运行,我只是一个完美主义者
由于许多人提供了我认为与我试图做的事情相矛盾的代码,我将添加我的其他代码,这些代码是 Eraser Sub 旨在擦除的。如果有人对如何使它们更优雅或更简洁有任何想法,我很乐意。
Sub Name1()
If Range("E4").Value = "Name1" Then
Range("T6").Value = "EID1#" 'Employee ID Number
Range("U10").Value = "SN1" 'Serial Number
Range("I19").Value = "TN1" 'Trainer Name
Range("AA19").Value = "TED1" 'Trainer Expiration Date
Range("AB6").Value = "CN1" 'Course Name
End If
End Sub
Sub Name2()
If Range("E4").Value = "Name2" Then
Range("T6").Value = "EID2"
Range("U10").Value = "SN2"
Range("I19").Value = "TN2"
Range("AA19").Value = "TED2"
Range("AB6").Value = "CN2"
End If
End Sub
Sub Name3()
If Range("E4").Value = "Name3" Then
Range("T6").Value = "EID3"
Range("U10").Value = "SN3"
Range("I19").Value = "TN3"
Range("AA19").Value = "TED3"
Range("AB6").Value = "CN3"
End If
End Sub
Sub Eraser()
If Range("E4").Value <> "Name 1" _
And Range("E4").Value <> "Name2" _
And Range("E4").Value <> "Name3" Then
Range("T6").Value = ""
Range("U10").Value = ""
Range("I19").Value = ""
Range("AA19").Value = ""
Range("AB6").Value = ""
End If
End Sub
同样,我为此进行了大约 16 次不同的迭代,虽然我的一些团队拥有相同的信息,但其中很多人拥有不同的信息。所以我单独编写了每个代码,并编写了一个自动调用每个 Sub 的更新检查代码。 Eraser Sub 主要用于识别个人身份信息 (PII)
为了勤奋,这里是更新检查子
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$4" Then
Call Name1
Call Name2
Call Name3
Call Eraser
End If
End Sub
【问题讨论】:
-
Excel 的
Match()函数怎么样,如下所述:stackoverflow.com/questions/7031416/… -
您的第二个示例在条件之间缺少
And关键字。但请不要这样做,这是一个糟糕的设计。 -
Call由于官方的帮助已被弃用(尽管由于个人喜好而经常使用)。 @todayimgonnalearn
标签: excel vba if-statement