我正在excel中创建预算,我已经复制并粘贴了一整年的月度预算大纲。某些支出在本工作簿的多张工作表中都在同一行。我想这样做,每当在这些行的单元格中输入数值时,它就会立即变为负值。
这些行中有非数字文本,所以我希望vba只在那些有数字的行中查找单元格。
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(Target, Rows("22:52")) Is Nothing Then 'VBA change event for all sheets
Dim rng As Range
For Each rng In Intersect(Target, Rows("22:52"))
If Application.WorksheetFunction.IsNumber(Rows("22:52")) Then
If rng.Value > 0 Then c.Value = 0 - c.Values
End If
End If
Next rng
End Sub
我得到的错误是如果没有块如果结束。
我想让它在这些行中的单元格中输入数值时,它会立即变为负值。
这就是你正在尝试的吗?
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error GoTo Whoa
Application.EnableEvents = False
Dim aCell As Range
If Not Intersect(Target, Rows("22:52")) Is Nothing Then
For Each aCell In Target
If aCell.Value2 > 0 Then aCell.Value = -1 * aCell.Value2
Next aCell
End If
Letscontinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume Letscontinue
End Sub
注意:如果您计划更改未激活的工作表的值,则必须按照Tim在上述评论中提到的操作。例如,如果Sheet1
处于活动状态,并且您希望写入Sheet2
。
更改
If Not Intersect(Target, Rows("22:52")) Is Nothing Then
至
If Not Intersect(Target, Sh.Rows("22:52")) Is Nothing Then