输入单元格值时的格式范围

时间:2019-03-29 12:58:21

标签: excel vba

我有一个模板,用户在其中输入帐户信息,信息的默认范围是B18至S52。这非常适合屏幕,并且足够大的范围用于90%的时间输入详细信息。但是,在某些情况下,该用途可能具有几百行的数据。它通常会被复制和粘贴,但由于超出了默认范围,因此会使工作表看起来混乱。

我正在尝试使格式化动态化,如果用户输入的数据超出默认范围,则会触发一个宏,该宏将对行进行计数并重新格式化范围。

到目前为止,我尚未在线研究的代码是:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address = "$B$18" Then
        Call CountLoc
    End If

End Sub

Public Sub CountLoc()

With Application
    .DisplayAlerts = False
    '.Calculation = xlManual
    .EnableEvents = False
    .ScreenUpdating = False
End With

Dim LocCount As Long
Dim WsInput As Worksheet
Dim i As Long
Dim rng As Range

Set WsInput = Sheets("Account Input")

With WsInput
    LocCount = .Range("B1048576").End(xlUp).row - 17
End With

If LocCount > 35 Then

Set rng = WsInput.Range(WsInput.Cells(18, 2), WsInput.Cells(17 + LocCount, 19))

With rng
    .Interior.Color = RGB(220, 230, 241)
    .Borders.LineStyle = xlContinuous
    .Borders.Color = vbBlack
    .Borders.Weight = xlThin
End With

For i = 1 To LocCount Step 2

Rows(18 + i).EntireRow.Interior.Color = vbWhite

Next i

Else

Exit Sub

End If

这基本上每隔一行将淡蓝色和白色上色,并为每个单元格添加边框。 Count Loc工作正常,可以执行我需要做的事情,但是我的问题是我无法触发worksheet_Change。

预先感谢

1 个答案:

答案 0 :(得分:0)

我使用您的代码进行了一次小测试,我注意到的第一件事是您设置了Application.EnableEvents to False并且没有将其重新设置为打开,因此您正在取消诸如{{1}一旦解决,该事件将在单元格B18更改的任何时间触发,除非输入的值来自粘贴(不确定原因),但是如果您使用Intersect方法,则即使该值来自复制粘贴也可以工作

我对您的代码做了t几个星期,我认为它现在可以工作了。请对其进行检查并尝试一下。

Worksheet_Change Event
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, ThisWorkbook.Sheets("Account Input").Range("B18")) Is Nothing Then
   Call CountLoc
End If
End Sub