如果你们能帮助我,那会很棒,因为它会对我有所帮助。
这是我正在尝试做的事情:
这是我的代码:
Sub Test()
'
' Test Macro
'
' Keyboard Shortcut: Ctrl+b
'
Range("A5").Select
Cells.Find(What:="PL 1", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
If Not IsEmpty(ActiveCell.Value) Then
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Copy
Range("A5").Select
ActiveSheet.Paste
End If
Range("A5").Select
Cells.Find(What:="PL 2", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
If Not IsEmpty(ActiveCell.Value) Then
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Copy
Range("A6").Select
ActiveSheet.Paste
End If
Range("A5").Select
Cells.Find(What:="PL 3", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
If Not IsEmpty(ActiveCell.Value) Then
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Copy
Range("A7").Select
ActiveSheet.Paste
End If
End Sub
答案 0 :(得分:3)
您可以尝试这样的事情(未经测试):
viewController
原则是您需要一次编写所需的代码,然后创建一个循环来为您重复代码。
这个答案的另一部分是检查是否找到了单元格 - 为此,我们使用
检查范围是否已实际设置(这意味着它不是replyController
)
Sub HideAndSeek()
Dim foundCell As Range
For i = 1 To 3
Set foundCell = Cells.Find(What:="PL " & i, LookIn:=xlFormulas, LookAt:=xlPart)
If Not foundCell Is Nothing Then
Intersect(foundCell.EntireRow, ActiveSheet.UsedRange).Offset(-1, 0).Value = _
Intersect(foundCell.EntireRow, ActiveSheet.UsedRange).Value
End If
Set foundCell = Nothing
Next
End Sub
答案 1 :(得分:3)
Cells.Find
是一个返回Range
对象引用的函数;当它没有找到任何内容时,引用将是Nothing
。而且您无法在.Activate
上致电Nothing
:
如果未找到匹配项,则此方法返回Nothing。 Find方法不会影响选择或活动单元格。(MSDN)
Cells.Find(What:="PL 2", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
您需要重写代码并避免。选择和。激活,并避免使用ActiveCell
并隐式使用ActiveSheet
(您正在通过不符合条件进行操作) Cells
使用正确的工作表参考调用。)
您的格式化使得难以阅读代码,原因如下:
比较:
Cells.Find(What:="PL 2", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False) _
.Activate
这只是可读性。问题是你基本上假设 .Find
返回一个有效的对象引用。 不要假设,明确检查:
Set result = Cells.Find(...)
If Not result Is Nothing Then result.Activate
但实际上,你需要想办法避免。选择和。激活。