我有一个模板,用户在其中输入帐户信息,信息的默认范围是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。
预先感谢
答案 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