我的目标是创建一个 VBA 宏,通过 突出显示行和列ActiveCell
,因此我编写了以下代码:
Function Col_Letter(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function
Public Sub SetCellPosition()
Dim currentActiveCellAdress, columnLetter, rowRangeAddress, columnRangeAddress, selectionRangeAdress As String
Dim rowNumber As Long
columnLetter = Col_Letter(ActiveCell.Column)
rowNumber = ActiveCell.Row
rowRangeAddress = columnLetter & "1:" & columnLetter & rowNumber
columnRangeAddress = "A" & rowNumber & ":" & columnLetter & rowNumber
currentActiveCellAdress = ActiveCell.Address
selectionRangeAdress = rowRangeAddress & ", " & columnRangeAddress
Debug.Print selectionRangeAdress
Debug.Print currentActiveCellAdress
Range(selectionRangeAdress).Select
Range(currentActiveCellAdress).Activate
End Sub
该宏运行良好。但是在调用该宏之后Workbook_SheetSelectionChange
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Call SetCellPosition
End Sub
它给了我一个错误,工作表中的选择在突出显示行和列ActiveCell
和第一行之间闪烁,请参见图片。
宏可以在这里下载。
亲切的问候。
简
你的问题是你在一个SelectionChange
事件中调用这个宏。然而这一行:
Range(selectionRangeAdress).Select
算作一个SelectionChange
事件,这意味着它将调用这个宏。这意味着你在宏中调用这个宏,导致一个递归函数,直到你用完堆栈空间并出错。为了防止这种情况,请Application.EnableEvents = False
在开头和True
结尾添加。这可以防止在宏运行时触发任何事件,从而防止函数在其中调用自身。
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
Call SetCellPosition
Application.EnableEvents = True
End Sub
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句