在Excel VBA中通过ActiveCell高亮显示行和列

在Excel VBA中通过ActiveCell高亮显示行和列,excel,vba,Excel,Vba,我的目标是创建一个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 currentA

我的目标是创建一个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
这个宏运行得很好。但在通过工作簿调用宏后,请选择更改

这给了我一个错误,选择在表之间闪烁突出显示行和列的ActiveCell和第一行,请看图片

可以下载宏

亲切的问候


Jan

您的问题是在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

当它实现时,SelectionRangeAddress的值是多少?谢谢你,Plutian,现在它工作了。我以前尝试过Application.EnableEvents=False和Application.EnableEvents=True,但工作簿\u Sheet SelectionChange保持在以前的无限状态,因此我必须重新启动Excel才能工作。
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
    Call SetCellPosition
Application.EnableEvents = True
End Sub