我相信我可能是错的,因为我找不到 MSDN 文章来证明这一点,但 SpecialCells 执行一种选择并触发Worksheet_SelectionChange
orWorkbook_SheetSelectionChange
事件,因此您需要关闭事件。
这是一个简单的测试方法。
将此代码放在工作表代码区域
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "Damn! The SpecialCells caused me to pop up!!!"
End Sub
Sub test()
Debug.Print ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
End Sub
Worksheet_SelectionChange
并Workbook_SheetSelectionChange
做同样的工作。Worksheet_SelectionChange
在工作表代码中使用的是特定工作表。并且Workbook_SheetSelectionChange
当您希望事件在该工作簿中的所有工作表中触发时使用。
您的评论问题:如果我们想将另一个事件与该行代码相关联怎么办。在这种情况下,我们无法抑制该事件。
现在,我们有两种选择。根据您的上述问题,我们不能使用Alternative One
. 所以你可以直接跳到Alternative 2
备选方案 1
关闭事件
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Whoa
Application.EnableEvents = False
'
'~~> YOUR CODE
'
Letscontinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume Letscontinue
End Sub
备选方案 2
SpecialCells
我们将使用.Find
.
Sub test()
Dim ws As Worksheet
Dim rSrcMatrix As Range
Dim Lrow As Long, LCol As Long
Set ws = ThisWorkbook.Sheets("Code Matrix")
With ws
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
Lrow = .Cells.Find(What:="*", _
After:=.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
LCol = .Cells.Find(What:="*", _
After:=.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Column
Else
Lrow = 1
End If
Set rSrcMatrix = .Range("Xfer_To_Xfer_Matrix").Range("A1")
Set rSrcMatrix = rSrcMatrix.Resize(Lrow, LCol)
Debug.Print rSrcMatrix.Address
End With
End Sub